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) – 輸入張量,大小為
k (integer, optional) – 請求的特徵對數量。預設為 的列數(如果指定)或 1。
B (Tensor, optional) – 輸入張量,大小為 。未指定時,B 被解釋為單位矩陣。
X (tensor, optional) – 輸入張量,大小為 ,其中 k <= n <= m。指定時,它將用作特徵向量的初始近似。X 必須是密集張量。
n (integer, optional) – 如果未指定 ,則 n 指定生成的特徵向量隨機近似的大小。 n 的預設值為 k。如果指定了 ,則將忽略提供的任何 n 值,並將 n 自動設定為 的列數。
iK (tensor, optional) – 輸入張量,大小為 。指定時,它將用作預條件子。
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 例項在以下屬性中儲存迭代過程的完整狀態:
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 例項的張量物件時,它必須建立這些物件的副本。
如果 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 演算法的各種引數。
- 返回
大小為 的特徵值張量。
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://arxiv.org/abs/1704.07458