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]。一種穩健的方法。
支援的輸入包括稠密、稀疏和批處理的稠密矩陣。
注意
一般來說,基本方法每次迭代花費的時間最少。然而,穩健方法的收斂速度快得多,並且更穩定。因此,通常不推薦使用基本方法,但在某些情況下可能更傾向於使用基本方法。
警告
反向方法不支援稀疏和複數輸入。它僅在未提供 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 演算法的各種布林引數字典。
- 返回值
E (Tensor): 特徵值張量,大小為
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 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://epubs.siam.org/doi/abs/10.1137/17M1129830