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个特征值及其对应的特征向量。

此函数提供了通过method参数选择的以下LOBPCG算法的前端接口:

method="basic" - 由 Andrew Knyazev 提出的 LOBPCG 方法,详见 [Knyazev2001]。该方法不够稳健,在对奇异输入进行 Cholesky 分解时可能会失效。

method="ortho" - 使用正交基选择的LOBPCG方法,具有较高的稳定性 [StathopoulosEtal2002]。

支持的输入有稠密矩阵、稀疏矩阵以及稠密矩阵的批处理。

注意

一般来说,基本方法每次迭代所需时间最短。然而,健壯的方法收敛速度更快且更加稳定。因此,通常不建议使用基本方法,但有些情况可能会优先选择它。

警告

backward 方法不支持稀疏和复杂输入。它仅在没有提供 B 的情况下(即 B == None)有效。我们正积极进行扩展工作,并会尽快公布相关算法的细节。

警告

虽然假设A是对称的,但A.grad不是对称的。为了确保在一阶优化例程中A - t * A.grad是对称的,我们在运行lobpcg之前执行以下操作:A -> (A + A.t()) / 2。此映射仅在A需要梯度时进行。

参数
  • A (Tensor) – 输入张量,其大小为 $(*, m, m)$

  • B (Tensor, 可选) – 输入张量的大小为$(*, m, m)$。如果未指定,B 将被视为单位矩阵。

  • X (tensor, optional) – 输入张量,大小为$(*, m, n)$(其中k <= n <= m)。当指定时,它被用作特征向量的初始近似值。X必须是稠密张量。

  • iK (tensor, optional) – 输入张量,大小为$(*, m, m)$。如果提供,则将其用作预条件子。

  • k (整数, 可选) – 请求的本征对的数量。默认值是$X$列的数量(如果已指定),否则为1

  • n (整数, 可选) – 如果未指定$X$,则n表示生成的随机特征向量近似值的大小。默认值为k。如果已指定$X$,那么n(可选)必须等于$X$的列数。

  • tol (float, 可选) – 停止准则的残差容限。默认值为feps ** 0.5,其中feps是输入张量A数据类型中的最小非零浮点数。

  • largest (bool, 可选) – 当设置为 True 时,求解最大特征值的特征问题;否则,求解最小特征值的特征问题。默认值为 True

  • method (str, 可选) – 选择 LOBPCG 方法。详情参见上述函数的描述。默认值为“ortho”。

  • niter (int, 可选) – 最大迭代次数。当达到该值时,迭代过程将停止,并返回当前的特征对近似值。若要进行无限次迭代直到满足收敛条件,则使用-1

  • tracker (可调用对象, 可选) –

    一个用于追踪迭代过程的函数。当指定时,它会在每次迭代步骤中被调用,并接收LOBPCG实例作为参数。LOBPCG实例包含以下属性来保存整个迭代过程的状态:

    iparams, fparams, bparams - 分别用于整数、浮点数和布尔值输入参数的字典

    ivars, fvars, bvars, tvars - 分别表示整型、浮点型、布尔型和张量类型迭代变量的字典。

    A, B, iK - 输入的张量参数。

    E, X, S, R - 迭代的张量变量。

    例如:

    ivars["istep"] - 当前迭代步骤
    X - 当前特征向量的近似值
    E - 当前特征值的近似值
    R - 当前残差
    ivars["converged_count"] - 已收敛的特征对的数量
    tvars["rerr"] - 当前收敛准则的状态

    注意,当tracker从LOBPCG实例中存储Tensor对象时,它必须复制这些对象。

    如果 trackerbvars["force_stop"] 设置为 True,迭代过程将会被强制停止。

  • ortho_iparams (dict, 可选) – 在使用method="ortho"时,传递给LOBPCG算法的各类参数。

  • ortho_fparams (dict, optional) – 当使用 method=”ortho” 时,传递给 LOBPCG 算法的各种参数。

  • ortho_bparams (dict, optional) – 当使用 method=”ortho” 时,传递给 LOBPCG 算法的各种参数。

返回值

$(*, k)$尺寸的特征值张量

X (张量): 大小为$(*, m, k)$的张量,包含特征向量

返回类型

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 pages) 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

本页目录