压缩感知——浅析匹配追踪算法(Matching Pursuit,MP)与正交匹配追踪算法(Orthogonal Matching Pursuit,OMP)

浅析匹配追踪算法(Matching Pursuit,MP)与正交匹配追踪算法(Orthogonal Matching Pursuit,OMP)

前言

考虑下列数学模型:
Alt
在压缩感知(Compressed sensing)术语中,从X和A中找到Y称为压缩(compression)。 相反,从Y和A中找到原始X称为重构(reconstruction)
x被称为原始信号(original signal)原始向量(original vector),A被称为压缩矩阵(Compression matrix)或感知矩阵(sensing matrix),而Y被称为压缩信号(compressed signal)或压缩向量(compressed vector)

第一个例子

给定压缩矩阵A和原始向量X:
Alt
很容易就可以得到压缩向量Y:
Alt
然而,反过来给定压缩向量Y和原始向量X:
[Alt]
很难得到找到原始的(或尽可能接近的) X。

基本概念

首先介绍一些基本概念。

我们将压缩矩阵A看作是列向量的集合,即:
Alt
其中:
在这里插入图片描述
这些列向量(b1,b2,b3)被称为基(basis)或原子(atoms)
令:
在这里插入图片描述
那么:
在这里插入图片描述
上述方程告诉我们,Y是用X中的系数(x1, x2, x3)表示的基(b1,b2,b3)的线性组合,且已知x1=-1.2,x2=1,x3=0。换句话说,在上述方程中,基b1对生成Y的贡献分别是-1.2,基b2对生成Y的贡献分别是1,基b3对生成Y的贡献分别是0。

OMP算法求解过程

OMP的工作原理与MP相似,但MP是找出哪一个基对Y贡献最大,然后哪一个基贡献第二,哪一个基贡献第三,依此类推。OMP计算过程需要进行N次迭代,其中N是A中基的个数。在上述的示例中,N为3。

1. 计算基的贡献度
上述例子中有三个基,分别是:
在这里插入图片描述
以及
在这里插入图片描述
所以Y中每个基的贡献度分别是:
在这里插入图片描述
显然,基b1的贡献最大,其贡献度为-1.34(使用绝对值)。
在第一轮迭代中,选择基b1,该基的贡献度为-1.34。
当然,可以在一个单独的步骤中计算每一个基的点积,即:
在这里插入图片描述
2. 计算残差r1
首先,选择第一个基,即基b1和贡献度λ1=-1.34。残差为:
在这里插入图片描述
如图2所示,残差r1与第一个基b1是垂直的。
在这里插入图片描述
3. 重复迭代
第一次迭代后,我们得到所选基b1。把这些基重新组合成一个新的基Anew。即:
在这里插入图片描述
重写贡献度值,即:
在这里插入图片描述
值-1.34在第一个元素因为它是第一个基b1的贡献。
第一次迭代后残差为:
在这里插入图片描述
现在我们要从剩下的基b2和b3中选择对残差r贡献最大的基,在一步中:
在这里插入图片描述

因此,基b2的贡献更大,即0.98。
我们把选定的基b2添加到矩阵Anew中,
在这里插入图片描述

现在,这一步不同于MP。这里,我们需要重新计算基b1和b2共同对Y的贡献(而不是基b2对r1的贡献)

为了解决这个贡献问题,我们必须求出最小值平方问题,很容易表述为:
在这里插入图片描述
在数学术语中,这个公式可以写成:
在这里插入图片描述
根据最小二乘原理,上述公式的解为:
在这里插入图片描述
其中,Anew+是Anew的广义逆矩阵。
在这里插入图片描述
在上述例子中
在这里插入图片描述
在Matlab中计算广义逆矩阵很简单,只需使用pinv()命令即可。
在这里插入图片描述
计算λ之后,更新xrec
在这里插入图片描述
在这里我们把λ放在xrec在第一和第二行,因为它对应于第一和第二被选择的基b1和b2
重新得到Anew和λ之后,现在我们可以更新新的残差r2
在这里插入图片描述
到此,残差为0。我们可以停在这里,或者继续下一步。(如果在这里停止,我们可以节省一些计算工作) 。

4. 最后迭代

由于残差已经消失,因此不需要此步骤。(许多OMP实现软件需要信号稀疏度K的参数。这是该软件将迭代K次的线索。此后它将停止,无论剩下多少残差)
因此,我们的重构信号为:
在这里插入图片描述
它和原始信号是一样的.

以上便是OMP的整个计算流程。

MP算法求解过程

1. 计算贡献度
Y中每个基的贡献度分别是:
在这里插入图片描述
显然,基b1的贡献最大,其贡献度为-1.34(使用绝对值)。

==================================================================================

第一轮迭代

选择基b1,该基的贡献度为-1.34
重写贡献度值,即:
在这里插入图片描述

计算残差
在这里插入图片描述
接下来我们计算这个残差和基b2和基b3的点积。(不需要用基b1计算,因为这个残差必定垂直于基b1).
在这里插入图片描述
取绝对值,我们得到基b2是第二强的影响。
贡献度值,即:
在这里插入图片描述
第一轮迭代完成

==================================================================================

第二轮迭代,计算残差:
在这里插入图片描述
接下来我们计算这个残差r2和基b1基b3的点积。
在这里插入图片描述
在第二轮迭代中选择基b1

贡献度值,即:
在这里插入图片描述
第二轮迭代完成

==================================================================================

第三轮迭代,计算残差:
在这里插入图片描述
接下来我们计算这个残差r3和基b2基b3的点积。
在这里插入图片描述
在第三轮迭代中选择基b2

贡献度值,即:
在这里插入图片描述
第三轮迭代完成

==================================================================================

第四轮迭代,计算残差:
在这里插入图片描述
重复上述过程,直到残差达到指定阈值。

