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