压缩感知重构算法--MMP-BF和MMP-DF算法及其改进思路

2023-11-03 19:40

本文主要是介绍压缩感知重构算法--MMP-BF和MMP-DF算法及其改进思路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MMP算法提出的文献:

Multipath Matching Pursuit----IEEE TRANSACTIONS ON INFORMATION THEORY
文章的作者也是gOMP算法的作者,现在在复旦大学任教

主要贡献:文章将传统贪婪算法的原子选择问题建模为组合树的搜索问题,为原子选择提供了新的思路。

在传统贪婪算法的改进中,不外乎以下几个方面:调整原子选择策略,调整原子相似性的准则等

其中调整原子选择策略又分为以下几种:

每次迭代选择单个原子(OMP),每次迭代选择多个原子(如:选择K个的CoSaMP算法,选择2K个的SP算法,选择S个的gOMP算法),通过阈值门限来进行原子选择,这样保证了每次迭代原子选择的灵活性,阈值则更贴近于观测矩阵和残差的内积变化规律(StOMP算法,SWOMP算法,TOMP算法等等)

在原子选择过程中,许多单向执行的算法可以结合CoSaMP算法中的回溯思想,来进一步提高重构精度。

在有步长设置的算法中,如何设置步长大小,是固定步长还是变步长,如果变的话,该如何改变,到目前为止均有学者做研究。而以上提到的算法都有一个共同的问题,就是只有一个候选集,单个候选集的原子选择模式会使得问题陷入局部最优解。而设置多个候选集则增大了搜索空间,提高了原子被正确选择的概率。这也是MMP算法的核心思想所在。

在论文中,作者提出了两种算法:MMP-DF和MMP-BF,分别是基于广度优先和深度优先的搜索策略。

所谓基于广度优先的多路径匹配追踪算法MMP-BF,顾名思义,我们在每次迭代的过程中,都有选出不同的原子放入多个候选集中,就如多叉数一样,基于根节点,每次迭代分出多少个子节点,可以人为设定。

上图展示了OMP算法和MMP算法的区别所在,在左图的OMP算法中,我们第一次选择出次序为2的原子,基于此,我们又选择出次序为1的原子,以此类推,当迭代次数为3的时候,我们会选出次序为2,1,4的三个原子放入支撑集中。

而对于MMP-BF算法来说,第一次选出了两个原子,分别为2和4,我们将其放入到两个不同的候选集中。第二次迭代的时候,我们以原子2为基础,选出了1和5,放入不同的候选集中,以原子4为基础,选出了1和5,放入到不同的候选集中。这样,我们在第二次迭代中就产生了4个包含不同原子的候选集,重复上述步骤,直到达到稀疏度K为止。

上图为MMP-BF的算法步骤,从算法步骤可以看出,当迭代停止的时候,算法会产中很多候选集,每个候选集中的原子数均为K个,我们会在所有候选集中选出残差最小的一个作为我们最终的支撑集,这比单个候选集的原子选择模式精度更高。

但是上述算法有个很大的问题,就是随着迭代次数的增加,产生的候选集是指数增加的,即使每个节点产生两个子节点,当K比较大的时候,迭代停止时我们拥有的候选集个数是2^K个,这个数量级的计算复杂度在实际中显然不适用。

为了解决上述问题,作者提出了基于深度优先的MMP-DF算法

算法操作图如上图所示,我们先对一个候选集进行原子填充,填充的顺序遵循下面的公式

 如给出L=2,K=4,则我们有16个候选集。对于第一个候选集,遵循的次序为(1,1,1,1),意思是我们在每次迭代都选出最优的原子放入候选集。而对于次序(2,1,1,1),意思是第一次迭代的时候选出次优的原子放入候选集,第二次迭代选出最优的原子放入候选集,次序中数字代表了当前迭代中所选原子是第几优的。

算法步骤如下:

基于深度优先的选择模式对于每个候选集,可以一次性的将原子选完,不进行原子的分裂和遍历。由于每次迭代所选用的内积准则未必是最优准则,同时贪婪算法所取得也是每次迭代的最优解,而不是整体最优解,所以根据次序进行原子选择的规则一定程度上可以提高获取最优解的概率。因为当前最优的原子未必是下次迭代最优的原子。

此外,为了避免计算复杂度的剧增,文章中也限制了候选集的数量,不管是MMP-DF算法还是MMP-BF算法,最大的候选集数量均设置为50。

上图仿真了无噪环境的ERR和有噪环境的MSE 

从运行时间上可以看出,MMP-DF算法相较于MMP-BF算法单次迭代的运行时间减少了很多。 

改进思路:

广度优先和深度优先的搜索策略属于比较传统的搜索策略,如何确定更优的搜索策略且更贴近于贪婪算法的计算框架是一个可以优化的方向。其次,如何进行剪枝,来减少MMP算法的计算复杂度也是值得考究的问题。可以从这两个方面入手,和之前的一些阈值策略,选择策略等结合。

这篇关于压缩感知重构算法--MMP-BF和MMP-DF算法及其改进思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/340459

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费