转自:彬彬有礼. 压缩感知中的lp球:p范数最优化为什么总会导致一个稀疏的解的原因

http://blog.csdn.net/jbb0523/article/details/40268943

题目:  压缩感知中的lp球:p范数最优化为什么总会导致一个稀疏的解的原因

================问题的引出================

压缩感知中为了解释0范数或1范数最优化为什么总会导致一个稀疏解的原因在解释时经常使用lp球与直线的交点去解释,下面论文中就是这样子解释的:

戴琼海,付长军,季向阳.压缩感知研究[J].计算机学报,2011,34(3):425-434.

在上面论文的第2小节压缩感知原理中就是这样子解释的,为了完整说明问题,这里将论文中的部分内容截图出来:

上面这幅图2让我看了好久也没看明白,在博主Rachel_Zhang博客的文章“压缩感知进阶——有关稀疏矩阵”中,也提到了类似的内容:

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

怎样恢复原信号?

我们已知所选择的最稀疏的x即x中非零元素最少的,即x的零范数最小的(向量的零范数即为其稀疏度sparsity)。

然而,求x=argmin||x||0使得x满足Ax=b的一个子问题是一个NP完全问题,需要在S个compoments中选出1,2,...,n个,看能从中选出最少多少个,满足Ax=b,这样,对于每一个n都有排列组合C(S,n)种方法,显然不可行。所以我们想能不能换个什么方法来恢复信号,自然而然的,我们想到了最小平方法。具体见下图Fig B。

Fig B. L2范数下寻找满足Ax=b的x,发现有一定偏差。

symmerize:

2-methods to methods:
1. L2-norm: quick, efficient, but get the wrong answer
2. L0-norm: precise but impractical

否定了L0范数和L2范数之后,我们想到取中——用L1范数(Basis pursuit的思路)。
===============================

Basis Pursuit & RIP

Basis pursuit的方法在2000年由Candes-Romberg-Tao, Donoho提出,其基本思路见下图(以二维为例):

从图中可见,L1-norm比L2-norm靠谱多了。从上图中可见,x*处,x的L1-norm最小,这样推广到n维向量x,就是其每一维的值的绝对值的和。

下面这个Theorem就是对L1-norm方案(Basis pursuit)可行性的定理(具体证明看论文吧):大概是说,原始S-sparse的信号f为n维,从其中随机抽取m维分量,如果想利用Basis pursuit的方法把这m维向量重建出n维原始信号,只要满足m>cS*log(n)即可,其中c是一个常数。

以上都是采用lp球去解释问题,似乎看起来很直观,但我看了好久都没看明白,今天琢磨之后终于想明白了,接着往下说……

================正文================

在论文“戴琼海,付长军,季向阳.压缩感知研究[J].计算机学报,2011,34(3):425-434.”(以下简称论文)中看了几遍没看明白,但看了Rachel_Zhang博客的文章“压缩感知进阶——有关稀疏矩阵”,虽然也没有看明白,但我得到了一个重要信息,这个图是在2维的情况下画出来的,下面就来详细解释一下。

下面的叙述以论文为框架,即如果提到式(1)指的是论文中的式(1)。

假定式(1)中的信号f是二维的,设f=[x1,x2]T(列向量,没法写转置,只能用T表示了),f是稀疏的,经过φ变换得到y,y的维数肯定比x要小,这里假定了f是2维的,那么y只能是1维了(也就是一个数了,维数不能再低了),φ是一个1乘2的矩阵,设φ=[φ1,φ2]。

通过观测我们得到了y(也就是说y是一个已知常量),我们现在关心的是如果根据y重构稀疏信号f,文章中的式(2)和式(3)说明了这个问题:可以求0范数和p范数最优化的问题来重构信号f,为什么总可以得到f呢?然后作者就用lp球直观形象的解释了这个问题,得出结论:p<=1时可以得到唯一解(与直线交点在坐标轴上),p>1时的解将不准确(Rachel_Zhang的博客中用p=2说明了这时得到的结果是不准确的)。

我有几点不明白:一是为什么论文中的式(1)是一条直线?二是图2中的横轴和纵轴到底代表着什么?三是图2中的那些不同p值时是圆(p=2)还是菱形(p=1)是怎么得来的?四是两者的交点为什么一定要在坐标轴上?下面一一解答……

先说第一个问题:为什么论文中的式(1)是一条直线?

对于式(1)来说,在恢复信号f时,观测值y是一个常数(一维,即一个常数),矩阵φ是已知的,即它的两个元素φ1和φ2是两个常数,我们现在想要得到的是信号f中的两个元素x1和x2,因此把式(1)矩阵的形式写开即得到y=φ1*x1+φ2*x2,注意这里面x1和x2是未知量,其它三个量是常数,这时候如果以x1为横轴,以x2为纵轴(二维空间就是这样子的),则式(1)的轨迹(可能取的值)画出来就是一条直线(一次函数嘛,只是一定要注意这时谁是常量谁是变量就OK了)。

