稀疏信号重构(SSR)详解

稀疏信号重构(SSR)详解

目录

  1. 引言
  2. 稀疏信号及变换域表示
  3. 压缩感知与测量模型
  4. 稀疏信号重构的优化模型
    1. L 0 L_0 L0 范数最小化
    2. L 1 L_1 L1 范数最小化:Basis Pursuit (BP)
    3. 带噪声情形与BPDN
    4. Lasso (Least Absolute Shrinkage and Selection Operator)
  5. 典型求解算法
    1. 内点法、坐标下降法等凸优化方法
    2. 贪婪算法:OMP为例
    3. 迭代阈值算法 (ISTA/FISTA)
  6. 稀疏重构的可行性:RIP与相干性
  7. 总结
  8. 示例代码

1. 引言

在很多应用中(图像处理、医学成像、雷达信号处理、机器学习等),我们经常会遇到以下需求:利用有限观测数据来重构或恢复原始高维信号
传统采样理论(例如香农采样定理)会要求较高采样率,然而有些情况下,采样成本很高或测量不完整,这就需要一种新的理论与方法——利用信号的稀疏性来进行信号重构,也就是我们所说的稀疏信号重构 (Sparse Signal Recovery, SSR)


2. 稀疏信号及变换域表示

2.1 稀疏性定义

假设有一个 N N N维向量
x = [ x 1 x 2 ⋮ x N ] ∈ R N . \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_N \end{bmatrix} \in \mathbb{R}^N. x= x1x2xN RN.

  • 如果仅有 K ≪ N K \ll N KN 个分量为非零,则称 x \mathbf{x} x K K K-稀疏 (K-sparse)。

在实际应用中,很多信号本身并不一定在时域/空域就稀疏,但往往在某个变换域(如傅里叶变换、小波变换、离散余弦变换等)下可以逼近稀疏。

  • 例如,令 Ψ \boldsymbol{\Psi} Ψ为某个 N × N N\times N N×N的可逆(或正交)变换矩阵,令 α \boldsymbol{\alpha} α x \mathbf{x} x在该变换域下的系数向量,则
    x = Ψ   α . \mathbf{x} = \boldsymbol{\Psi}\,\boldsymbol{\alpha}. x=Ψα.
  • 如果 α \boldsymbol{\alpha} α K K K-稀疏的,即 ∥ α ∥ 0 = K \|\boldsymbol{\alpha}\|_0 = K α0=K,就意味着 x \mathbf{x} x Ψ \boldsymbol{\Psi} Ψ域上是稀疏可表示的。

3. 压缩感知与测量模型

3.1 测量模型

一般地,我们进行线性测量,得到一个观测向量 y \mathbf{y} y:
y = A   x + e , \mathbf{y} = A\,\mathbf{x} + \mathbf{e}, y=Ax+e,
其中:

  • A ∈ R M × N A \in \mathbb{R}^{M \times N} ARM×N 为观测矩阵,行数 M M M 通常远小于列数 N N N,即“欠定系统”;
  • y ∈ R M \mathbf{y} \in \mathbb{R}^M yRM 为测量值;
  • e \mathbf{e} e 为噪声或测量误差(在无噪声时可视为 e = 0 \mathbf{e} = \mathbf{0} e=0)。

3.2 欠定系统的困难

M < N M < N M<N 时,单从 y = A x \mathbf{y} = A\mathbf{x} y=Ax来解 x \mathbf{x} x不可能唯一的;理论上有无穷多解。但如果事先知道 x \mathbf{x} x是稀疏的,我们就可利用这一先验信息构造出一个“稀疏性约束”的优化问题,来找出唯一解或近似唯一解。

3.3 压缩感知的核心

  • 信号具有稀疏表示:即 x \mathbf{x} x在某个域(或字典)中可以用少量非零系数来表示;
  • 随机或良性构造的测量矩阵 A A A:“捕捉”信号主体信息,同时保证可以从有限测量中稳定重构。

4. 稀疏信号重构的优化模型

4.1 L 0 L_0 L0 范数最小化

为了获得最稀疏解,最直接的想法是最小化 L 0 L_0 L0 范数(非零元素个数):
∥ x ∥ 0 = ∑ i = 1 N 1 { x i ≠ 0 } , \|\mathbf{x}\|_0 = \sum_{i=1}^{N} \mathbf{1}_{\{x_i \neq 0\}}, x0=i=1N1{xi=0},
其中 1 { ⋅ } \mathbf{1}_{\{ \cdot \}} 1{} 是指示函数。
于是我们想解以下问题:
min ⁡ x ∥ x ∥ 0 subject to y = A   x . \min_{\mathbf{x}} \|\mathbf{x}\|_0 \quad \text{subject~to} \quad \mathbf{y} = A\,\mathbf{x}. xminx0subject toy=Ax.
但是, ∥ x ∥ 0 \|\mathbf{x}\|_0 x0 不仅是非凸函数,而且是NP-困难问题——在大规模应用中几乎不可能直接求解。


