随机化正交匹配追踪算法(Randomized Orthogonal Matching Pursition, RandOMP)在稀疏信号恢复中的应用
题目描述
在许多科学和工程领域(如压缩感知、信号处理、图像恢复),我们经常遇到从远少于未知数个数的观测中恢复一个高维稀疏信号的问题。数学模型是:给定一个观测矩阵 \(A \in \mathbb{R}^{m \times n}\)(通常 \(m \ll n\))和一个观测向量 \(b \in \mathbb{R}^m\),寻找一个稀疏解 \(x \in \mathbb{R}^n\) 使得 \(Ax \approx b\)。这是一个典型的欠定线性方程组,其解不唯一。正交匹配追踪(OMP)是一种经典的贪婪迭代算法,用于寻找稀疏解,但它每一步都需要扫描所有列以选择最相关的一列,计算代价为 \(O(mn)\),在大规模问题中可能成为瓶颈。随机化正交匹配追踪(RandOMP)通过引入随机抽样技术来加速列选择过程,同时保持高概率的恢复精度。本题将详细讲解 RandOMP 算法的原理、步骤、数学推导及实现细节。
解题过程
1. 问题形式化与稀疏恢复基础
给定 \(A \in \mathbb{R}^{m \times n}\), \(b \in \mathbb{R}^m\),且 \(m < n\),我们希望求解:
\[\min_{x} \|x\|_0 \quad \text{subject to} \quad Ax = b \]
其中 \(\|x\|_0\) 表示向量 \(x\) 中非零元素的个数(即 ℓ₀ 范数)。这个问题是 NP 难的,因此通常使用贪婪算法(如 OMP)或凸松弛(如 LASSO)来近似求解。
OMP 的基本思想:在每一步迭代中,选择与当前残差最相关的列(即内积绝对值最大的一列),将其加入支撑集,然后在已选列的支撑集上用最小二乘求解以获得新的近似解,并更新残差。重复直到达到预设的稀疏度或残差足够小。
2. OMP 的标准步骤回顾
让我们先回忆标准 OMP 的伪代码,以便后续对比:
- 输入:矩阵 \(A\),观测 \(b\),稀疏度 \(k\)(或容差 \(\epsilon\))。
- 初始化:残差 \(r_0 = b\),支撑集 \(\Lambda_0 = \emptyset\),迭代计数器 \(t = 1\)。
- 迭代(直到 \(t > k\) 或 \(\|r_{t-1}\|_2 < \epsilon\)):
a. 匹配步:计算相关性 \(u = A^T r_{t-1}\)。
b. 选择步:找出最大相关性对应的索引 \(j_t = \arg\max_{i \notin \Lambda_{t-1}} |u_i|\)。
c. 更新支撑集:\(\Lambda_t = \Lambda_{t-1} \cup \{j_t\}\)。
d. 求解最小二乘:\(x_t = \arg\min_{y} \|A_{\Lambda_t} y - b\|_2\),其中 \(A_{\Lambda_t}\) 是由 \(\Lambda_t\) 索引的列组成的子矩阵。
e. 更新残差:\(r_t = b - A_{\Lambda_t} x_t\)。
f. \(t = t+1\)。 - 输出:在最终支撑集上的解 \(x\)(其余位置为零)。
主要计算瓶颈在第 3a 步的匹配步(计算 \(A^T r\) 需要 \(O(mn)\))和第 3b 步的选择步(寻找最大值需要 \(O(n)\))。
3. RandOMP 的随机化策略
RandOMP 的核心改进是:在匹配步中,不计算所有列的相关性,而是从一个随机子集中选择候选列。这借鉴了随机算法中的“杠杆得分采样”或“近似内积”思想。
基本思路:
- 在第 \(t\) 次迭代,维护一个大小为 \(s\)(\(s \ll n\))的随机索引集 \(S_t \subset \{1, \dots, n\}\)(可以包含或不包含当前支撑集中的列,实践中通常从非支撑集中采样)。
- 仅计算这些索引对应的相关性:\(u_{S_t} = (A_{S_t})^T r_{t-1}\),其中 \(A_{S_t}\) 是相应列组成的子矩阵。
- 从 \(S_t\) 中选择最大相关性对应的列加入支撑集。
然而,纯粹的随机均匀采样可能忽略真正重要的列,因此需要一种重要性采样策略,使得相关性较大的列以更高的概率被选中。这引出了“随机化近似内积”技术。
4. 随机化近似内积(Randomized Approximate Inner Product)
为了加速 \(A^T r\) 的计算,我们可以使用 Johnson-Lindenstrauss (JL) 投影或随机高斯投影来近似内积。
具体方法:
- 生成一个随机矩阵 \(\Phi \in \mathbb{R}^{d \times m}\),其中 \(d \ll m\),且 \(\Phi\) 的每一行独立同分布于 \(\mathcal{N}(0, 1/d)\)(或使用稀疏 JL 变换以节省计算)。
- 预处理:计算 \(\tilde{A} = \Phi A\) 和 \(\tilde{r} = \Phi r\)(这只需在开始时计算一次 \(\tilde{A}\),而 \(\tilde{r}\) 每次迭代更新)。
- 近似内积:\(u_{\text{approx}} = \tilde{A}^T \tilde{r}\) 是 \(A^T r\) 的近似,因为 \(\tilde{A}^T \tilde{r} = A^T \Phi^T \Phi r \approx A^T r\)(JL 引理保证高概率下内积的保距性)。
- 计算复杂度从 \(O(mn)\) 降为 \(O(dn)\),且 \(d\) 可设为 \(O(\log n)\) 量级。
在 RandOMP 中,我们可以用 \(u_{\text{approx}}\) 来筛选候选集:首先找出 \(u_{\text{approx}}\) 中绝对值最大的若干个(比如 \(s\) 个)索引,构成候选集 \(S_t\),然后在这个小集合中精确计算真实内积 \(A_{S_t}^T r_{t-1}\),并选择最大值对应的列。这既加速了扫描过程,又通过精确计算避免了近似误差导致的错误选择。
5. RandOMP 算法详细步骤
结合上述思想,RandOMP 的伪代码如下:
- 输入:矩阵 \(A\),观测 \(b\),稀疏度 \(k\),随机投影维度 \(d\),候选集大小 \(s\)(通常 \(s \geq k \log n\) 以保证高概率成功)。
- 初始化:
- 生成随机高斯矩阵 \(\Phi \in \mathbb{R}^{d \times m}\)(或使用快速 JL 变换)。
- 计算投影矩阵 \(\tilde{A} = \Phi A\)(仅一次,\(O(dmn)\) 但可通过结构化随机矩阵加速)。
- 残差 \(r_0 = b\),支撑集 \(\Lambda_0 = \emptyset\),迭代 \(t=1\)。
- 迭代(直到 \(t > k\) 或残差足够小):
a. 近似匹配步:计算 \(\tilde{r}_{t-1} = \Phi r_{t-1}\)(\(O(dm)\)),然后 \(u_{\text{approx}} = \tilde{A}^T \tilde{r}_{t-1}\)(\(O(dn)\))。
b. 候选集选择:找出 \(u_{\text{approx}}\) 中绝对值最大的 \(s\) 个索引(排除已选索引),组成候选集 \(S_t\)。
c. 精确匹配:计算真实相关性 \(v = A_{S_t}^T r_{t-1}\)(\(O(ms)\),因 \(s \ll n\))。
d. 选择步:从 \(S_t\) 中选最大 \(|v_j|\) 对应的索引 \(j_t\)。
e. 更新支撑集:\(\Lambda_t = \Lambda_{t-1} \cup \{j_t\}\)。
f. 最小二乘求解:\(x_t = \arg\min_{y} \|A_{\Lambda_t} y - b\|_2\)(可用递推最小二乘更新,\(O(mt + t^2)\))。
g. 更新残差:\(r_t = b - A_{\Lambda_t} x_t\)。
h. \(t = t+1\)。 - 输出:稀疏解 \(x\)(在 \(\Lambda_t\) 上有值,其余为零)。
6. 算法复杂度与优势
- 标准 OMP:每迭代一次需要 \(O(mn + m t + t^2)\),其中 \(O(mn)\) 主导。
- RandOMP:每迭代一次需要 \(O(dn + ms + m t + t^2)\)。由于 \(d = O(\log n)\) 且 \(s = O(k \log n)\),当 \(n\) 很大时,\(O(dn)\) 远小于 \(O(mn)\)。如果使用快速 JL 变换(如 Hadamard 变换),可进一步降至 \(O(n \log m)\)。
- 关键优势:在保持与 OMP 相近恢复精度的前提下(理论上,若矩阵 \(A\) 满足 RIP 条件,RandOMP 能以高概率正确恢复 \(k\)-稀疏信号),大幅降低了每轮迭代的计算成本,尤其适用于 \(n\) 极大的场景。
7. 收敛性与理论保证
RandOMP 的理论分析基于以下假设:
- 矩阵性质:\(A\) 满足限制等距性(RIP)或相干性条件,以保证稀疏恢复的可行性。
- 参数设置:候选集大小 \(s\) 需足够大,使得在每次迭代中,真实的最大相关列以高概率被包含在候选集内。典型理论要求 \(s = \Omega(k \log n)\)。
- 随机投影:JL 投影的维度 \(d = \Omega(\epsilon^{-2} \log n)\) 可保证内积近似误差在 \(\epsilon\) 以内。
在这些条件下,可以证明 RandOMP 以高概率在 \(k\) 步内正确识别信号的支撑集,且最终解的误差与 OMP 相当。
8. 数值实现注意事项
- 随机投影矩阵选择:除了高斯随机矩阵,也可使用部分傅里叶矩阵、稀疏符号矩阵等快速变换,以加速 \(\Phi A\) 的计算。
- 候选集大小权衡:较大的 \(s\) 提高正确选择的概率但增加计算量;较小的 \(s\) 可能导致算法失败。实践中可通过交叉验证调整。
- 最小二乘更新:使用递归最小二乘(如 QR 更新)或 Cholesky 更新来高效求解 \(x_t\),避免每次重新分解。
- 停止准则:除了固定稀疏度 \(k\),也可基于残差范数 \(\|r_t\|_2\) 或近似解的变化量。
总结
随机化正交匹配追踪(RandOMP)通过结合随机投影与贪婪选择,显著加速了标准 OMP 的列筛选过程,使其适用于大规模稀疏恢复问题。其核心思想是利用随机化技术近似内积计算,从而在少量候选列中执行精确选择,在保证恢复精度的同时降低计算复杂度。该算法体现了随机化方法在传统数值线性代数中的有效应用,是压缩感知、稀疏近似等领域的重要工具。