Shortcuts

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 (张量) – 输入张量,大小为 (,m,m)(*, m, m)

  • B (Tensor, 可选) – 输入的张量,大小为 (,m,m)(*, m, m)。当未指定时,B 被解释为单位矩阵。

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

  • iK (张量, 可选) – 大小为 (,m,m)(*, m, m) 的输入张量。当指定时,它将被用作预处理器。

  • k (整数, 可选) – 请求的特征对的数量。默认是XX 列的数量(当指定时)或1

  • n (整数, 可选) – 如果 XX 未指定,则 n 指定生成的随机特征向量近似的大小。n 的默认值为 k。如果 XX 已指定,则 n 的值(当指定时)必须是 XX 的列数。

  • 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

特征值的张量,大小为 (,k)(*, k)

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

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

优云智算