到此为止第二个问题也就明白了,横轴是x1,纵轴是x2,即f的两个待求解的元素,不要被常见的x-y直角坐标系搞混了就行了。

再来说第三个问题:那些不同p值时是圆(p=2)还是菱形(p=1)是怎么得来的?

搞明白了第一个和第二个问题,第三个问题就简单了,对于式(3)来说(式(2)是一样子的),求解的x1和x2即要满足min ||f||p成立,也要受约束于式(1) y=φf,即也要保证式(1)成立,如要在一个坐标系中同时画出式(1)曲线和min||f||p曲线,要取它们的交点才行。p范数的公式论文里说了,这里因为信号是二维的,只有两个元素,因此||f||p=((x1)^p+(x2)^p)^(1/p),前面说了x1和x2是待恢复信号f的两个元素,对于||f||p取不同值的时候,它在坐标系中的曲线是不一样子的,当取到某一个值的时候,它就与式(1)直线相交了(如图2所示一共画了||f||p取两种值的情况,实线时不相交,虚线时就有交点了),当然这个并不是一对一的函数,所以画起来比较麻烦,可以四个象限分开来画就容易理解了,比如只考虑第一象限的曲线形状,这时因为x1>0,x2>0所以理解起来容易多了,求出两者之间的表达式,在matlab里很容易画出来的,其它三个象限就是一个对称的关系罢了。

  1. %lp sphere  
  2. clear all;close all;clc;  
  3. p=0.5;c1=0.5;c2=1;  
  4. x1=linspace(0,c1,100);  
  5. y1=(c1^p-x1.^p).^(1/p);  
  6. x2=linspace(0,c2,100);  
  7. y2=(c2^p-x2.^p).^(1/p);  
  8. figure(1);  
  9. subplot(221);plot(x1,y1,x2,y2);title('p=0.5');  
  10. xlim([0 1.1]);  
  11. ylim([0 1.1]);  
  12. p=1.0;c1=0.5;c2=1;  
  13. x1=linspace(0,c1,100);  
  14. y1=(c1^p-x1.^p).^(1/p);  
  15. x2=linspace(0,c2,100);  
  16. y2=(c2^p-x2.^p).^(1/p);  
  17. figure(1);  
  18. subplot(222);plot(x1,y1,x2,y2);title('p=1.0');  
  19. xlim([0 1.1]);  
  20. ylim([0 1.1]);  
  21. p=1.5;c1=0.5;c2=1;  
  22. x1=linspace(0,c1,100);  
  23. y1=(c1^p-x1.^p).^(1/p);  
  24. x2=linspace(0,c2,100);  
  25. y2=(c2^p-x2.^p).^(1/p);  
  26. figure(1);  
  27. subplot(223);plot(x1,y1,x2,y2);title('p=1.5');  
  28. xlim([0 1.1]);  
  29. ylim([0 1.1]);  
  30. p=2.0;c1=0.5;c2=1;  
  31. x1=linspace(0,c1,100);  
  32. y1=(c1^p-x1.^p).^(1/p);  
  33. x2=linspace(0,c2,100);  
  34. y2=(c2^p-x2.^p).^(1/p);  
  35. figure(1);  
  36. subplot(224);plot(x1,y1,x2,y2);title('p=2.0');  
  37. xlim([0 1.1]);  
  38. ylim([0 1.1]);  

在Matlab中运行以上m文件即可画出如下图形,这里分别取范数||f||p等于0.5和1两种情况(即代码中的c1和c2),p分别取了0.5,1.0,1.5,2.0四种特殊情况:

可以看出所得到的图与论文的图2中的第一象限是一致的。

最后说一下第四个问题:两者的交点为什么一定要在坐标轴上?

这个问题很关键,说难也难,但说简单也很简单。

为什么在坐标轴上呢?首先这里要回到最早的前提:信号f是稀疏的,p无论为多少,它最终都是要等价到0范数的情况,这是最原始重构方法所在,但对于这里一个只有两维的信号来说,最稀疏能是什么情况呢?不能稀疏到一个非零元素都没有吧,所以最稀疏也只就是两个元素x1,x2一个为零,一个非零。这时候明白了吧,x1和x2一个为零一个非零,那么把它的坐标在坐标系里画出来是哪里呢?也就是直线与横轴或纵轴的交点了嘛,至于说到底是与横轴还是与纵轴的交点,这个很重要么?只要交换一下x1和x2两个轴,点不就变了么?论文中是以纵轴交点为例来说明问题的,其实你以与横轴的交点为例来说明问题也是可以的啊。

至此,有关lp球的问题就全部说完了,初识压缩感知,有很多很多不明白的问题,认识也是越来越深的,不妥之处敬请多多包含!