==================================================================================
以上便是MP算法的计算流程。

第二个例子

现在我们继续看另一个例子,给定:
在这里插入图片描述
很容易就可以得到:

在这里插入图片描述
现在给定A和Y用OMP计算X。

步骤如下:

1.A中有四个基
在这里插入图片描述
2. 因为基的长度不是1,我们需要把它们都归一化。
在这里插入图片描述
3. 计算这些归一化基的贡献度:
在这里插入图片描述
4.第二个标准化的基b ̂2的贡献最高。因此,我们将第二个基b2放入矩阵Anew中。
在这里插入图片描述
5.计算最小二乘问题的解λ1
在这里插入图片描述
因为这个λ1是基b2的系数,那么:
在这里插入图片描述
6.计算残差
在这里插入图片描述
7.重复第3步。计算基b ̂1,b ̂3,b ̂4中哪一个基对残差r1的贡献最大。
在这里插入图片描述
在这里,在基b ̂3的贡献最大的,是1.7902。
8.将基b3而不是(b ̂3)添加到Anew中。
在这里插入图片描述
4. 计算最小二乘问题的解λ2
在这里插入图片描述
由于λ2对应基b2和基b3,因此:
在这里插入图片描述
10.计算残差在这里插入图片描述
11.重复第3步,直到最后一次迭代。
12.计基b1和基b4的贡献度
在这里插入图片描述
因此,基b4的贡献度最大,为0.7308.
5. 将基b4而不是(b ̂4)添加到Anew中。
在这里插入图片描述
6. 计算最小二乘问题的解λ3.在这里插入图片描述
因为λ2对应基b2、基b3和基b4,因此,
在这里插入图片描述
15.计算残差
在这里插入图片描述
16.迭代到此停止,因为残差已经全部是0了。重构的原始向量xrec为:
在这里插入图片描述

MP和OMP的缺点

OMP很快。与凸优化相比,速度非常快。这是贪婪算法的一个优点。但是OMP也遭受矩阵A高度相干性的困扰。矩阵中的相干性是什么?简单来说,矩阵A中的相干性表示矩阵A中两列之间的相似性(similarity)。
请看下面两个矩阵:
在这里插入图片描述
矩阵A2具有非常高的相干性,因为第二类和第一列非常相似。矩阵的相干性较低,因为第二列与第一列和第三列不太相似。相干值用μ表示:
在这里插入图片描述
μ的值在0和1之间。如果μ的值很大,则通常OMP给出一个错误的重构结果。

试试下面的例子:
已知
在这里插入图片描述
求出Y。
然后,给定A和Y,使用MP和OMP求X。
下面直接给出结果:
在这里插入图片描述
可以看出,MP和OMP有类似特性,且都不能计算出正确结果

后记

正如我们在上面的过程中看到的那样,我们现在注意到以下事实。
(1)我们从OMP计算得出的最高贡献来自标准化基础。并非来自最初的非标准化基础。
(2)如果测量或重构矩阵A中的所有基础都已被归一化,则无需进行归一化步骤即可继续进行计算。
(3)每个基的贡献是由残基和归一化基的点积完成的。
(4)在MP的情况下,重建系数xrec是根据基和残基的点积计算得出的,而在OMP上,则是根据Anew到Y的最小二乘解计算得出的系数xrec。最小二乘解λ表示基对应位置的xrec。Anew本身是从非标准化的基得来的,这个过程需要时间。因此,OMP比MP更慢。
(5)残差r是由Y、Anew和λ计算得来的
(6)迭代将持续与A中的行数(即M)一样多。或者,如果信号k的稀疏度已知,则迭代重复k次。如果k <M,则知道k将有助于我们更快地进行计算。但是,如果k未知,则迭代次数最多应为M。

参考文献

[1]: Usman, Koredianto, (2017), Introduction to Orthogonal Matching Pursuit, Telkom University, Online : http://korediantousman.staff.telkomuniversity.ac.id.
[2]: Usman, Koredianto, 2017, Introduction to Matching Pursuit, Telkom University, Online : http://korediantousman.staff.telkomuniversity.ac.id/tutorial.

  • 23
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
正交匹配追踪Orthogonal Matching Pursuit,简称OMP算法是一种基于迭代的稀疏表示方法,用于寻找信号的稀疏表示。利用OMP算法可以从一组原子中选择少量的原子来逼近一个给定的信号。 在Matlab中,可以通过内置的函数实现OMP算法。使用omp函数,可以输入原子矩阵和待逼近的信号,然后输出稀疏表示的系数向量。 具体使用OMP算法的步骤如下: 1. 构建信号模型:确定信号模型,并将其表示为原子矩阵的线性组合。 2. 构建原子矩阵:根据所选的信号模型,构建原子矩阵。 3. 初始化:将系数向量初始化为零向量,设置最大迭代次数。 4. 迭代计算:循环执行以下步骤直到满足停止条件: a. 计算残差:计算当前重构信号和原始信号的残差。 b. 计算投影:将残差与原子矩阵进行内积,得到投影系数。 c. 选择最大投影:从所有的投影系数中选择最大值,并将其对应的原子添加到重构信号中。 d. 更新系数:更新系数向量,将选择的原子的系数设为相应的投影系数。 e. 更新残差:更新残差,将选择的原子从残差中减去。 5. 停止条件:迭代次数达到最大值或者残差的范数小于给定阈值。 最后,通过得到的稀疏表示系数向量,可以通过原子矩阵进行线性重构,得到对给定信号的近似表示。 需要注意的是,具体使用OMP算法时,需根据实际问题进行参数设置,并对结果进行解释和评估。此外,Matlab中还包含其他用于稀疏表示的函数,如Basis Pursuit等,可以根据具体需求选择合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值