jax.experimental.sparse.linalg.lobpcg_standard#
- jax.experimental.sparse.linalg.lobpcg_standard(A, X, m=100, tol=None)[原始碼]#
使用 LOBPCG 常式計算前 k 個標準特徵值。
LOBPCG [1] 代表「局部最佳區塊預處理共軛梯度法」。此方法能夠以加速器友善的方式找到前 k 個特徵向量。
此初始實驗版本有數個注意事項。
僅支援標準特徵值問題 A U = lambda U,不支援一般特徵值。
梯度程式碼不可用。
f64 僅適用於 jnp.linalg.eigh 支援該類型的情況。
尚不支援尋找最小特徵向量。因此,我們尚不支援預處理,這在大多數情況下是需要的。
此實作基於 [2] 和 [3];但是,我們在多個方面偏離這些來源,以提高穩健性或促進實作
儘管迭代成本增加,我們始終為區塊搜尋方向維護正交基底。
我們變更了收斂準則;請參閱 tol 引數。
有意不實作軟鎖定 [4];它依賴於選擇適當的特定問題容差,以防止接近收斂時,近乎 0 殘差的災難性消除導致的爆炸。相反,實作的方法傾向於截斷迭代基底。
[1]: http://ccm.ucdenver.edu/reports/rep149.pdf [2]: https://arxiv.org/abs/1704.07458 [3]: https://arxiv.org/abs/0705.2626 [4]: DOI 10.13140/RG.2.2.11794.48327
- 參數:
A (jax.Array | Callable[[jax.Array], jax.Array]) – 代表方陣 Hermitian 矩陣的 (n, n) 陣列或具有其動作的可呼叫物件。
X (jax.Array) – 代表 k 個所需頂部特徵向量的初始搜尋方向的 (n, k) 陣列。這不需要是正交的,但必須在數值上線性獨立 (X 將被正交化)。請注意,我們必須有 0 < k * 5 < n。
m (int) – 最大整數迭代計數;LOBPCG 將僅探索 (Krylov 基底的子空間) {X, A X, A^2 X, …, A^m X}。
tol (jax.Array | float | None | None) – 浮點收斂容差;當特徵對 (lambda, v) 的殘差 L2 範數 r = |A v - lambda v| 低於 tol * 10 * n * (lambda + |A v|) 時,特徵對 (lambda, v) 會收斂,這大約估計理想特徵向量的最壞情況浮點錯誤。如果所有 k 個特徵向量都滿足容差比較,則 LOBPCG 會提早結束。如果保留為 None,則會將其設定為 A.dtype 的浮點 epsilon。
- 傳回:
theta、U、i,其中 theta 是 (k,) 個特徵值的陣列,U 是 (n, k) 個特徵向量的陣列,i 是執行的迭代次數。
- 引發:
ValueError – 如果 A,X dtype 或 n 維度不符,或 k 太大 (僅支援 k * 5 < n),或 k == 0。