4.2 L 1 L_1 L1 范数最小化:Basis Pursuit (BP)

一个著名的替代策略是:用 L 1 L_1 L1范数来近似 L 0 L_0 L0范数。

  • L 1 L_1 L1 范数定义:
    ∥ x ∥ 1 = ∑ i = 1 N ∣ x i ∣ . \|\mathbf{x}\|_1 = \sum_{i=1}^{N} |x_i|. x1=i=1Nxi∣.
  • 由几何直观可知,最小化 ∥ x ∥ 1 \|\mathbf{x}\|_1 x1 也会倾向产生稀疏解,同时它是的。

这样,便得到Basis Pursuit (BP)
min ⁡ x ∥ x ∥ 1 subject to y = A   x . \min_{\mathbf{x}} \|\mathbf{x}\|_1 \quad \text{subject~to} \quad \mathbf{y} = A\,\mathbf{x}. xminx1subject toy=Ax.
由于这成为凸优化问题,可以运用很多成熟的凸优化算法(如内点法、线性规划等)来求解。


4.3 带噪声情形与BPDN

如果测量包含噪声项 e \mathbf{e} e,或者我们仅仅希望“近似”地满足 y = A   x \mathbf{y} = A\,\mathbf{x} y=Ax,常见做法是将约束放宽为:
∥ y − A   x ∥ 2 ≤ ϵ , \|\mathbf{y} - A\,\mathbf{x}\|_2 \leq \epsilon, yAx2ϵ,
这里 ∥ ⋅ ∥ 2 \|\cdot\|_2 2 是欧几里得 (L2) 范数。这个问题的形式常被称为Basis Pursuit De-Noising (BPDN) 或者噪声下的稀疏重构
min ⁡ x ∥ x ∥ 1 subject to ∥ y − A   x ∥ 2 ≤ ϵ . \min_{\mathbf{x}} \|\mathbf{x}\|_1 \quad \text{subject~to} \quad \|\mathbf{y} - A\,\mathbf{x}\|_2 \leq \epsilon. xminx1subject toyAx2ϵ.


4.4 Lasso (Least Absolute Shrinkage and Selection Operator)

在统计或机器学习中,经常使用另一种形式:
min ⁡ x 1 2 ∥ y − A   x ∥ 2 2 + λ ∥ x ∥ 1 , \min_{\mathbf{x}} \frac{1}{2}\|\mathbf{y} - A\,\mathbf{x}\|_2^2 + \lambda \|\mathbf{x}\|_1, xmin21yAx22+λx1,

  • 其中第一项 1 2 ∥ y − A   x ∥ 2 2 \tfrac{1}{2}\|\mathbf{y} - A\,\mathbf{x}\|_2^2 21yAx22 用来衡量拟合误差,
  • 第二项 λ ∥ x ∥ 1 \lambda \|\mathbf{x}\|_1 λx1 相当于** L 1 L_1 L1 正则化项**,鼓励解的稀疏性,
  • λ \lambda λ 是一个正则化系数,在拟合度与稀疏度之间作平衡。

λ \lambda λ 越大时,算法更侧重“稀疏”,会更多地将 x i x_i xi压缩为零;当 λ \lambda λ 越小,则更注重让 ∥ y − A   x ∥ 2 2 \|\mathbf{y} - A\,\mathbf{x}\|_2^2 yAx22 变小。


5. 典型求解算法

5.1 内点法、坐标下降法等凸优化方法

L 1 L_1 L1 范数最小化Lasso 等凸问题,常见的通用算法包括:

  • 内点法 (Interior-point method):可以看作在约束与目标函数的可行域里“内部”迭代寻优;
  • 坐标下降法 (Coordinate Descent):每次在一个坐标方向上寻找最优解,再轮流迭代更新;
  • 近端梯度法 (Proximal Gradient Method):针对带 ∥ x ∥ 1 \|\mathbf{x}\|_1 x1正则项的优化,有专门的“软阈值”操作来实现稀疏解更新。

这些方法在中等规模上有很好的性能,但对于极大规模问题,仍可能面临较高的计算成本。


