分块矩阵的随机化块Kaczmarz算法及其在超定稀疏线性方程组中的加速收敛策略
题目描述:
考虑求解超定稀疏线性方程组 \(A \mathbf{x} = \mathbf{b}\),其中 \(A \in \mathbb{R}^{m \times n} \ (m \gg n)\) 是一个大型稀疏分块矩阵,其行可分块为 \(A^T = [A_1^T, A_2^T, \dots, A_p^T]\),每个子块 \(A_i \in \mathbb{R}^{m_i \times n}\) 对应一组方程,且 \(\sum_{i=1}^p m_i = m\)。随机化块Kaczmarz算法是一种迭代方法,通过每次随机选取一个数据块(而非单行)进行投影更新,以加速收敛。本题目要求:详细阐述该算法的数学原理,逐步推导块更新公式,并设计一种基于行范数加权的概率抽样策略,以进一步提高收敛速度。
解题过程循序渐进讲解:
步骤1:回顾经典Kaczmarz算法
经典Kaczmarz算法用于求解线性方程组 \(A\mathbf{x} = \mathbf{b}\)。设 \(a_i^T\) 为 \(A\) 的第 \(i\) 行,\(b_i\) 为 \(\mathbf{b}\) 的第 \(i\) 个分量。每次迭代随机选取一行索引 \(i_k\),更新解估计:
\[\mathbf{x}_{k+1} = \mathbf{x}_k + \frac{b_{i_k} - a_{i_k}^T \mathbf{x}_k}{\|a_{i_k}\|_2^2} a_{i_k}. \]
该更新是将 \(\mathbf{x}_k\) 投影到超平面 \(a_i^T \mathbf{x} = b_i\) 上。对于超定稀疏系统,逐行更新收敛较慢。
步骤2:推广到分块情形
将矩阵 \(A\) 的行划分为 \(p\) 个块 \(\{A_1, A_2, \dots, A_p\}\),对应右端项分块 \(\mathbf{b}^T = [\mathbf{b}_1^T, \mathbf{b}_2^T, \dots, \mathbf{b}_p^T]\)。每个块 \(A_i \in \mathbb{R}^{m_i \times n}\) 定义了一个子方程组 \(A_i \mathbf{x} = \mathbf{b}_i\)。块Kaczmarz算法每次迭代随机选取一个块索引 \(i_k\),并将当前解估计投影到该块所定义的子空间解集上。若子方程组相容,其解集为一个仿射子空间:
\[\{\mathbf{x} \in \mathbb{R}^n : A_i \mathbf{x} = \mathbf{b}_i\}. \]
投影更新可通过求解最小二乘问题实现:
\[\mathbf{x}_{k+1} = \arg\min_{\mathbf{x}} \| \mathbf{x} - \mathbf{x}_k \|_2^2 \quad \text{s.t.} \quad A_i \mathbf{x} = \mathbf{b}_i. \]
步骤3:推导块更新公式
利用拉格朗日乘子法,定义拉格朗日函数:
\[\mathcal{L}(\mathbf{x}, \lambda) = \frac{1}{2} \|\mathbf{x} - \mathbf{x}_k\|_2^2 + \lambda^T (\mathbf{b}_i - A_i \mathbf{x}), \]
其中 \(\lambda \in \mathbb{R}^{m_i}\)。分别对 \(\mathbf{x}\) 和 \(\lambda\) 求导:
\[\frac{\partial \mathcal{L}}{\partial \mathbf{x}} = \mathbf{x} - \mathbf{x}_k - A_i^T \lambda = 0 \quad \Rightarrow \quad \mathbf{x} = \mathbf{x}_k + A_i^T \lambda, \]
\[ \frac{\partial \mathcal{L}}{\partial \lambda} = \mathbf{b}_i - A_i \mathbf{x} = 0. \]
将 \(\mathbf{x}\) 代入第二个方程:
\[\mathbf{b}_i - A_i (\mathbf{x}_k + A_i^T \lambda) = 0 \quad \Rightarrow \quad A_i A_i^T \lambda = \mathbf{b}_i - A_i \mathbf{x}_k. \]
假设 \(A_i\) 行满秩(通常成立,因 \(m_i \ll n\) 且稀疏),则 \(A_i A_i^T\) 可逆,解得:
\[\lambda = (A_i A_i^T)^{-1} (\mathbf{b}_i - A_i \mathbf{x}_k). \]
代入 \(\mathbf{x}\) 表达式得到块更新公式:
\[\mathbf{x}_{k+1} = \mathbf{x}_k + A_i^T (A_i A_i^T)^{-1} (\mathbf{b}_i - A_i \mathbf{x}_k). \]
此更新将 \(\mathbf{x}_k\) 投影到子空间 \(A_i \mathbf{x} = \mathbf{b}_i\) 上。
步骤4:随机化块选取与概率设计
为加速收敛,引入随机块选取策略。设选取块 \(i\) 的概率为 \(p_i > 0\),满足 \(\sum_{i=1}^p p_i = 1\)。一种有效策略是基于块的行范数加权:
\[p_i = \frac{\|A_i\|_F^2}{\sum_{j=1}^p \|A_j\|_F^2}, \]
其中 \(\|A_i\|_F\) 是块 \(A_i\) 的Frobenius范数。该策略优先选取“能量”较大的块,因这些块对应的约束对解的影响更大,可加快收敛。实践中,可预计算各块范数并构造累积概率分布,每次迭代生成随机数 \(r \sim U(0,1)\) 选取对应块。
步骤5:算法伪代码
- 输入:分块矩阵 \(\{A_i, \mathbf{b}_i\}_{i=1}^p\),初始猜测 \(\mathbf{x}_0\),最大迭代次数 \(K\)。
- 预计算:对每个块 \(i\),计算 \(\|A_i\|_F^2\) 和概率 \(p_i = \|A_i\|_F^2 / \sum_{j=1}^p \|A_j\|_F^2\)。
- 构造累积概率 \(q_i = \sum_{j=1}^i p_j\)。
- 对 \(k = 0, 1, \dots, K-1\):
- 生成随机数 \(r \in (0,1)\),选取块索引 \(i\) 满足 \(q_{i-1} < r \le q_i\)。
- 计算残差 \(\mathbf{r}_k = \mathbf{b}_i - A_i \mathbf{x}_k\)。
- 求解小规模线性系统 \((A_i A_i^T) \mathbf{y} = \mathbf{r}_k\)(可用Cholesky分解或共轭梯度法,因 \(A_i A_i^T\) 对称正定)。
- 更新解: \(\mathbf{x}_{k+1} = \mathbf{x}_k + A_i^T \mathbf{y}\)。
- 输出:近似解 \(\mathbf{x}_K\)。
步骤6:收敛性简要分析
在相容超定系统中,随机化块Kaczmarz算法的期望收敛率与块条件数相关。设 \(\sigma_{\min}(A)\) 和 \(\sigma_{\max}(A)\) 为 \(A\) 的极值奇异值,则期望误差衰减满足:
\[\mathbb{E} \|\mathbf{x}_k - \mathbf{x}^*\|_2^2 \le \left(1 - \frac{\sigma_{\min}^2(A)}{\sum_{i=1}^p \|A_i\|_F^2}\right)^k \|\mathbf{x}_0 - \mathbf{x}^*\|_2^2, \]
其中 \(\mathbf{x}^*\) 为真解。加权抽样可提高 \(\sigma_{\min}^2(A) / \sum \|A_i\|_F^2\) 的比值,从而加速收敛。
步骤7:实际应用优化
- 当块 \(A_i\) 的行数 \(m_i\) 很小时, \(A_i A_i^T\) 可直接分解(如Cholesky)。
- 对于高度稀疏块,可利用稀疏求解器加速 \((A_i A_i^T) \mathbf{y} = \mathbf{r}_k\)。
- 可结合松弛参数 \(\omega\) 控制步长: \(\mathbf{x}_{k+1} = \mathbf{x}_k + \omega A_i^T (A_i A_i^T)^{-1} \mathbf{r}_k\),通常 \(\omega \in (0,2)\) 以平衡收敛速度和稳定性。