稀疏优化L1范数最小化问题求解之基追踪准则(Basis Pursuit)——原理及其Python实现

文章目录

  • 一、前言
  • 二、问题重述
  • 三、构造 ℓ 1 \ell_1 1 范数
  • 四、 ℓ 1 \ell_1 1 范数最小化问题转换为线性规划问题
  • 五、基于linprog的基追踪Python代码
  • 六、运行测试
  • 七、总结


一、前言

本文针对压缩重构感知中的稀疏优化问题,实现了对其 L1 范数最小化问题 的求解,文章内容较长,请耐心看完,代码部分在本文第五章。


二、问题重述

考虑线性方程组求解问题:

A x = b (1) Ax = b \tag{1} Ax=b(1)

其中向量 x ∈ R n × 1 ,   b ∈ R m × 1 x \in R^{n\times 1},\ b \in R^{m\times 1} xRn×1, bRm×1,矩阵 A ∈ R m × n A \in R^{m\times n} ARm×n,且向量 b b b 的维数远小于向量 x x x 的维数,即 m ≪ n m \ll n mn。由于 m ≪ n m \ll n mn,方程组 (1) 是欠定的,因此存在无穷多个解,但是真正有用的解是所谓的“稀疏解”,即原始信号中有较多的零元素。

x = [ 0 , 0 , 1 , 0 , . . . , 1 , 0 , 0 ] (2) x = [0, 0, 1, 0, ..., 1, 0, 0] \tag{2} x=[0,0,1,0,...,1,0,0](2)

如果加上稀疏性这一先验信息,且矩阵 A A A 以及原问题的解 u u u 满足某些条件,那么我们可以通过求解稀疏优化问题把 u u u 与方程组 (1) 的其他解区别开。这类技术广泛应用于压缩感知(compressive sensing),即通过部分信息恢复全部信息的解决方案。


三、构造 ℓ 1 \ell_1 1 范数

举一个具体的例子(在 Python 环境里构造 A , u A, u A,u b b b)1

import numpy as np
m, n = 128, 256
# 128x256矩阵,每个元素服从Gauss随机分布
A = np.random.randn(m, n)
# 精确解 u 只有 10% 元素非零,每一个非零元素也服从高斯分布
# 可保证 u 是方程组唯一的非零元素最少的解
u = sprase_rand(n, 1, 0.1)
b = A * u

在这个例子中,我们构造了一个 128 × 256 128 \times 256 128×256 矩阵 A A A,它的每个元素都服从高斯 (Gauss) 随机分布(参照我的这篇博客:在Python中创建、生成稀疏矩阵(均匀分布、高斯分布))。

精确解 u u u 只有 10% 的元素非零,每一个非零元素也服从高斯分布。这些特征可以在理论上保证 u u u方程组 (1) 唯一的非零元素最少的解,即 u u u 是如下 ℓ 0 \ell_0 0 范数问题的最优解:

min ⁡ ∥ x ∥ 0 ,   s . t .   A x = b . (3) \min \left\|x\right\|_0,\ s.t.\ Ax = b. \tag{3} minx0, s.t. Ax=b.(3)

其中 ∥ x ∥ 0 \left\|x\right\|_0 x0是指 x x x 中非零元素的个数.由于 ∥ x ∥ 0 \left\|x\right\|_0 x0 是不连续的函数,且取值只可能是整数,问题 (3) 实际上是 NP(non-deterministic polynomial) 难的,求解起来非常困难。

若定义 ℓ 1 \ell_1 1 范数: ∥ x ∥ 1 = ∑ i = 1 n ∣ x i ∣ \left\|x\right\|_1 = \sum_{i=1}^{n} \left|x_i\right| x1=i=1nxi,并替换到问题 (3) 中,我们得到了另一个形式上非常相似的问题(又称 ℓ 1 \ell_1 1 范数优化问题,基追踪问题):

min ⁡ ∥ x ∥ 1 ,   s . t .   A x = b . (4) \min \left\|x\right\|_1,\ s.t.\ Ax = b. \tag{4} minx1, s.t. Ax=b.(4)

