随机化块Kaczmarz算法在稀疏线性方程组中的概率分布与收敛加速策略
1. 问题描述
我们考虑求解大型稀疏线性方程组:
\[Ax = b \]
其中 \(A \in \mathbb{R}^{m \times n}\), \(b \in \mathbb{R}^{m}\), 且 \(m\) 通常远大于 \(n\)。假设方程组是相容的(即存在解), 我们的目标是高效地求解 \(x\)。经典Kaczmarz算法每次迭代随机选取一个方程(即矩阵 \(A\) 的一行)进行投影更新, 在超定系统(\(m > n\))中表现出色, 但对于大规模问题, 其收敛速度可能受矩阵行之间的相关性影响。随机化块Kaczmarz算法 通过将行分组为“块”, 并在每次迭代中处理一个数据块, 能够利用BLAS-3级别的矩阵运算和更稳定的投影步骤, 显著加速收敛。问题的核心在于:如何将矩阵的行划分为块(即设计概率分布), 以及如何选择更新策略, 以最大化收敛速度?
2. 从经典Kaczmarz到随机化块Kaczmarz
- 经典随机化Kaczmarz(RK): 设 \(a_i^T\) 是 \(A\) 的第 \(i\) 行, \(b_i\) 是 \(b\) 的第 \(i\) 个分量。 在第 \(k\) 次迭代, 以概率 \(p_i = \|a_i\|_2^2 / \|A\|_F^2\) 选取行索引 \(i_k\), 然后更新解:
\[ x_{k+1} = x_k + \frac{(b_{i_k} - a_{i_k}^T x_k)}{\|a_{i_k}\|_2^2} a_{i_k} \]
这是一个正交投影, 将当前迭代点 $ x_k $ 投影到超平面 $ a_i^T x = b_i $ 上。 收敛速度与矩阵的条件数有关。
- 动机: 当 \(A\) 的行可以自然地分组(例如, 来自不同传感器或数据子集)时, 单行处理效率低。 块方法一次处理一组方程, 可以:
- 减少迭代次数: 每次投影到多个超平面的交集(一个仿射子空间), 可能带来更大的进展。
- 提高计算强度: 使用矩阵-矩阵、矩阵-向量运算, 更好地利用现代处理器缓存和并行能力。
- 改善数值行为: 处理一个条件更好的子问题可能比处理单个(可能病态的)方程更稳定。
3. 算法核心:行分块与块选择策略
设我们将行索引集 \(\{1, 2, ..., m\}\) 划分为 \(t\) 个互不相交的块 \(\tau_1, \tau_2, ..., \tau_t\)。 令 \(A_{(\tau)}\) 和 \(b_{(\tau)}\) 分别表示由块 \(\tau\) 中索引对应的行组成的子矩阵和子向量。
-
块划分方法:
- 均匀随机划分: 最简单的方法, 将行随机、均匀地分配到 \(t\) 个块中。 适用于行之间没有明显结构的情况。
- 基于行范数的划分: 类似RK的行选择概率, 可以根据块的行范数之和来分配权重, 使得块被选择的概率与其行范数平方和成正比。
- 基于行相关性的聚类划分: 这是加速策略的关键。 目标是使同一块内的行尽可能正交, 而不同块之间的行尽可能相关。 为什么?
- 理想情况: 如果块 \(\tau\) 内的行相互正交, 那么投影到该块定义的子空间上等价于依次投影到每个行超平面上(但顺序无关)。 此时, 块更新可以解析计算且高效。
- 现实与加速: 通过聚类算法(如对行向量进行K-means聚类或贪心正交分组), 可以近似实现块内正交性。 这样, 每次迭代解决的子问题(投影到一组近乎正交的超平面的交集)条件数较好, 导致每次迭代的“进展”更大, 从而加速整体收敛。
-
块选择的概率分布:
一旦分块完成, 需要为每个块分配一个选择概率 \(P_{\tau}\)。- 常见策略是让概率与块的“能量”成正比:
\[ P_{\tau} = \frac{\|A_{(\tau)}\|_F^2}{\|A\|_F^2} \]
其中 $ \|A_{(\tau)}\|_F $ 是子矩阵的Frobenius范数。 这确保了“重要”(范数大)的块更频繁地被选中。
4. 迭代更新公式
在第 \(k\) 次迭代, 根据概率分布 \(P_{\tau}\) 随机选择一个块 \(\tau_k\)。
更新公式的核心是: 将当前迭代点 \(x_k\) 投影到由块 \(\tau_k\) 定义的线性方程组 \(A_{(\tau_k)} x = b_{(\tau_k)}\) 的解集上。 这个解集是一个仿射子空间。
更新步骤:
\[x_{k+1} = x_k + A_{(\tau_k)}^\dagger (b_{(\tau_k)} - A_{(\tau_k)} x_k) \]
其中 \(A_{(\tau_k)}^\dagger\) 是子矩阵 \(A_{(\tau_k)}\) 的 Moore-Penrose伪逆。
-
为什么是这个形式? 这正是在最小二乘意义下, 将 \(x_k\) 修正到满足块内所有方程的最优更新。 残差 \(r_{(\tau_k)} = b_{(\tau_k)} - A_{(\tau_k)} x_k\), 更新项 \(A_{(\tau_k)}^\dagger r_{(\tau_k)}\) 给出了在 \(A_{(\tau_k)}\) 列空间方向上, 使块内残差范数最小的修正。
-
伪逆的计算: 这是算法的核心计算开销。 有几种策略:
- 直接法(小规模块): 如果块大小很小, 可以预先计算每个块的伪逆 \(A_{(\tau)}^\dagger\) 并存储。 更新步骤就变成矩阵-向量乘法, 非常快。
- 使用QR分解: 对每个块, 计算其QR分解 \(A_{(\tau)} = Q_{(\tau)} R_{(\tau)}\)。 那么 \(A_{(\tau)}^\dagger = R_{(\tau)}^{-1} Q_{(\tau)}^T\)。 更新步骤变为:
\[ x_{k+1} = x_k + R_{(\tau_k)}^{-1} (Q_{(\tau_k)}^T (b_{(\tau_k)} - A_{(\tau_k)} x_k)) \]
这涉及前向/后向代入(利用 $ R_{(\tau)} $ 是上三角阵), 数值稳定。
3. **使用正规方程**: 如果块内行近似正交, 则 $ A_{(\tau)}^T A_{(\tau)} $ 近似为对角阵, 其逆容易计算。 此时,
\[ A_{(\tau)}^\dagger \approx (A_{(\tau)}^T A_{(\tau)})^{-1} A_{(\tau)}^T \]
计算更廉价。 这正好与我们“块内行尽可能正交”的**加速策略**相呼应。
5. 完整的随机化块Kaczmarz算法流程
- 输入: 矩阵 \(A\), 向量 \(b\), 初始猜测 \(x_0\), 最大迭代次数 \(K\), 容差 \(\epsilon\)。
- 预处理与分块:
- 可选: 对 \(A\) 的行进行归一化, 使每行具有单位范数。 这简化了概率分布(均匀分布)和某些计算。
- 将行索引集划分为 \(t\) 个块 \(\{\tau_1, ..., \tau_t\}\)。 (可采用均匀随机、范数加权或聚类方法)。
- 为每个块 \(\tau\) 计算并存储其伪逆的某种表示(如QR因子 \(Q_{(\tau)}, R_{(\tau)}\))。
- 计算每个块的选择概率 \(P_{\tau}\) (例如,基于块Frobenius范数)。
- 迭代: 对于 \(k = 0, 1, ..., K-1\):
a. 根据概率分布 \(\{P_{\tau}\}\) 随机选取一个块 \(\tau_k\)。
b. 计算块残差: \(r_{k} = b_{(\tau_k)} - A_{(\tau_k)} x_k\)。
c. 计算更新方向: 利用存储的伪逆表示计算 \(d_k = A_{(\tau_k)}^\dagger r_k\)。
* 若使用QR表示: \(d_k = R_{(\tau_k)}^{-1} (Q_{(\tau_k)}^T r_k)\)。
d. 更新解: \(x_{k+1} = x_k + d_k\)。
e. 检查收敛: 例如, 计算全残差 \(\|b - A x_{k+1}\|_2\)(可能定期计算), 若小于 \(\epsilon\) 则停止。 - 输出: 近似解 \(x_K\)。
6. 收敛性与加速策略总结
- 收敛性: 在相容系统下, 随机化块Kaczmarz算法期望意义下收敛到解。 其收敛速度与矩阵 \(A\) 的频谱性质以及分块方式有关。 理论上, 收敛速度与 \(\sigma_{min}^2(A) / \|A\|_F^2\) 的某种推广形式有关, 其中 \(\sigma_{min}(A)\) 是 \(A\) 的最小奇异值。
- 核心加速策略:
- 基于聚类的智能分块: 通过使块内行近似正交, 保证了每次迭代解决的子问题条件良好, 更新方向更有效, 从而减少所需迭代次数。 这是算法设计中最关键的一步。
- 概率分布优化: 让概率与块的能量(范数)成正比, 确保“更重要”的约束更频繁地被满足, 这可以看作是一种重要性采样, 能提升收敛速率。
- 高效线性代数内核: 通过预计算和存储每个块的伪逆(或QR因子), 将迭代中的主要计算转化为高效的矩阵-向量乘法和三角求解, 充分利用现代计算硬件。
总结: 随机化块Kaczmarz算法通过将行分组为块, 将原始的逐行投影推广为更高效的块投影。 其加速核心在于利用数据(矩阵行)的相关性结构进行智能分块(使块内行近似正交), 并配以合理的块选择概率。 这使得算法在求解大规模稀疏线性方程组时, 既能保持Kaczmarz方法的简单性和随机性优势, 又能通过提高每次迭代的“进展”和计算效率来实现更快的收敛。