5.2 贪婪算法:OMP为例

为在实际问题中快速求解,很多贪婪(Greedy)算法被提出。其中最经典的一个是正交匹配追踪(OMP, Orthogonal Matching Pursuit)

以无噪声简单场景为例,给出OMP算法核心流程:

  1. 初始化
    • 残差向量 r ( 0 ) = y \mathbf{r}^{(0)} = \mathbf{y} r(0)=y
    • 支持集(已选列集合) S ( 0 ) = ∅ S^{(0)} = \emptyset S(0)=
    • 迭代计数 t = 0 t=0 t=0
  2. 迭代:在第 t t t次迭代中:
    1. 找到与当前残差相关性最大的列索引:
      j ⋆ = arg ⁡ max ⁡ j ∣ ⟨ a j , r ( t ) ⟩ ∣ , j^\star = \arg \max_{j} \big| \langle \mathbf{a}_j, \mathbf{r}^{(t)} \rangle \big|, j=argjmax aj,r(t) ,
      其中 a j \mathbf{a}_j aj为观测矩阵 A A A 的第 j j j列。
    2. 更新支持集:
      S ( t + 1 ) = S ( t ) ∪ { j ⋆ } . S^{(t+1)} = S^{(t)} \cup \{j^\star\}. S(t+1)=S(t){j}.
    3. 在当前支持集上做最小二乘估计:
      x ( t + 1 ) = arg ⁡ min ⁡ z ∥ y − A S ( t + 1 )   z ∥ 2 2 , \mathbf{x}^{(t+1)} = \arg \min_{\mathbf{z}} \|\mathbf{y} - A_{S^{(t+1)}}\,\mathbf{z}\|_2^2, x(t+1)=argzminyAS(t+1)z22,
      其中 A S ( t + 1 ) A_{S^{(t+1)}} AS(t+1) 表示从 A A A 中选出列索引属于 S ( t + 1 ) S^{(t+1)} S(t+1) 的子矩阵。
      该解可显式写为:
      z ∗ = ( A S ( t + 1 ) T A S ( t + 1 ) ) − 1 A S ( t + 1 ) T   y . \mathbf{z}^* = \bigl( A_{S^{(t+1)}}^\mathsf{T} A_{S^{(t+1)}} \bigr)^{-1} A_{S^{(t+1)}}^\mathsf{T} \,\mathbf{y}. z=(AS(t+1)TAS(t+1))1AS(t+1)Ty.
      然后把 x ( t + 1 ) \mathbf{x}^{(t+1)} x(t+1) 的对应分量置为 z ∗ \mathbf{z}^* z,其他位置为0。
    4. 更新残差:
      r ( t + 1 ) = y − A   x ( t + 1 ) . \mathbf{r}^{(t+1)} = \mathbf{y} - A\,\mathbf{x}^{(t+1)}. r(t+1)=yAx(t+1).
    5. 迭代次数 t ← t + 1 t \leftarrow t+1 tt+1,直到达到设定终止条件(如迭代次数 = K =K =K ∥ r ( t ) ∥ 2 \|\mathbf{r}^{(t)}\|_2 r(t)2 小于一定阈值)为止。

OMP实现速度快、实现简单的优点。但它是贪婪策略,**有时在测量矩阵较“差”**时恢复性能不如 L 1 L_1 L1凸优化方法。


5.3 迭代阈值算法 (ISTA/FISTA)

对于Lasso或带 ∥ x ∥ 1 \|\mathbf{x}\|_1 x1正则项的最小化问题,还可以使用迭代软阈值算法 (ISTA)
例如,考虑
min ⁡ x 1 2 ∥ y − A   x ∥ 2 2 + λ ∥ x ∥ 1 . \min_{\mathbf{x}} \frac{1}{2}\|\mathbf{y} - A\,\mathbf{x}\|_2^2 + \lambda \|\mathbf{x}\|_1. xmin21yAx22+λx1.
每次迭代大致做以下更新:
x ( k + 1 ) = s o f t λ ⋅ η ( x ( k ) + η   A T ( y − A   x ( k ) ) ) , \mathbf{x}^{(k+1)} = \mathrm{soft}_{\lambda \cdot \eta} \Bigl( \mathbf{x}^{(k)} + \eta\,A^\mathsf{T}(\mathbf{y} - A\,\mathbf{x}^{(k)}) \Bigr), x(k+1)=softλη(x(k)+ηAT(yAx(k))),

  • η \eta η 是一个步长(需要合适选取,一般与 ∥ A ∥ 2 2 \|A\|_2^2 A22有关),
  • s o f t θ ( ⋅ ) \mathrm{soft}_{\theta}(\cdot) softθ()软阈值操作:
    s o f t θ ( z ) = s i g n ( z )   max ⁡ { ∣ z ∣ − θ ,   0 } . \mathrm{soft}_{\theta}(z) = \mathrm{sign}(z)\,\max\{|z| - \theta,\,0\}. softθ(z)=sign(z)max{zθ,0}.

