評價此頁

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