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)[source][source]¶
使用无矩阵 LOBPCG 方法查找对称正定广义特征值问题的 k 个最大(或最小)特征值和相应的特征向量。
此函数是可通过 method 参数选择的以下 LOBPCG 算法的前端
method=”basic” - 由 Andrew Knyazev 引入的 LOBPCG 方法,参见 [Knyazev2001]。一种不太稳健的方法,当 Cholesky 应用于奇异输入时可能会失败。
method=”ortho” - 具有正交基选择的 LOBPCG 方法 [StathopoulosEtal2002]。一种稳健的方法。
支持的输入是稠密矩阵、稀疏矩阵和稠密矩阵批次。
注意
一般来说,基本方法每次迭代花费的时间最少。然而,稳健的方法收敛速度更快且更稳定。因此,通常不建议使用基本方法,但在某些情况下,使用基本方法可能是首选。
警告
反向方法不支持稀疏和复数输入。它仅在未提供 B 时(即 B == None)有效。我们正在积极开发扩展,算法的详细信息将及时发布。
警告
虽然假定 A 是对称的,但 A.grad 不是。为了确保 A.grad 是对称的,以便在首阶优化例程中 A - t * A.grad 是对称的,在运行 lobpcg 之前,我们执行以下对称化映射:A -> (A + A.t()) / 2。仅当 A 需要梯度时才执行此映射。
- 参数
A (Tensor) – 大小为 的输入张量
B (Tensor, 可选) – 大小为 的输入张量。未指定时,B 被解释为单位矩阵。
X (tensor, 可选) – 大小为 的输入张量,其中 k <= n <= m。指定时,它用作特征向量的初始近似值。X 必须是稠密张量。
iK (tensor, 可选) – 大小为 的输入张量。指定时,它将用作预处理器。
k (integer, 可选) – 请求的特征对的数量。默认为 列的数量(如果指定)或 1。
n (integer, 可选) – 如果未指定 ,则 n 指定生成的特征向量随机近似值的大小。n 的默认值为 k。如果指定了 ,则 n 的值(如果指定)必须是 列的数量。
tol (float, 可选) – 停止标准的残差容差。默认为 feps ** 0.5,其中 feps 是给定输入张量 A 数据类型的最小非零浮点数。
largest (bool, 可选) – 当为 True 时,求解最大特征值的特征值问题。否则,求解最小特征值的特征值问题。默认为 True。
method (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 (dict, 可选) – 使用 method=”ortho” 时 LOBPCG 算法的各种参数。
ortho_fparams (dict, 可选) – 使用 method=”ortho” 时 LOBPCG 算法的各种参数。
ortho_bparams (dict, 可选) – 使用 method=”ortho” 时 LOBPCG 算法的各种参数。
- 返回
特征值张量,大小为
X (Tensor): 特征向量张量,大小为
- 返回类型
E (Tensor)
参考文献
[Knyazev2001] Andrew V. Knyazev。(2001) Toward the Optimal Preconditioned Eigensolver: Locally Optimal Block Preconditioned Conjugate Gradient Method. SIAM J. Sci. Comput., 23(2), 517-541. (25 页) https://epubs.siam.org/doi/abs/10.1137/S1064827500366124
[StathopoulosEtal2002] Andreas Stathopoulos 和 Kesheng Wu。(2002) A Block Orthogonalization Procedure with Constant Synchronization Requirements. 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) A Robust and Efficient Implementation of LOBPCG. SIAM J. Sci. Comput., 40(5), C655-C676. (22 页) https://epubs.siam.org/doi/abs/10.1137/17M1129830