可以从理论上证明:若 A , b A, b A,b 满足一定的条件2(例如使用前面随机产生的 A A A b b b),向量 u u u 也是 ℓ 1 \ell_1 1 范数优化问题 (4) 的唯一最优解。


四、 ℓ 1 \ell_1 1 范数最小化问题转换为线性规划问题

在文献3中,给出了将问题 (4) 即 ℓ 1 \ell_1 1 范数最小化问题转换为标准的线性规划问题的一种方法,首先对于如下问题:

min ⁡ ∥ α ∥ 1 ,   s . t .   Φ α = s . (P) \min \left\|\alpha\right\|_1,\ s.t.\ \Phi\alpha = s. \tag{P} minα1, s.t. Φα=s.(P)

利用基追踪 (Basis Pursuit) 的定义,我们尝试将问题 P 与线性规划 (LP) 问题连接起来。首先,式 P 中变量 α \alpha α 没有非负约束,在此我们将 α \alpha α 定义为两个非负变量的差:

α   =   u − v ,   u , v ≥ 0 (5) \alpha\ =\ u - v,\ u, v \ge 0 \tag{5} α = uv, u,v0(5)

由于 u u u 可以大于也可以小于 v v v,所以 a a a 可以是正的也可以是负的4。接着约束条件 Φ α = s \Phi\alpha = s Φα=s 重写为 Φ ( u − v ) = s \Phi(u - v) = s Φ(uv)=s,也可改写为如下形式:

[ Φ , − Φ ] [ u v ]   =   s (6) \begin{bmatrix} \Phi,-\Phi \end{bmatrix} \begin{bmatrix} u\\v \end{bmatrix}\ =\ s \tag{6} [Φ,Φ][uv] = s(6)

然后,根据范数的定义,目标函数改写为:

∥ α ∥ 1   =   ∑ i = 1 n ∣ α i ∣   =   ∑ i = 1 n ∣ u i − v i ∣ (7) \left\|\alpha\right\|_1\ =\ \sum_{i=1}^{n}\left|\alpha_i\right|\ =\ \sum_{i=1}^{n}\left|u_i-v_i\right| \tag{7} α1 = i=1nαi = i=1nuivi(7)

目标函数中包含绝对值,采用网页5中的证明,对于有限维度的向量 ℓ 1 \ell_1 1 范数最小化,即 min ⁡ ∥ α ∥ 1 = ∑ i = 1 n ∣ α i ∣ \min\left\|\alpha\right\|_1 = \sum_{i=1}^{n} \left|\alpha_i\right| minα1=i=1nαi,等价于如下线性规划问题:

