稀疏优化 / 压缩感知(MATLAB 版)

稀疏优化 / 压缩感知里一个非常经典的完整实验示例。按“代码在干什么 → 背后的数学模型 → 三种方法对比 → 图像如何解读 → 常见坑”的逻辑,系统拆解一遍(偏教学版,适合讲课或写讲义)。


一、整体问题在干什么?(一句话版)

在欠定线性方程 ( A u = b ) 中,利用“稀疏性”恢复真实信号 (u)
——比较 L1(稀疏)L2(最小二乘) 的本质差异。


二、数据构造部分(最关键)

m = 128; 
n = 256;
A = randn(m, n);
u = sprandn(n, 1, 0.1);
b = A * u;

1️⃣ 维度含义

变量 含义 维度
(A) 测量矩阵(感知矩阵) (128 \times 256)
(u) 真实稀疏信号 (256 \times 1)
(b) 观测值 (128 \times 1)

⚠️ 这是一个欠定系统
[
128 < 256 \quad \Rightarrow \quad A u = b \text{ 有无穷多解}
]


2️⃣ A = randn(m, n);

  • 每个元素服从 标准高斯分布
  • 高斯随机矩阵满足 RIP(受限等距性质) 的概率很高
    👉 压缩感知里的“理想字典”

3️⃣ u = sprandn(n,1,0.1);

这是重点 ⭐⭐⭐

  • sprandn(n,1,0.1) 表示:

    • 向量长度 256
    • 只有 10% 非零
    • 非零元素服从高斯分布

👉 真实稀疏度 ≈ 25 个非零

数学上:
[
|u|_0 \approx 0.1n
]


4️⃣ b = A * u;

  • 无噪声观测
  • 理论上:
    [
    b \in \mathbb{R}^{128}, \quad u \text{ 是稀疏的}
    ]

这是最标准的 Basis Pursuit / LASSO 测试场景


三、方法一:LASSO(L2 + L1)

lambda = 0.1;
u_recovered = lasso(A, b, 'Lambda', lambda);

数学模型

MATLAB 的 lasso 解的是:

[
\min_x \frac{1}{2}|Ax - b|_2^2 + \lambda |x|_1
]

含义

  • 第一项:拟合数据
  • 第二项:鼓励稀疏
  • λ 越大 → 越稀疏,但误差可能变大

📌 这是统计/机器学习中最常用的稀疏回归模型


优点 / 缺点

✅ 数值稳定
✅ 对噪声鲁棒
❌ λ 需要调参
❌ 理论恢复不如 BP 干净


四、方法二:OMP(贪心法,注释掉)

% u_recovered = omp(A'*b, A'*A, 25);

思想

  • 每一步选一个与残差最相关的原子
  • 假设稀疏度是 25

📌 典型信号处理算法,但:

  • 对噪声敏感
  • 稀疏度估计错 → 崩

五、方法三:CVX + Basis Pursuit(最核心)

cvx_begin
    variable x(n)
    minimize(norm(x, 1))
    subject to
        A*x == b
cvx_end
u_recovered = x;

数学模型(重点)

[
\boxed{
\min_x |x|_1 \quad
\text{s.t. } Ax = b
}
]

👉 这就是 Basis Pursuit(基追踪)


为什么用 L1?

  • L0:NP-hard
  • L2:不稀疏
  • L1 是 L0 的最优凸松弛

几何直觉(图):

  • L1 单位球是“尖的”
  • 更容易在坐标轴上取极值 → 大量 0

CVX 是什么?

CVX = MATLAB 的凸优化建模工具

  • 只写数学形式

  • CVX 自动:

    • 判断是否凸
    • 调用内点法 / 一阶法
  • 非常适合:

    • 教学
    • 理论验证
    • 论文复现实验

六、恢复效果评估

recovery_error = norm(u_recovered - u) / norm(u);

相对误差

[
\frac{|u_{\text{rec}} - u|_2}{|u|_2}
]

  • 接近 1e-6 ~ 1e-8完美恢复
  • 1e-2 → 失败


sparsity = nnz(abs(u_recovered) > 1e-3) / n;

稀疏度

  • 看恢复信号中“非零比例”
  • L1 → 稀疏
  • L2 → 几乎全非零

七、图像如何解读(图)

(a) 精确解 u

  • 90% 是 0
  • 少数尖峰

(b) L1 解

  • 位置对、数值准
  • 非零数量 ≈ 原始

👉 压缩感知成功


(c) L2 解(最小二乘)

  • 几乎每个位置都有小值
  • 完全不稀疏

👉 L2 完全忽略“稀疏先验”


posted @ 2026-02-03 00:07  kkman2000  阅读(2)  评论(0)    收藏  举报