【压缩感知合集8】MP算法(算法实现、收敛讨论以及问题分析)
0 前情提要0.1 数学模型和总体框图如下给定输入信号X∈RN×1\boldsymbol{X} \in \mathbb{R}^{N\times1}X∈RN×1,最终想要得到压缩信号A∈RM×1\boldsymbol{A} \in \mathbb{R}^{M\times1}A∈RM×1,K<<NK<<NK<<N0.2 压缩过程图例分析如下整个压缩过程也可以被称为感
0 前情提要
0.1 数学模型和总体框图如下
给定输入信号 X ∈ R N × 1 \boldsymbol{X} \in \mathbb{R}^{N\times1} X∈RN×1,最终想要得到压缩信号 A ∈ R M × 1 \boldsymbol{A} \in \mathbb{R}^{M\times1} A∈RM×1, K < < N K<<N K<<N
0.2 压缩过程图例分析如下
整个压缩过程也可以被称为感知过程
A
=
Φ
X
=
Φ
Ψ
Y
=
Θ
Y
\boldsymbol{A} =\boldsymbol{\Phi}\boldsymbol{X} = \boldsymbol{\Phi}\boldsymbol{\Psi} \boldsymbol{Y} = \boldsymbol{\Theta}\boldsymbol{Y}
A=ΦX=ΦΨY=ΘY
Θ \boldsymbol{\Theta} Θ即为感知过程的核心命名为感知矩阵
符号 | 含义 | 维度 | 属性 |
---|---|---|---|
X \boldsymbol{X} X | 输入信号;待压缩信号 | R N × 1 \mathbb{R}^{N\times1} RN×1 | 未知,需要恢复 |
Φ \boldsymbol{\Phi} Φ | 观测矩阵;测量矩阵 | R M × N \mathbb{R}^{M \times N} RM×N | 已知(非自适应性) |
Ψ \boldsymbol{\Psi} Ψ | 变换矩阵;变换基矩阵;稀疏基矩阵;稀疏矩阵;正交基字典矩阵 | R N × N \mathbb{R}^{N\times N} RN×N | 已知(非自适应性) |
Y \boldsymbol{Y} Y | 正交基变换后的稀疏表示 | R N × 1 \mathbb{R}^{N\times1} RN×1 | 未知,需要恢复 |
Θ \boldsymbol{\Theta} Θ | 感知矩阵,传感矩阵 | R M × N \mathbb{R}^{M\times N} RM×N | 已知(非自适应性) |
A \boldsymbol{A} A | 观测压缩所得到压缩信号 | R M × 1 \mathbb{R}^{M\times1} RM×1 | 已知 |
0.3 算法重构恢复过程如下
在得到已经压缩完的采样信号
A
\boldsymbol{A}
A 后,根据确定的固定性观测矩阵
Φ
\boldsymbol{\Phi}
Φ 和稀疏矩阵
Ψ
\boldsymbol{\Psi}
Ψ 的先验信息进行恢复,数学表达如下
X
ˇ
=
f
(
A
,
Θ
)
\boldsymbol{\check{X}}=f(\boldsymbol{A},\boldsymbol{\Theta})
Xˇ=f(A,Θ)
给定被压缩的信号
A
\boldsymbol{A}
A 和感知矩阵
Θ
\boldsymbol{\Theta}
Θ,求解输入原始信号
X
ˇ
\boldsymbol{\check{X}}
Xˇ 的过程称为重构。
重构问题相较于压缩问题来说是一个更加困难的一个任务。
由于 M < < N M<<N M<<N, 已知条件所能构成的方程是欠定的,无法轻易求出数值解的,幸运的是,如果原始信号是稀疏的,那么这个问题可以被很好地解决。
解释一下为什么是欠定的:(
X
\boldsymbol{X}
X 满足的约束如下)
A
=
Ψ
X
[
a
1
⋮
a
M
]
=
[
ψ
11
ψ
12
.
.
.
ψ
1
N
ψ
2
N
ψ
2
N
.
.
.
ψ
2
N
⋮
⋮
⋮
⋮
ψ
M
1
ψ
M
2
.
.
.
ψ
M
N
]
[
x
1
x
2
⋮
x
N
]
\boldsymbol{A} = \boldsymbol{\Psi}\boldsymbol{X}\\ \left[\begin{array}{c}a_1 \\ \vdots\\ a_M \end{array}\right] = \left[\begin{array} {cccc} \psi_{11} & \psi_{12} & ... & \psi_{1N} \\\psi_{2N} & \psi_{2N} &... &\psi_{2N}\\ \vdots & \vdots & \vdots & \vdots \\ \psi_{M1} & \psi_{M2} &... &\psi_{MN}\end{array}\right]\left[\begin{array}{c}x_1 \\ x_2 \\ \vdots \\ x_N\end{array}\right]
A=ΨX⎣⎢⎡a1⋮aM⎦⎥⎤=⎣⎢⎢⎢⎡ψ11ψ2N⋮ψM1ψ12ψ2N⋮ψM2......⋮...ψ1Nψ2N⋮ψMN⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡x1x2⋮xN⎦⎥⎥⎥⎤
实际使用过程中需要求解出
N
N
N 个未知数,但是只有
M
M
M 个方程,未知数的个数远远大于方程的个数。
若 N = M N=M N=M,则可轻松由 A \boldsymbol{A} A解出 X \boldsymbol{X} X和 Y \boldsymbol{Y} Y
而
M
<
<
N
M<<N
M<<N,可根据稀疏表示下的信号
Y
\boldsymbol{Y}
Y和矩阵所具有的RIP性质
重构
一般可以抽象为如下求解任务
min
∥
Ψ
T
X
∥
0
s
.
t
.
Θ
X
=
Φ
Ψ
X
=
A
\min \left\| \boldsymbol{\Psi}^{T} \boldsymbol{X}\right\|_{0} \\s.t. \boldsymbol{\Theta} \boldsymbol{X}=\boldsymbol{\Phi}\boldsymbol{\Psi}\boldsymbol{X}= \boldsymbol{A}
min∥∥∥ΨTX∥∥∥0s.t.ΘX=ΦΨX=A
1 概述
- 匹配追踪算法(Matching Pursuits,MP)
提出时间:90年代初
国内文献都仅描述了算法步骤和简单的应用,并未对其进行详尽的分析
国外的文献还是分析的很透彻,所以我结合自己的理解,来分析一下写到博客里
2 MP算法
2.0 主要的思路
如果选择与信号最匹配的原子?
如何构建稀疏逼近并求残差?
如何进行迭代?
2.1 算法思想描述
作为对信号进行稀疏分解的方法之一,将信号在完备字典库上进行分解。
假定被表示的信号为
X
\boldsymbol{X}
X,其长度为
N
N
N。假定
H
\mathbb{H}
H 表示Hilbert空间
,在空间
H
\mathbb{H}
H 里,由一组向量
{
d
1
,
d
2
,
.
.
.
,
d
J
}
\{\boldsymbol{d}_1,\boldsymbol{d}_2,...,\boldsymbol{d}_J\}
{d1,d2,...,dJ} 构成字典矩阵
D
\boldsymbol{D}
D,其中每个向量
d
i
\boldsymbol{d_i}
di 可以称为原子(atom),每个原子其长度与被表示信号
X
\boldsymbol{X}
X 的长度
N
N
N 相同,而且这些向量已作为归一化处理,即
∥
d
i
∥
=
1
\|\boldsymbol{d_i}\| = 1
∥di∥=1,也就是单位向量长度为1。
MP算法的基本思想:从字典矩阵 D \boldsymbol{D} D(也称为过完备原子库,过完备字典就是表示字典的原子数量大于信息维度 J > N J>N J>N 中),选择一个与信号 X \boldsymbol{X} X 最匹配的原子(也就是某列),构建一个只针对这个列向量有线性表示系数的稀疏逼近,并求出信号残差,然后继续选择与信号残差最匹配的原子,反复迭代,信号 X \boldsymbol{X} X 可以由这些原子线性和,同时再加上最后的残差值来表示。很显然,如果残差值在可以忽略的范围内,则信号 X \boldsymbol{X} X 就是这些原子的线性组合。
匹配追踪的中心问题是你如何选择信号在字典中最优的若干个展开项。
2.2 分解步骤实现
2.2.1 第一步
计算被压缩的信号 A \boldsymbol{A} A 与字典矩阵中每列原子 d i \boldsymbol{d}_i di 的内积,选择绝对值最大的一个原子,它就是过完备字典 D \boldsymbol{D} D 中与信号 A \boldsymbol{A} A 在本次迭代运算中最匹配的atom。
用数学语言来描述:令信号
A
∈
H
\boldsymbol{A} \in \mathbb{H}
A∈H ,从字典矩阵
D
\boldsymbol{D}
D 中选择一个最为匹配的原子
d
i
\boldsymbol{d}_i
di ,满足
∣
<
A
,
d
r
0
>
∣
=
s
u
p
i
∈
(
1
,
.
.
,
N
)
∣
<
A
,
d
i
>
∣
|<\boldsymbol{A},\boldsymbol{d}_{r_0}>| = sup_{i \in (1,..,N)}|<\boldsymbol{A},\boldsymbol{d}_i>|
∣<A,dr0>∣=supi∈(1,..,N)∣<A,di>∣
s
u
p
i
∈
(
1
,
.
.
,
N
)
f
(
i
)
sup_{i \in (1,..,N)}f(i)
supi∈(1,..,N)f(i) 表示函数
f
(
i
)
f(i)
f(i) 的上确界
r 0 r_0 r0 表示一个字典矩阵的列索引,是所有列中能得到最大内积的索引, r ∗ r_* r∗ 下标表示第几次迭代的含义。
这样,信号 A \boldsymbol{A} A 就被分解或者理解为被表示为两个部分,即:
第一部分:在最匹配原子 d r 0 \boldsymbol{d}_{r_0} dr0 的投影分量( d r 0 \boldsymbol{d}_{r_0} dr0 乘上一个线性表示的系数)
第二部分:残差的垂直分量 ( R 1 R_1 R1 表示第一次的迭代剩余的残差的系数 , f 1 \boldsymbol{f}_1 f1 表示第一次迭代剩余的垂直分量)
A = < A , d r 0 > d r 0 + R 1 f 1 也可以写作(统一以点的形式) R 0 f 0 = < R 0 f 0 , d r 0 > d r 0 + R 1 f 1 \boldsymbol{A}=<\boldsymbol{A}, \boldsymbol{d}_{r_0}>\boldsymbol{d}_{r_0}+R_1\boldsymbol{f}_1 \\\text{也可以写作(统一以点的形式)} \\ R_0\boldsymbol{f}_0=<R_0\boldsymbol{f}_0, \boldsymbol{d}_{r_0}>\boldsymbol{d}_{r_0}+R_1\boldsymbol{f}_1 A=<A,dr0>dr0+R1f1也可以写作(统一以点的形式)R0f0=<R0f0,dr0>dr0+R1f1
2.2.2 第二步
对残值
R
1
f
1
R_1\boldsymbol{f}_1
R1f1 进行第一步同样的分解,那么第
k
k
k 步可以得到:
R
k
f
k
=
<
R
k
f
k
,
d
r
k
+
1
>
d
r
k
+
1
+
R
k
+
1
f
k
+
1
R_{k} \boldsymbol{f}_k=<R_{k} \boldsymbol{f}_k, \boldsymbol{d}_{r_{k+1}}>\boldsymbol{d}_{r_{k+1}}+R_{k+1} \boldsymbol{f}_{k+1}
Rkfk=<Rkfk,drk+1>drk+1+Rk+1fk+1
其中
d
r
k
+
1
\boldsymbol{d}_{r_{k+1}}
drk+1 满足
∣
<
R
k
f
k
,
d
r
k
+
1
>
∣
=
s
u
p
i
∈
(
1
,
.
.
,
J
)
∣
<
R
k
f
k
,
d
i
>
∣
|<R_k\boldsymbol{f}_k,\boldsymbol{d}_{r_k+1}>| = sup_{i \in (1,..,J)}|<R_k\boldsymbol{f}_k,\boldsymbol{d}_i>|
∣<Rkfk,drk+1>∣=supi∈(1,..,J)∣<Rkfk,di>∣。可见,经过
k
k
k 步分解后,信号
A
\boldsymbol{A}
A 被分解为:
A
=
R
0
f
0
=
∑
n
=
0
k
<
R
n
f
n
,
d
r
n
>
d
r
n
+
R
k
+
1
f
k
+
1
\begin{aligned} \boldsymbol{A}&=R_0\boldsymbol{f}_0 \\ &=\sum_{n=0}^{k}<\boldsymbol{R}_{n} \boldsymbol{f}_n, \boldsymbol{d}_{r_{n}}>\boldsymbol{d}_{r_n} + R_{k+1} \boldsymbol{f}_{k+1} \end{aligned}
A=R0f0=n=0∑k<Rnfn,drn>drn+Rk+1fk+1
2.3 讨论以及个人想法
2.3.1 讨论1:为什么要假定在Hilbert空间中?
Hilbert空间
就是定义了完备的内积空间
(可以简单的理解为属于完备内积空间的向量在任意内积操作的情况下,所得结果都属于本内积空间)。很显然,MP
中的获得总重要原子的比较计算使用向量的内积运算,所以在 Hilbert空间
中进行信号分解理所当然了。
2.3.2 讨论2:为什么原子要先被归一化处理
即上面的描述
∥
d
i
∥
=
1
\|\boldsymbol{d}_i\| = 1
∥di∥=1 。MP
中选择最匹配的原子是选择内积最大的一个。也就是信号(或是迭代中残差值)在原子(单位的)投影长度最长的一个,比如第一次分解过程中,投影长度就
<
A
,
d
r
0
>
<\boldsymbol{A},\boldsymbol{d}_{r_0}>
<A,dr0>。
内积常用于计算一个矢量在一个方向上的投影长度,这时方向的矢量必须是单位矢量,如果不把所有的原子归一化为相同的模长,会出现前面系数受到模长干扰的问题。
2.3.3 讨论3:为什么这种方法可以实现恢复的效果
从数学公式角度出发讲述为什么能恢复
A = D X = [ d 1 d 2 ⋯ d N ] [ x 1 x 2 ⋮ x N ] = [ d 11 d 12 . . . d 1 N ⋮ ⋮ ⋮ ⋮ d M 1 d M 2 . . . d M N ] [ x 1 x 2 ⋮ x N ] [ a 1 a 2 ⋮ a M ] = [ d 11 ∗ x 1 + ⋯ d 1 i ∗ x 1 ⋯ + d 1 N ∗ x N d 21 ∗ x 1 + ⋯ d 2 i ∗ x 2 ⋯ + d 2 N ∗ x N ⋮ ⋮ ⋮ d M 1 ∗ x 1 + ⋯ d M i ∗ x M ⋯ + d M N ∗ x N ] \begin{aligned} \boldsymbol{A} &= \boldsymbol{D} \boldsymbol{X} \\&= [\begin{array} {cccc} \boldsymbol{d}_1 & \boldsymbol{d}_2 & \cdots & \boldsymbol{d}_N \end{array}] \left[\begin{array}{c} x_1 \\ x_2 \\ \vdots\\x_N\end{array}\right] \\&= \left[\begin{array} {cccc} d_{11} & d_{12} & ... & d_{1N} \\ \vdots & \vdots & \vdots& \vdots\\ d_{M1} & d_{M2} &... & d_{MN} \end{array}\right]\left[\begin{array}{c} x_1 \\ x_2 \\ \vdots\\x_N\end{array}\right] \\ \left[\begin{array}{c} a_1\\a_2\\\vdots\\a_M\end{array} \right]&= \left[\begin{array}{c} d_{11}*x_1 +\cdots d_{1i}*x_1 \cdots + d_{1N}*x_N\\d_{21}*x_1 +\cdots d_{2i}*x_2\cdots + d_{2N}*x_N\\\vdots\quad\vdots\quad\vdots\\d_{M1}*x_1 +\cdots d_{Mi}*x_M \cdots + d_{MN}*x_N\end{array} \right] \end{aligned} A⎣⎢⎢⎢⎡a1a2⋮aM⎦⎥⎥⎥⎤=DX=[d1d2⋯dN]⎣⎢⎢⎢⎡x1x2⋮xN⎦⎥⎥⎥⎤=⎣⎢⎡d11⋮dM1d12⋮dM2...⋮...d1N⋮dMN⎦⎥⎤⎣⎢⎢⎢⎡x1x2⋮xN⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡d11∗x1+⋯d1i∗x1⋯+d1N∗xNd21∗x1+⋯d2i∗x2⋯+d2N∗xN⋮⋮⋮dM1∗x1+⋯dMi∗xM⋯+dMN∗xN⎦⎥⎥⎥⎤
数学任务:已知 A \boldsymbol{A} A 和 D \boldsymbol{D} D ,猜测 X \boldsymbol{X} X
如果说
A
\boldsymbol{A}
A 表示的向量和原子字典的某一个原子有着非常强的相关性,代表在构成这个
A
\boldsymbol{A}
A 的时候原子字典所用来对应表示
d
i
\boldsymbol{d}_i
di 的系数
x
i
x_i
xi 比较大,主要都是由
d
i
\boldsymbol{d}_i
di 构成的,具体表现如下
[
a
1
a
2
⋮
a
M
]
⋅
d
i
=
[
a
1
a
2
⋮
a
M
]
⋅
[
d
1
i
d
2
i
⋮
d
M
i
]
=
[
d
11
∗
x
1
+
⋯
d
1
i
∗
x
1
⋯
+
d
1
N
∗
x
N
d
21
∗
x
1
+
⋯
d
2
i
∗
x
2
⋯
+
d
2
N
∗
x
N
⋮
⋮
⋮
d
M
1
∗
x
1
+
⋯
d
M
i
∗
x
M
⋯
+
d
M
N
∗
x
N
]
⋅
d
i
=
(
d
1
∗
x
1
+
⋯
d
i
∗
x
2
⋯
+
d
N
∗
x
N
)
⋅
d
i
=
x
1
d
1
⋅
d
i
+
⋯
x
2
d
i
⋅
d
i
⋯
+
x
N
d
N
⋅
d
i
\begin{aligned} \\ \left[\begin{array}{c} a_1\\a_2\\\vdots\\a_M\end{array}\right] \cdot \boldsymbol{d}_i &=\left[\begin{array}{c} a_1\\a_2\\\vdots\\a_M\end{array}\right] \cdot \left[\begin{array}{c} d_{1i}\\d_{2i}\\\vdots\\d_{Mi}\end{array}\right] \\&= \left[\begin{array}{c} d_{11}*x_1 +\cdots d_{1i}*x_1 \cdots + d_{1N}*x_N\\d_{21}*x_1 +\cdots d_{2i}*x_2\cdots + d_{2N}*x_N\\\vdots\quad\vdots\quad\vdots\\d_{M1}*x_1 +\cdots d_{Mi}*x_M \cdots + d_{MN}*x_N\end{array} \right] \cdot\boldsymbol{d}_i \\& = \left(\begin{array}{c} \boldsymbol{d}_{1}*x_1 +\cdots \boldsymbol{d}_{i}*x_2 \cdots + \boldsymbol{d}_{N}*x_N\end{array} \right)\cdot\boldsymbol{d}_i \\&= x_1\boldsymbol{d}_{1} \cdot\boldsymbol{d}_i +\cdots x_2\boldsymbol{d}_{i} \cdot\boldsymbol{d}_i \cdots + x_N\boldsymbol{d}_{N} \cdot\boldsymbol{d}_i \end{aligned}
⎣⎢⎢⎢⎡a1a2⋮aM⎦⎥⎥⎥⎤⋅di=⎣⎢⎢⎢⎡a1a2⋮aM⎦⎥⎥⎥⎤⋅⎣⎢⎢⎢⎡d1id2i⋮dMi⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡d11∗x1+⋯d1i∗x1⋯+d1N∗xNd21∗x1+⋯d2i∗x2⋯+d2N∗xN⋮⋮⋮dM1∗x1+⋯dMi∗xM⋯+dMN∗xN⎦⎥⎥⎥⎤⋅di=(d1∗x1+⋯di∗x2⋯+dN∗xN)⋅di=x1d1⋅di+⋯x2di⋅di⋯+xNdN⋅di
很明显字典原子间的点乘取值最大的是
d
i
⋅
d
i
\boldsymbol{d}_i\cdot \boldsymbol{d}_i
di⋅di ,
因为不是正定方程所以不可能完全正交,即为不能保证 $\boldsymbol{d}_j\cdot \boldsymbol{d}_i = 0, i \neq j
,
所
以
只
有
在
,所以只有在
,所以只有在x_i$ 也足够突出的情况下可以在迭代中显示出来,并被MP
算法追踪出来。
从向量角度出发讲述为什么能收敛
每次迭代通过公式 R k f k = < R k f k , d r k + 1 > d r k + 1 + R k + 1 f k + 1 R_{k} \boldsymbol{f}_k=<R_{k} \boldsymbol{f}_k, \boldsymbol{d}_{r_{k+1}}>\boldsymbol{d}_{r_{k+1}}+R_{k+1} \boldsymbol{f}_{k+1} Rkfk=<Rkfk,drk+1>drk+1+Rk+1fk+1 可以看出三个向量构成一个三角形, d r k + 1 \boldsymbol{d}_{r_{k+1}} drk+1 与 R k + 1 f k + 1 R_{k+1} \boldsymbol{f}_{k+1} Rk+1fk+1 正交(不能说垂直,但是可以想象二维空间这两个矢量是垂直的)。
这结论可以得出
∥
R
k
f
∥
2
=
∥
R
k
+
1
f
∥
2
+
∥
<
R
k
f
k
,
d
r
k
+
1
>
d
r
k
+
1
∥
2
\left\|R_{k} f\right\|^{2}=\left\|R_{k+1} f\right\|^{2}+\| <R_{k} \boldsymbol{f}_k,\boldsymbol{d}_{r_{k+1}} >\boldsymbol{d}_{r_{k+1}}\|^{2}
∥Rkf∥2=∥Rk+1f∥2+∥<Rkfk,drk+1>drk+1∥2
所以得出每一个残值比上一次的小,故而收敛。
2.4 MP算法的缺点
如上所述,信号在迭代过程中产生逐渐变小的残值 R k f k R_{k}\boldsymbol{f}_k Rkfk ,但是这个残值不能保证满足和已选择的原子是正交的
这会使得每次迭代的结果并不是最优的而是次最优的,收敛需要很多次迭代。数学表示:在第
k
k
k 次迭代过程中
R
k
f
k
=
<
R
k
f
k
,
d
r
k
+
1
>
d
r
k
+
1
+
R
k
+
1
f
k
+
1
R_{k} \boldsymbol{f}_k=<R_{k} \boldsymbol{f}_k, \boldsymbol{d}_{r_{k+1}}>\boldsymbol{d}_{r_{k+1}}+R_{k+1} \boldsymbol{f}_{k+1}
Rkfk=<Rkfk,drk+1>drk+1+Rk+1fk+1
产生的残差
R
k
+
1
f
k
+
1
R_{k+1} \boldsymbol{f}_{k+1}
Rk+1fk+1 ,虽然与
d
r
k
+
1
\boldsymbol{d}_{r_{k+1}}
drk+1 是正交的,但是他与前面的$\boldsymbol{d}{r{0 \sim k}} $不是正交的。
举个例子说明一下:
在二维空间上,有一个信号
X
\boldsymbol{X}
X 被
D
=
{
d
1
,
d
2
}
\boldsymbol{D}=\{\boldsymbol{d}_1, \boldsymbol{d}_2\}
D={d1,d2} 来表达,MP算法
迭代会发现总是在
d
1
\boldsymbol{d}_1
d1 和
d
2
\boldsymbol{d}_2
d2 上反复迭代,即
A
=
x
1
d
1
+
x
2
d
2
+
x
3
d
1
+
x
4
d
2
⋯
\boldsymbol{A} = x_1\boldsymbol{d}_1+x_2\boldsymbol{d}_2+x_3\boldsymbol{d}_1+x_4\boldsymbol{d}_2\cdots
A=x1d1+x2d2+x3d1+x4d2⋯
这个就是因为残差值与已选择的原子的非正交性导致的。
再用严谨的方式描述,可能容易理解:在Hilbert空间
H
\mathbb{H}
H 中,
D
=
{
d
1
,
d
2
,
⋯
,
d
N
}
\boldsymbol{D} = \{\boldsymbol{d}_1,\boldsymbol{d}_2,\cdots,\boldsymbol{d}_N\}
D={d1,d2,⋯,dN} ,
D
∈
R
M
×
N
\boldsymbol{D} \in \R^{M\times N}
D∈RM×N,定义一个向量
V
k
=
span
{
d
r
0
,
d
r
1
,
⋯
,
d
r
k
−
1
}
‾
\boldsymbol{V}_{k}=\overline{\operatorname{span}\left\{\boldsymbol{d}_{r_0}, \boldsymbol{d}_{r_1}, \cdots, \boldsymbol{d}_{r_{k-1}}\right\}}
Vk=span{dr0,dr1,⋯,drk−1} ,
V
k
\boldsymbol{V}_k
Vk 就是这些向量的张成中的一个,(在数学中span
是扩张空间的意思。就是若干个向量通过线性组合得到的一个向量空间,满足向量空间的所有要求。Span列向量
是矩阵中所有的列span
成的空间。)
MP
迭代到第
k
k
k 次的压缩信号
A
\boldsymbol{A}
A 可以表示为:
A
=
R
0
f
0
=
∑
n
=
0
k
<
R
n
f
n
,
d
r
n
>
d
r
n
+
R
k
+
1
f
k
+
1
\begin{aligned} \boldsymbol{A}&=R_0\boldsymbol{f}_0 \\ &=\sum_{n=0}^{k}<\boldsymbol{R}_{n} \boldsymbol{f}_n, \boldsymbol{d}_{r_{n}}>\boldsymbol{d}_{r_n} + R_{k+1} \boldsymbol{f}_{k+1} \end{aligned}
A=R0f0=n=0∑k<Rnfn,drn>drn+Rk+1fk+1
为了便于表示设置 A k ˇ = ∑ n = 0 k < R n f n , d r n > d r n \check{\boldsymbol{A}_k} = \sum_{n=0}^{k}<\boldsymbol{R}_{n} \boldsymbol{f}_n, \boldsymbol{d}_{r_{n}}>\boldsymbol{d}_{r_n} Akˇ=∑n=0k<Rnfn,drn>drn ,可以写成如下表达式
A = A k ˇ + R k + 1 f k + 1 \begin{aligned} \boldsymbol{A}&=\check{\boldsymbol{A}_k} + R_{k+1} \boldsymbol{f}_{k+1} \end{aligned} A=Akˇ+Rk+1fk+1
此时
A
k
ˇ
\check{\boldsymbol{A}_k}
Akˇ 是
k
k
k 个项的线性表示,MP算法
迭代过程中都是保证
d
r
k
\boldsymbol{d}_{r_{k}}
drk 和
f
k
+
1
\boldsymbol{f}_{k+1}
fk+1 正交,但是如果不能保证
A
k
ˇ
\check{\boldsymbol{A}_k}
Akˇ 和
f
k
+
1
\boldsymbol{f}_{k+1}
fk+1 正交的话,
f
k
+
1
\boldsymbol{f}_{k+1}
fk+1 就会含有一些成分分量蕴含于
A
ˇ
k
\check{\boldsymbol{A}}_k
Aˇk ,也就是说会含有
∑
n
=
0
k
<
R
n
f
n
,
d
r
n
>
d
r
n
\sum_{n=0}^{k}<R_{n} \boldsymbol{f}_n, \boldsymbol{d}_{r_{n}}>\boldsymbol{d}_{r_n}
∑n=0k<Rnfn,drn>drn 的分量,会含有
d
r
0
∼
k
\boldsymbol{d}_{r_{0\sim k}}
dr0∼k 的分量,前面的迭代就都不是最优的不能一次性找到最合适的系数表达。
只有当
A
k
ˇ
⊥
f
k
+
1
\check{\boldsymbol{A}_k}\perp \boldsymbol{f}_{k+1}
Akˇ⊥fk+1 那么第
k
+
1
k+1
k+1 个残值在后面的分解过程中,才不可能出现
A
k
ˇ
\check{\boldsymbol{A}_k}
Akˇ 中已经出现的项,这才是最优的。而一般情况下,不能满足这个条件,MP
一般只能满足第
k
+
1
k+1
k+1 个残差和
d
r
k
\boldsymbol{d}_{r_{k}}
drk 正交,也就是残差值在已选择的原子进行垂直投影是非正交性的。
如果第
k
+
1
k+1
k+1 个残差
f
k
+
1
\boldsymbol{f}_{k+1}
fk+1 和
A
k
ˇ
\check{\boldsymbol{A}_k}
Akˇ 不正交,那么后面的迭代还会出现
A
k
ˇ
\check{\boldsymbol{A}_k}
Akˇ 中已经出现的项,很显然本次得到的残差就不是最优的,这也就是为什么说MP
收敛就需要更多次迭代的原因。不是说MP一定得到不到最优解,而且其前面描述的特性导致一般得到不到最优解而是次优解。
LAST、参考文献
压缩感知重构算法之正交匹配追踪(OMP)_彬彬有礼的专栏-CSDN博客_omp
MP算法和OMP算法及其思想_逍遥剑客的专栏-CSDN博客_omp算法
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)