torch.lobpcg¶
- torch.lobpcg(A, k=None, B=None, X=None, n=None, iK=None, niter=None, tol=None, largest=None, method=None, tracker=None, ortho_iparams=None, ortho_fparams=None, ortho_bparams=None)[源代码]¶
使用无矩阵的LOBPCG方法找到对称正定广义特征值问题的k个最大(或最小)特征值及其对应的特征向量。
此函数是以下LOBPCG算法的封装,可通过方法参数选择:
method=”basic” - 由Andrew Knyazev引入的LOBPCG方法,参见[Knyazev2001]。一种较不稳健的方法,当Cholesky应用于奇异输入时可能会失败。
method=”ortho” - 具有正交基选择的LOBPCG方法 [StathopoulosEtal2002]。一种稳健的方法。
支持的输入包括密集矩阵、稀疏矩阵以及密集矩阵的批次。
注意
一般来说,基本方法每次迭代花费的时间最少。然而,鲁棒方法收敛更快且更稳定。因此,通常不推荐使用基本方法,但在某些情况下,使用基本方法可能更受青睐。
警告
backward 方法不支持稀疏和复杂输入。 它仅在未提供 B 时有效(即 B == None)。 我们正在积极开发扩展功能,算法的详细信息将很快发布。
警告
虽然假设A是对称的,但A.grad不是。 为了确保A.grad是对称的,从而使得A - t * A.grad在 一阶优化程序中是对称的,在运行lobpcg之前,我们执行以下对称化映射:A -> (A + A.t()) / 2。 该映射仅在A需要梯度时执行。
- Parameters
A (张量) – 输入张量,大小为
B (Tensor, 可选) – 输入的张量,大小为 。当未指定时,B 被解释为单位矩阵。
X (张量, 可选) – 大小为 的输入张量,其中 k <= n <= m。当指定时,它被用作 特征向量的初始近似。X 必须是一个 密集张量。
iK (张量, 可选) – 大小为 的输入张量。当指定时,它将被用作预处理器。
k (整数, 可选) – 请求的特征对的数量。默认是 列的数量(当指定时)或1。
n (整数, 可选) – 如果 未指定,则 n 指定生成的随机特征向量近似的大小。n 的默认值为 k。如果 已指定,则 n 的值(当指定时)必须是 的列数。
tol (float, 可选) – 停止准则的残差容差。默认值为 feps ** 0.5,其中 feps 是给定输入张量 A 数据类型中最小的非零浮点数。
最大 (bool, 可选) – 当为True时,求解最大特征值的特征问题。否则,求解最小特征值的特征问题。默认值为True。
方法 (str, 可选) – 选择LOBPCG方法。请参阅上述函数的描述。默认值为“ortho”。
niter (int, 可选) – 最大迭代次数。当达到此值时,迭代过程将强制停止,并返回当前的特征对近似值。对于无限迭代但直到满足收敛标准为止的情况,请使用 -1。
tracker (callable, 可选) –
用于跟踪迭代过程的函数。当指定时,它会在每次迭代步骤中被调用,参数为LOBPCG实例。LOBPCG实例包含了迭代过程的完整状态,具体属性如下:
iparams, fparams, bparams - 分别为整数、浮点数和布尔值的输入参数字典
ivars, fvars, bvars, tvars - 分别为整数、浮点数、布尔值和Tensor类型的迭代变量字典。
A, B, iK - 输入Tensor参数。
E, X, S, R - 迭代Tensor变量。
例如:
ivars[“istep”] - 当前迭代步骤 X - 当前的特征向量近似 E - 当前的特征值近似 R - 当前的残差 ivars[“converged_count”] - 当前收敛的特征对数量 tvars[“rerr”] - 当前的收敛标准状态
请注意,当tracker存储来自LOBPCG实例的Tensor对象时,必须复制这些对象。
如果tracker设置bvars[“force_stop”] = True,迭代过程将被强制停止。
ortho_iparams (字典, 可选) – 使用 method=”ortho” 时LOBPCG算法的各种参数。
ortho_fparams (字典, 可选) – 使用 method=”ortho” 时,LOBPCG 算法的各种参数。
ortho_bparams (字典, 可选) – 使用 method=”ortho” 时,LOBPCG 算法的各种参数。
- Returns
特征值的张量,大小为
X (张量): 特征向量的张量,大小为
- Return type
E (张量)
参考文献
[Knyazev2001] Andrew V. Knyazev. (2001) 朝向最优预处理特征求解器:局部最优块预处理共轭梯度法。SIAM J. Sci. Comput., 23(2), 517-541. (25页) https://epubs.siam.org/doi/abs/10.1137/S1064827500366124
[StathopoulosEtal2002] Andreas Stathopoulos 和 Kesheng Wu. (2002) 一种具有恒定同步需求的块正交化程序。SIAM J. Sci. Comput., 23(6), 2165-2182. (18 页) https://epubs.siam.org/doi/10.1137/S1064827500370883
[DuerschEtal2018] Jed A. Duersch, Meiyue Shao, Chao Yang, Ming Gu. (2018) 一种鲁棒且高效的LOBPCG实现。 SIAM J. Sci. Comput., 40(5), C655-C676. (22页) https://epubs.siam.org/doi/abs/10.1137/17M1129830