压缩感知中的lp球:p范数最优化为什么总会导致一个稀疏的解的原因的更多相关文章

  1. 压缩感知中的数学知识:稀疏、范数、符号arg min

    转自:http://blog.csdn.net/jbb0523/article/details/40262629 1.稀疏:什么是K稀疏呢? 在压缩感知里经常提到 "K稀疏" 的概 ...

  2. 浅谈压缩感知(二十):OMP与压缩感知

    主要内容: OMP在稀疏分解与压缩感知中的异同 压缩感知通过OMP重构信号的唯一性 一.OMP在稀疏分解与压缩感知中的异同 .稀疏分解要解决的问题是在冗余字典(超完备字典)A中选出k列,用这k列的线性 ...

  3. [综] Sparse Representation 稀疏表示 压缩感知

    稀疏表示 分为 2个过程:1. 获得字典(训练优化字典:直接给出字典),其中字典学习又分为2个步骤:Sparse Coding和Dictionary Update:2. 用得到超完备字典后,对测试数据 ...

  4. 浅谈压缩感知(十六):感知矩阵之RIP

    在压缩感知中,总是看到"矩阵满足RIP"之类的字眼,没错,这是一个压缩感知绕不开的术语,有限等距性质(Restricted Isometry Property, RIP). 注意: ...

  5. 浅谈压缩感知(十五):感知矩阵之spark常数

    在压缩感知中,有一些用来评价感知矩阵(非测量矩阵)的指标,如常见的RIP等,除了RIP之外,spark常数也能够用来衡量能否成为合适的感知矩阵. 0.相关概念与符号 1.零空间条件NULL Space ...

  6. 压缩感知(CS)

    总结一下最近看的压缩感知(Compressed Sensiong)的内容. 它是在采样过程中完成了数据压缩的过程. 一. 将模拟信号转换为计算机能够处理的数字信号,必然要经过采样的过程.问题在于,应该 ...

  7. 浅谈压缩感知(三十一):压缩感知重构算法之定点连续法FPC

    主要内容: FPC的算法流程 FPC的MATLAB实现 一维信号的实验与结果 基于凸优化的重构算法 基于凸优化的压缩感知重构算法. 约束的凸优化问题: 去约束的凸优化问题: 在压缩感知中,J函数和H函 ...

  8. 浅谈压缩感知(三十):压缩感知重构算法之L1最小二乘

    主要内容: l1_ls的算法流程 l1_ls的MATLAB实现 一维信号的实验与结果 前言 前面所介绍的算法都是在匹配追踪算法MP基础上延伸的贪心算法,从本节开始,介绍基于凸优化的压缩感知重构算法. ...

  9. 浅谈压缩感知(六):TVAL3

    这一节主要介绍一下压缩感知中的一种基于全变分正则化的重建算法——TVAL3. 主要内容: TVAL3概要 压缩感知方法 TVAL3算法 快速哈达玛变换 实验结果 总结 1.TVAL3概要 全称: To ...

随机推荐

  1. linux下用OCI库访问oracle数据库返回错误Cannot create OCI environment!;

    linux下链接oracle数据库,直接用OCI库函数OCI_Initialize初始化返回Oracle ErrorString:Cannot create OCI environment! 原因是缺 ...

  2. [2015-10-11]常用git命令

    从vs2013开始,vs已经对git的操作提供了很好的支持,但是重度使用时还是会遇到很多抽风的时候,在此记录一些常用命令. 分支操作 查看所有远程分支 git branch -r 查看本地分支 git ...

  3. 如何编写更好的SQL查询:终极指南-第二部分

    上一篇文章中,我们学习了 SQL 查询是如何执行的以及在编写 SQL 查询语句时需要注意的地方. 下面,我进一步学习查询方法以及查询优化. 基于集合和程序的方法进行查询 反向模型中隐含的事实是,建立查 ...

  4. 前端开发【第2篇:CSS】

    鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...

  5. Linux安装解压缩版jdk

    #解压到指定目录 tar zxvf ./jdk-7-Linux-i586.tar.gz  -C /usr/lib/jvm 配置环境变量 #vi  /etc/profile 编辑文件,在最后添加: ex ...

  6. (一)Builder(建造者)模式

    我们一般在构建javabean的对象的时候通常有三种写法: 1.直接通过构造函数传参的方式设置属性,这种方法如果属性过多的话会让构造函数十分臃肿,而且不能灵活的选择只设置某些参数. 2.采用重叠构造区 ...

  7. spring cloud认识

    Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状 ...

  8. mysql添加外键约束变为索引

    今天有位自己填上一坑:mysql储存引擎 原因就是数据库表引擎为:MyISAM,建立主外键关系需要是InnoDB: 解决方案:alter  table table_name1  engine=inno ...

  9. javascript 学习笔记 -- js获取本地文件信息

    JavaScript是跑在浏览器中,所以对于JavaScript读取本地文件不想c++ 和 java那样easy.网上有很多关于读取本地文件的方法,许多是用ActiveXObject控件.Active ...

  10. 软件工程(GZSD2015)第二次作业小结

    第二次作业,从4月7号开始,陆续开始提交作业.根据同学们提交的作业报告,相比第一次作业,已经有了巨大改变,大家开始有了完整的实践,对那些抽象的名词也开始有了直观的感受,这很好.然后有一些普遍存在的问题 ...