{ m i n      e ( u   +   v ) u   −   v   =   α u , v ≥ 0 (8) \left\{\begin{aligned} min\ \ \ \ &e(u\ +\ v)\\ &u\ -\ v\ =\ \alpha\\ &u, v \ge 0 \end{aligned}\right. \tag{8} min    e(u + v)u  v = αu,v0(8)

其中 e e e 为 1 行 n n n 列元素全为 1 的向量。接着若定义 x ∈ R m x \in R^m xRm,则可得到如下标准形式的线性方程:

min ⁡   c T x ,   s . t .   A x = b ,   x ≥ 0. (9) \min\ c^Tx,\ s.t.\ Ax = b,\ x \ge 0. \tag{9} min cTx, s.t. Ax=b, x0.(9)

在式 (9) 中, c T x c^Tx cTx 是目标函数, A x = b Ax = b Ax=b 是一组等式约束, x ≥ 0 x \ge 0 x0 定义了边界。结合式 (5)、(6),我们对式 (9) 中的各变量做出如下映射使其符合式 (8):

m ⇔ 2 n ;   x ⇔ [ u v ] ;   c ⇔ [ 1 , 1 , . . . , 1 ] 1 × 2 n ;   A ⇔ [ Φ , − Φ ] ;   b ⇔ s . (10) m\Leftrightarrow2n;\ x\Leftrightarrow\begin{bmatrix}u\\v\end{bmatrix};\ c\Leftrightarrow[1, 1, ..., 1]_{1\times 2n};\ A\Leftrightarrow[\Phi, -\Phi];\ b\Leftrightarrow s. \tag{10} m2n; x[uv]; c[1,1,...,1]1×2n; A[Φ,Φ]; bs.(10)

根据式 (9) 和式 (10) 求解线型规划得到解 x 0 = [ u v ] x_0 = \begin{bmatrix}u\\v\end{bmatrix} x0=[uv],则问题 ( P ) (P) (P) 的解

α 0 = x 0 ( 1 : n ) − x 0 ( n + 1 : 2 n ) \alpha_0 = x_0(1:n) - x_0(n+1:2n) α0=x0(1:n)x0(n+1:2n)


五、基于linprog的基追踪Python代码

同理可以用 MATLAB 做,原理在上面了,MATLAB 的可参考这篇博客:压缩感知重构算法之基追踪(Basis Pursuit, BP)

import numpy as np 
from scipy import optimize as op 

def BP_linprog(Phi, s):
    '''
    s = Phi * alpha
    (Given Phi & s, try to derive alpha, alpha is a sparse vector)
    
    Parameters
    ----------
    Phi : A matrix.
    s : A vector.

    Returns
    -------
    alpha : vector
        Optimal solutions of equations under L1 norm.
        
    Reference
    ---------
    Chen S S, Donoho D L, Saunders M A. Atomic decomposition by basis pursuit[J]. 
    SIAM review, 2001, 43(1): 129-159.(Available at: 
    http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.37.4272&rep=rep1&type=pdf)
    
    Version: 1.0 writen by z.q.feng @2022.03.13
    '''
    s, Phi = np.array(s), np.array(Phi)
    if np.size(s, 0) < np.size(s, 1):
        s = s.T
    p = np.size(Phi, 1)
    # according to section 3.1 of the reference
    c = np.ones([2 * p, 1])
    Aeq = np.hstack([Phi, -Phi])
    beq = s
    bounds = [(0, None) for i in range(2 * p)]
    x0 = op.linprog(c, A_eq = Aeq, b_eq = beq, bounds = bounds,
                    method='revised simplex')['x']
    alpha = x0[:p] - x0[p:]
    return np.array([alpha])

六、运行测试

根据第二节的代码产生的矩阵来测试,编写运行绘图代码如下:

alpha = BP_linprog(A, b)
# 恢复残差 
print('\n恢复残差:', np.linalg.norm(alpha.T - u.toarray(), 2))
# 绘图
plt.figure(figsize = (8, 6))
# 绘制原信号
plt.plot(u.toarray(), 'r', linewidth = 2, label = 'Original')
# 绘制恢复信号
plt.plot(alpha.T, 'b--', linewidth = 2, label = 'Recovery')
plt.grid() 
plt.legend()
plt.show()

得到输出如下:

恢复残差: 4.0645022580106625e-15

绘制图像如下:

稀疏优化L1范数最小化问题求解之基追踪准则(Basis Pursuit)——原理及其Python实现_第1张图片


七、总结

Python 中的的科学计算库让其与 MATLAB 比较也有挺不错的实现价值。


  1. 刘浩洋,户将,李勇峰,文再文. 最优化:建模、算法与理论[M]. 北京: 高等教育出版社, 2020: 4-11. ↩︎

  2. DONOHO D L. Compressedsensing[J/OL]. IEEE Transactions on information theory, 2006(4): 1289-1306. http://www.signallake.com/innovation/Compre
    ssedSensing091604.pdf. ↩︎

  3. DONOHO D L, CHEN S S, SAUNDERS M A. Atomicdecomposition by basis pursuit[J/OL]. SIAM review, 2001(1): 129-159. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.37.4272&rep=rep1&type=pdf. ↩︎

  4. 朱德通,孙文瑜,徐成贤. 最优化方法 (第二版)[M]. 北京: 高等教育出版社,2010: 49-51. ↩︎

  5. L1 范数优化的线性化方法如何证明?[J/OL]. http://www.zhihu.com/question/21427075. ↩︎

你可能感兴趣的:(Python笔记,最优化笔记,python,最优化)