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][source]¶
使用無矩陣 LOBPCG 方法尋找對稱正定廣義特徵值問題的 k 個最大(或最小)特徵值和對應的特徵向量。
此函數是以下 LOBPCG 演算法的前端,可透過 method 引數選擇
method=”basic” - Andrew Knyazev 引入的 LOBPCG 方法,請參閱 [Knyazev2001]。 此方法較不穩健,當 Cholesky 應用於奇異輸入時可能會失敗。
method=”ortho” - 具有正交基底選擇的 LOBPCG 方法 [StathopoulosEtal2002]。 此方法較穩健。
支援的輸入為密集、稀疏以及密集矩陣的批次。
注意
一般來說,basic 方法在每次迭代中花費的時間最少。 但是,穩健的方法收斂速度更快且更穩定。 因此,通常不建議使用 basic 方法,但在某些情況下,可能更喜歡使用 basic 方法。
警告
反向傳播方法不支援稀疏和複數輸入。 它僅在未提供 B 時有效(即 B == None)。 我們正在積極研究擴展,並且演算法的詳細資訊將及時發布。
警告
雖然假設 A 是對稱的,但 A.grad 並非如此。 為了確保 A.grad 是對稱的,以便 A - t * A.grad 在一階最佳化例程中是對稱的,在執行 lobpcg 之前,我們執行以下對稱化映射:A -> (A + A.t()) / 2。 僅當 A 需要梯度時才執行此映射。
- 參數
A (Tensor) – 大小為 的輸入張量
B (Tensor, optional) – 大小為 的輸入張量。 未指定時,B 解釋為單位矩陣。
X (tensor, optional) – 大小為 的輸入張量,其中 k <= n <= m。 指定時,它會用作特徵向量的初始近似值。 X 必須是密集張量。
iK (tensor, optional) – 大小為 的輸入張量。 指定時,它將用作預處理器。
k (integer, optional) – 請求的特徵對數量。 預設值是 的欄數(如果指定)或 1。
n (整數, 選填) – 若未指定 ,則 n 指定所產生 eigenvector 隨機近似值的大小。 n 的預設值為 k。 若有指定 ,則 n 的值 (若有指定) 必須是 的欄數。
tol (浮點數, 選填) – 停止條件的殘差容忍度。預設值為 feps ** 0.5,其中 feps 是給定輸入張量 A 資料類型中最小的非零浮點數。
largest (布林值, 選填) – 若為 True,則求解最大特徵值的特徵值問題。否則,求解最小特徵值的特徵值問題。預設值為 True。
method (字串, 選填) – 選擇 LOBPCG 方法。請參閱上述函數的說明。預設值為 "ortho"。
niter (整數, 選填) – 最大迭代次數。達到此值時,迭代過程會硬性停止,並傳回特徵對的目前近似值。若要無限迭代直到滿足收斂條件,請使用 -1。
tracker (可呼叫物件, 選填) –
用於追蹤迭代過程的函數。指定時,會在每個迭代步驟呼叫,並以 LOBPCG 實例作為參數。LOBPCG 實例在下列屬性中包含迭代過程的完整狀態
iparams、fparams、bparams - 分別為整數、浮點數和布林值輸入參數的字典
ivars、fvars、bvars、tvars - 分別為整數、浮點數、布林值和張量值迭代變數的字典。
A、B、iK - 輸入張量引數。
E、X、S、R - 迭代張量變數。
例如
ivars[“istep”] - 目前迭代步驟 X - eigenvector 的目前近似值 E - 特徵值的目前近似值 R - 目前殘差 ivars[“converged_count”] - 已收斂特徵對的目前數量 tvars[“rerr”] - 收斂條件的目前狀態
請注意,當 tracker 儲存 LOBPCG 實例中的張量物件時,它必須複製這些物件。
如果 tracker 設定 bvars[“force_stop”] = True,則迭代過程將會硬性停止。
ortho_iparams (字典, 選填) – 使用 method=”ortho” 時,LOBPCG 演算法的各種參數。
ortho_fparams (字典, 選填) – 使用 method=”ortho” 時,LOBPCG 演算法的各種參數。
ortho_bparams (字典, 選填) – 使用 method=”ortho” 時,LOBPCG 演算法的各種參數。
- 傳回
大小為 的特徵值張量
X (張量):大小為 的 eigenvector 張量
- 傳回類型
E (張量)
參考文獻
[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 頁) https://epubs.siam.org/doi/abs/10.1137/S1064827500366124
[StathopoulosEtal2002] Andreas Stathopoulos 和 Kesheng Wu。(2002) A Block Orthogonalization Procedure with Constant Synchronization Requirements。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) A Robust and Efficient Implementation of LOBPCG。SIAM J. Sci. Comput.,40(5),C655-C676。(22 頁) https://epubs.siam.org/doi/abs/10.1137/17M1129830