分块矩阵的预处理LSQR算法在求解病态最小二乘问题中的应用
题目描述
考虑一个大型稀疏或病态的线性最小二乘问题:
\[\min_{\mathbf{x}} \|\mathbf{Ax} - \mathbf{b}\|_2 \]
其中,\(\mathbf{A} \in \mathbb{R}^{m \times n}\) 是一个大型矩阵(可能稀疏,可能秩亏或病态),\(\mathbf{b} \in \mathbb{R}^m\) 是观测向量。当 \(\mathbf{A}\) 是病态矩阵时,其条件数很大,导致标准的最小二乘解对数据扰动极其敏感,数值不稳定。LSQR 算法是一种基于 Lanczos 双对角化过程的迭代算法,专门用于求解此类最小二乘问题。本题目探讨在矩阵 \(\mathbf{A}\) 具有分块结构时,如何设计预处理技术与 LSQR 算法结合,以加速求解过程并提高数值稳定性。
解题过程
第一步:理解 LSQR 算法的核心思想
LSQR 本质上等价于对正规方程 \(\mathbf{A}^T \mathbf{A} \mathbf{x} = \mathbf{A}^T \mathbf{b}\) 应用共轭梯度法(CG),但通过 Lanczos 双对角化过程直接作用于 \(\mathbf{A}\),避免显式计算 \(\mathbf{A}^T\mathbf{A}\)(这会放大条件数,使病态更严重)。
Lanczos 双对角化过程生成两个正交矩阵 \(\mathbf{U}_k \in \mathbb{R}^{m \times (k+1)}\) 和 \(\mathbf{V}_k \in \mathbb{R}^{n \times k}\),以及一个双对角矩阵 \(\mathbf{B}_k \in \mathbb{R}^{(k+1) \times k}\),使得:
\[\mathbf{A} \mathbf{V}_k = \mathbf{U}_{k+1} \mathbf{B}_k \]
在第 k 步迭代中,LSQR 求解一个规模小得多的最小二乘子问题:
\[\min_{\mathbf{y}} \|\mathbf{B}_k \mathbf{y} - \beta_1 \mathbf{e}_1\|_2 \]
其中 \(\beta_1 = \|\mathbf{b}\|_2\),\(\mathbf{e}_1\) 是单位向量。最终近似解为 \(\mathbf{x}_k = \mathbf{V}_k \mathbf{y}_k\)。
第二步:引入预处理技术
对于病态问题,即使 LSQR 避免了显式计算正规方程,收敛仍可能很慢。预处理旨在将原问题转化为一个等价但条件更好的问题。常用右预处理形式:
\[\min_{\mathbf{z}} \|\mathbf{A} \mathbf{M}^{-1} \mathbf{z} - \mathbf{b}\|_2, \quad \mathbf{x} = \mathbf{M}^{-1} \mathbf{z} \]
其中 \(\mathbf{M} \in \mathbb{R}^{n \times n}\) 是预处理子,近似于 \(\mathbf{A}^T \mathbf{A}\) 的某种“近似逆”,使得 \(\mathbf{A} \mathbf{M}^{-1}\) 的条件数更小。
关键挑战:在分块矩阵 \(\mathbf{A}\) 的情形下,如何利用其块结构高效构造预处理子 \(\mathbf{M}\),并保证预处理后的问题仍可高效迭代求解。
第三步:分块矩阵预处理子的设计
假设 \(\mathbf{A}\) 具有块结构,例如:
- 块对角结构(常见于来自偏微分方程离散化或分离变量问题)
- 块稀疏结构(如块三对角)
- 由多个子矩阵拼接而成(多物理场耦合问题)
设计思路:
- 近似逆预处理:构造 \(\mathbf{M}\) 使得 \(\mathbf{M} \approx (\mathbf{A}^T \mathbf{A})^{-1}\),但计算和存储代价可控。
- 利用块结构:例如,若 \(\mathbf{A}\) 是块对角矩阵,可直接对每个块独立构造预处理子。
- Schur 补预处理:如果 \(\mathbf{A}\) 可写为 2×2 分块形式,可使用块三角预处理子,基于 Schur 补的近似。
举例:设 \(\mathbf{A} = \begin{bmatrix} \mathbf{A}_{11} & \mathbf{A}_{12} \\ \mathbf{A}_{21} & \mathbf{A}_{22} \end{bmatrix}\),可构造块三角预处理子:
\[\mathbf{M} = \begin{bmatrix} \mathbf{A}_{11} & \mathbf{A}_{12} \\ 0 & \tilde{\mathbf{S}} \end{bmatrix} \]
其中 \(\tilde{\mathbf{S}} \approx \mathbf{S} = \mathbf{A}_{22} - \mathbf{A}_{21} \mathbf{A}_{11}^{-1} \mathbf{A}_{12}\) 是 Schur 补的某种近似(例如,用不完全分解或低秩近似)。预处理后的矩阵 \(\mathbf{A} \mathbf{M}^{-1}\) 将更接近单位矩阵的块形式。
第四步:将预处理子嵌入 LSQR
预处理 LSQR 算法的主要修改在于,不再直接对 \(\mathbf{A}\) 进行 Lanczos 双对角化,而是对预处理后的矩阵 \(\mathbf{A} \mathbf{M}^{-1}\) 进行操作。在迭代过程中,我们需要计算矩阵-向量乘积 \(\mathbf{A} \mathbf{M}^{-1} \mathbf{v}\) 和 \(\mathbf{M}^{-T} \mathbf{A}^T \mathbf{u}\),这可以通过两步完成:
- 求解 \(\mathbf{M} \mathbf{w} = \mathbf{v}\) 得到 \(\mathbf{w} = \mathbf{M}^{-1} \mathbf{v}\)。
- 计算 \(\mathbf{A} \mathbf{w}\)。
由于 \(\mathbf{M}\) 具有分块结构,求解 \(\mathbf{M} \mathbf{w} = \mathbf{v}\) 通常可并行化或利用块稀疏性高效求解。
第五步:算法迭代步骤
预处理 LSQR 迭代步骤如下:
- 初始化:
\[ \beta_1 = \|\mathbf{b}\|_2, \quad \mathbf{u}_1 = \mathbf{b} / \beta_1 \]
\[ \alpha_1 = \|\mathbf{A}^T \mathbf{u}_1\|_{\mathbf{M}^{-1}}, \quad \mathbf{v}_1 = \mathbf{M}^{-1} (\mathbf{A}^T \mathbf{u}_1) / \alpha_1 \]
其中范数涉及预处理。
-
Lanczos 双对角化:
对于 \(k = 1, 2, \dots\):- 计算 \(\mathbf{u}_{k+1}\) 和 \(\beta_{k+1}\) 使得 \(\mathbf{A} \mathbf{M}^{-1} \mathbf{v}_k = \beta_{k+1} \mathbf{u}_{k+1} + \alpha_k \mathbf{u}_k\)。
- 计算 \(\mathbf{v}_{k+1}\) 和 \(\alpha_{k+1}\) 使得 \(\mathbf{M}^{-T} \mathbf{A}^T \mathbf{u}_{k+1} = \alpha_{k+1} \mathbf{v}_{k+1} + \beta_{k+1} \mathbf{v}_k\)。
这里的关键是,每次迭代中求解 \(\mathbf{M} \mathbf{w} = \mathbf{v}_k\) 和 \(\mathbf{M}^T \mathbf{z} = \mathbf{A}^T \mathbf{u}_{k+1}\),由于 \(\mathbf{M}\) 的分块结构,这些求解可高效完成。
-
子问题求解:
构建双对角矩阵 \(\mathbf{B}_k\) 并求解:
\[ \min_{\mathbf{y}} \|\mathbf{B}_k \mathbf{y} - \beta_1 \mathbf{e}_1\|_2 \]
通过递推更新 QR 分解高效求解,得到 \(\mathbf{y}_k\)。
- 更新近似解:
\[ \mathbf{z}_k = \mathbf{V}_k \mathbf{y}_k, \quad \mathbf{x}_k = \mathbf{M}^{-1} \mathbf{z}_k \]
其中 \(\mathbf{V}_k = [\mathbf{v}_1, \dots, \mathbf{v}_k]\)。
- 收敛判断:
检查残差范数 \(\|\mathbf{A} \mathbf{x}_k - \mathbf{b}\|_2\) 或正规方程残差 \(\|\mathbf{A}^T (\mathbf{A} \mathbf{x}_k - \mathbf{b})\|_2\) 是否小于预设容差。
第六步:算法优势与注意事项
- 优势:结合了 LSQR 的数值稳定性和预处理子的加速效果。对分块矩阵,预处理子的构造和求解可并行化,适合大规模问题。
- 注意事项:预处理子 \(\mathbf{M}\) 需是对称正定的,以保证算法等价于预处理后的正规方程。对于病态问题,预处理子应有效降低条件数,否则效果有限。
总结
本题目讲解了如何为具有分块结构的病态最小二乘问题设计预处理 LSQR 算法。核心在于利用矩阵的分块结构构造高效的预处理子,并将其嵌入 Lanczos 双对角化过程,从而加速迭代收敛并提高数值稳定性。该方法在反问题、图像重建、大规模数据拟合等领域有重要应用。