若使用Nesterov加速技术,则是FISTA (Fast ISTA),在很多问题中收敛更快。


6. 稀疏重构的可行性:RIP与相干性

6.1 RIP (Restricted Isometry Property)

为什么用 L 1 L_1 L1范数就能重构出原信号?这离不开对观测矩阵 A A A 的一定要求。

  • 限制等距性质 (RIP):若对所有 K K K-稀疏向量 x \mathbf{x} x,有
    ( 1 − δ K ) ∥ x ∥ 2 2      ≤      ∥ A   x ∥ 2 2      ≤      ( 1 + δ K ) ∥ x ∥ 2 2 , (1 - \delta_{K}) \|\mathbf{x}\|_2^2 \;\;\le\;\; \|A\,\mathbf{x}\|_2^2 \;\;\le\;\; (1 + \delta_{K}) \|\mathbf{x}\|_2^2, (1δK)x22Ax22(1+δK)x22,
    则称 A A A 满足RIP常数 δ K \delta_{K} δK。当 δ K \delta_{K} δK足够小(小于某个特定阈值),可保证** L 1 L_1 L1最小化**精确重构 K K K-稀疏向量。

6.2 相干性 (Coherence)

另一种衡量矩阵“好坏”的简单指标是相干性(coherence):
μ ( A ) = max ⁡ i ≠ j ∣ ⟨ a i , a j ⟩ ∣ ∥ a i ∥ 2   ∥ a j ∥ 2 , \mu(A) = \max_{i \neq j} \frac{\big|\langle \mathbf{a}_i, \mathbf{a}_j \rangle\big|}{\|\mathbf{a}_i\|_2\,\|\mathbf{a}_j\|_2}, μ(A)=i=jmaxai2aj2 ai,aj ,

  • a i \mathbf{a}_i ai 表示矩阵 A A A 的第 i i i列。
  • 如果相干性 μ ( A ) \mu(A) μ(A) 很小,则列之间不太“相似”,有助于稀疏重构的成功。

理论上,随机高斯矩阵或随机部分傅里叶矩阵往往满足良好的RIP或相干性小,从而保证重构效果。


7. 总结

  • 稀疏信号重构 (SSR) 依赖于信号稀疏性这一重要先验;
  • 通过 L 0 L_0 L0 范数最小化 可以直接获得最稀疏解,但因其NP-困难不可直接求解;
  • L 1 L_1 L1 范数最小化(Basis Pursuit / Lasso)是业界最常用的替代方案,具有良好的理论保证(RIP、相干性等);
  • 实际应用中,既有凸优化求解 (内点法、坐标下降、ISTA/FISTA) 也有贪婪算法 (OMP、CoSaMP等);
  • SSR极大拓展了传统采样理论的边界,已经成为压缩感知高维数据分析机器学习稀疏建模等领域的核心技术。

8. 示例代码

下面给出一个简化的OMP示例伪代码(仅作演示):

def OMP(y, A, K):
    """
    y: 测量向量, shape = (M,)
    A: 观测矩阵, shape = (M, N)
    K: 稀疏度(最多选K个原子/列)
    """
    import numpy as np
    
    M, N = A.shape
    
    # 初始化
    r = y.copy()              # 残差
    S = []                    # 当前支持集,初始为空
    x_hat = np.zeros(N)       # 最终重构向量
    
    for k in range(K):
        # 1. 找到与当前残差最相关的列
        corr = np.abs(A.T @ r)   # 相关性
        j_star = np.argmax(corr)
        
        # 2. 将该列放入支持集
        if j_star not in S:
            S.append(j_star)
        
        # 3. 在当前S上做最小二乘求解
        A_S = A[:, S]  # 仅取支持集对应列
        x_S = np.linalg.lstsq(A_S, y, rcond=None)[0]  # 求解最小二乘
        
        # 4. 更新残差
        r = y - A_S @ x_S
        
        # 可加终止条件:若残差足够小则提前停止
        
    # 将计算得到的x_S写回x_hat
    x_hat[S] = x_S
    return x_hat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DuHz

喜欢就支持一下 ~ 谢谢啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值