评价此页

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]#

使用无矩阵的 LOBPCG 方法找到对称正定广义特征值问题的前 k 个最大(或最小)特征值和相应的特征向量。

此函数是以下 LOBPCG 算法的前端,可通过 method 参数选择:

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 的行数小于请求的特征对数量 n 的 3 倍时,LOBPCG 算法不适用。

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

  • k (integer, optional) – 请求的特征对数量。默认为 XX 的列数(如果指定)或 1

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

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

  • n (integer, optional) – 如果未指定 XX,则 n 指定生成的特征向量随机近似的大小。 n 的默认值为 k。如果指定了 XX,则将忽略提供的任何 n 值,并将 n 自动设置为 XX 的列数。

  • iK (tensor, optional) – 输入张量,大小为 (,m,m)(*, m, m)。指定时,它将用作预条件子。

  • niter (int, optional) – 最大迭代次数。达到此次数时,迭代过程将被强制停止,并返回特征对的当前近似值。对于无限迭代直到满足收敛标准,请使用 -1

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

  • largest (bool, optional) – 如果为 True,则求解最大特征值相关的特征问题。否则,求解最小特征值相关的特征问题。默认为 True

  • method (str, optional) – 选择 LOBPCG 方法。请参阅上面函数的描述。默认为 “ortho”。

  • tracker (callable, optional) –

    一个用于跟踪迭代过程的函数。指定时,它将在每个迭代步骤中以 LOBPCG 实例作为参数进行调用。LOBPCG 实例在以下属性中保存迭代过程的完整状态:

    iparamsfparamsbparams - 分别是整数、浮点数和布尔值输入参数的字典。

    ivarsfvarsbvarstvars - 分别是整数、浮点数、布尔值和张量值迭代变量的字典。

    ABiK - 输入张量参数。

    EXSR - 迭代张量变量。

    例如:

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

    请注意,当 tracker 存储来自 LOBPCG 实例的张量对象时,它必须创建这些对象的副本。

    如果 tracker 设置 bvars[“force_stop”] = True,则迭代过程将被强制停止。

  • ortho_iparams (dict, optional) – 当使用 method="ortho" 时,LOBPCG 算法的各种参数。

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

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

返回

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

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

返回类型

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 pages) https://epubs.siam.org/doi/abs/10.1137/S1064827500366124

[StathopoulosEtal2002] Andreas Stathopoulos and Kesheng Wu. (2002) A Block Orthogonalization Procedure with Constant Synchronization Requirements. 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) A Robust and Efficient Implementation of LOBPCG. SIAM J. Sci. Comput., 40(5), C655-C676. (22 pages) https://arxiv.org/abs/1704.07458