稀疏学习的任务主要是有稀疏编码、字典学习。html
关于稀疏信号的定义,这里给出4种形式:严格k稀疏信号,可压缩信号、稀疏基下的稀疏信号、稀疏基下的可压缩信号算法
(1)严格k稀疏信号:考虑一个有限长信号x属于Rn,若是x至多有k个非零元素,即||x||0≤k,则称信号x为严格k稀疏信号,函数
(2)可压缩信号:若是信号能够用一个k稀疏向量来近似表示,则称这样的信号为可压缩信号。工具
(3)稀疏基下的稀疏信号:大多数的状况下,信号自己不是稀疏的,可是在某些合适的基或变换下稀疏。学习
(4)稀疏基下的可压缩信号:给定值k,信号x的最佳近似k项元素的线性组合,称为x的最佳k稀疏近似。优化
字典的概念:字典A来自信号空间的元素集,其线性组合能够表示或近似表示信号。在咱们常常关注的稀疏学习任务中,每每要求字典是一个扁矩阵,也称为过完备字典。ui
稀疏编码的概念来自于神经生物学。生物学家提出,哺乳类动物在长期的进化中,生成了可以快速,准确,低代价地表示天然图像的视觉神经方面的能力。咱们直观地能够想象,咱们的眼睛每看到的一副画面都是上亿像素的,而每一副图像咱们都只用不多的代价重建与存储。咱们把它叫作稀疏编码,即Sparse Coding.编码
稀疏编码的目的是在大量的数据集中,选取很小部分做为元素来重建新的数据。spa
稀疏编码难点之一是其最优化目标函数的求解。.net
哺乳动物初级视觉皮层简单细胞的感觉野的三个性质:1.空间局部化、方向性和带通特性。
X为一个n为特征向量,能够是一个小波信号,能够是一副图片等。
D为标准化的基础矩阵,由组成元素的基本原子构成,也称为字典。在信号中能够是不一样频率的波形,在图像中能够是构成图像的基本边,角。
X能够由D中和少许原子线性组合而成,及其表示系数为稀疏。以下:
引出稀疏表示的两个基本要求,1是尽量与原特征类似,2是系数为稀疏。
上式中,咱们要求p>m,根据线性代数的知识咱们知道,稀疏系数有无穷多组的解。根据稀疏的条件,咱们能够在全部的可行解中挑出非零元素最少的解,也就是知足稀疏性。因而获得以下的数学模型:
若是再考虑噪声的话,就获得以下的模型:
目标函数中为零范数约束,是NP难题。
有人作了一个证实,在必定条件下,上述的最优化问题有惟一的解。
Terry tao又证实了,在知足必定条件下,零范数问题与一范数问题是等价的。因而上述模型转化为:
基于上面的思想,还有各类不一样版本的数学模型。
咱们知道上式为非凸优化问题,经常使用的解法有:greedy algorithm,表明有Matching Pursuit, Orthogonal Matching Pursuit
上式为解不等式约束问题,经常使用的解法:LASSO
再写成拉格朗日乘子的形式,若是已知lambda,可用soft thresholding方法,常见的还有coordinate descent, Bregman Iteration等;
若是未知lambda,则用Homotopy.
1、
一、先来考虑这么一个问题:有一个信号y,假设它是mx1维的,咱们如今获得了n个这样的信号(设m<<n),也可理解为对这个信号采样n次,因而咱们把这n个不一样的信号从1到n依次排开,就获得了一个m行n列的矩阵,记为A吧。
二、而后呢,假设咱们获得了一个新的y,也就是又从新采了一次样获得y,咱们能够认为矩阵A里面的信号能够估计这个新的信号y,由于A就是由不一样的采样信号y组成嘛,固然能够估计这个新的信号y啦。那么如何估计呢,咱们不妨设这个新的信号y是矩阵A中各个信号的线性组合,不必定所有包含A中的每一列哈,能够理解为A中有太多的这样的信号啦,咱们只去其中的一部分就能够足够来表示这个新信号y啦。
三、有了上面这些信息,咱们能够表示为这样:给定一个mx1的向量y,和一个mxn的矩阵A,求一个nx1向量x,使得方程y=Ax。简单吧。
这个问题很简单的一个求法就是两边同时乘以A’(A的转置),而后移项(就是两边在同时乘以A’A的逆。因而获得方程的解x=(ATA)-1AT。。(这个方法获得的是最小二乘解,应该是这么叫吧。。为何是这样网上查一下吧)。
咱们用这种放法获得解x固然是正确的。但是颇有可能x向量中n个元素全是非0的。因此稀疏的问题就来了,咱们能不能求一个x使它中的元素非零项的个数不多呢,好比过我要求里面只有n个里面只有5个非零项(这就是x的稀疏性为5)?就是咱们想要获得A中最能表示新信号y的那几项,其余的均可以省略掉。为何非要找最少的表示啊,多麻烦,直接解出来x就很差了啊,多简单。我这么想的,若是让你完成一件事情,须要借不少东西完成它,我能够只像10我的借就能够完成,也能够像100我的借东西完成,你说哪个办法好呢?用最少的资源得到最大的收益哈。
四、怎么能够解得这个最少非零项的解呢?有问题,就必然有解决方法。咱们不用上面的直接解方程了。咱们来看另外一种方法:
咱们这样来想,有一组向量OA,OB,OC,OD。咱们想要OA用OB,OC,OD来表示,学过线性代数的人都知道怎么解吧。咱们换另外一种方法来解,如图示
(1)先找到OA到其余各个向量的投影,找投影最大的那个对应的向量,图途中OB,那么OA就可表示成OA=OM+MA,这里为向量运算。假设OM和OB的长度比值为a,则OA=a(OB)+MA。嘿嘿有第一个表示向量了。若是求出来MA就搞定了,MA成为残差吧
(2)MA怎么求呢。和第一步同样,咱们找MA到各个向量的投影,取最大的向量,比好比说找到了OC如右图,一样MA能够表示为MA=OA’=ON+NA’,假设ON和OC的长度比为b则MA=b(OC)+NA’.只要再求NA’就能够了。
(3)这样一直循环求,能够证实残差是不断减少的(证实网上去找吧),
(4)不妨让残差小于必定阈值的时候,咱们就认为他们能够表示这个未知向量了。这样求出来了就是一个非零项较少的表示啦。好比咱们认为这步骤(1)(2)两次就能够知足条件啦,如图3中蓝色线所示,那么咱们最终获得向量为OM+ON+NA’=OM+MO’+O’A=OA,若是忽略残差NA’(由于她很小),则有OA≈OO’=a(OB)+b(OC)。因而OA就能够用OB和OC表示了,而不是所有向量来表示OA。这就是稀疏表示了。
上面的这个算法就是追踪算法,即MP算法。简单吧。MP算法不是最优的,获得的解是次优解。由于上图中,第(2)部的时候获得的NA’残差只是和OC垂直的,并不和OB垂直,这里是二维的状况。至于为何请看它的改进算法OMP算法,就是每一次找最类似向量的时候要将已经找到的向量正交化。
矩阵A称为字典(大概是由于就像查字典同样吧,我想找到y,我就查这个A字典,A是一个过完备基,就是它包含了y像要的信息,那么怎么查呢,就是找到x,不妨认为x是页码吧,因此只要给定了这个字典A,而后再给咱们一个字y,咱们就能查到y在A中的页码x)。
2、
若是认为稀疏表示就是上面介绍的那么简单,那就过小看所遇到的问题了。还有一个问题,如何创建这个词典A呢,绝对不是上面举得那个简单的例子经过简单的采样获得。例如:给定一组信号y,如何创建一个词典A,使得每个信号y的表示x最稀疏。这就是字典学习问题。
这个问题的解决办法目前有三种
efficient sparsecoding algorithm NIPS 06;
K-SVD tsp 06;
Online dictionary learning for sparse coding,ICML 09 & JMLR 10
http://blog.sina.com.cn/s/blog_6d0e97bb01015wol.html
http://blog.csdn.net/aichipmunk/article/details/8823537
http://blog.csdn.net/AIchipmunk/article/details/8712384
http://blog.csdn.net/scucj/article/details/7467955
稀疏编码的通常最优化公式为:
其中的零范数为非凸优化。那么如何解这么一个非凸优化问题呢?其中一个经常使用的解法就是MP算法。
MP算法是一种贪心算法(greedy),每次迭代选取与当前样本残差最接近的原子,直至残差知足必定条件。
首先解决两个问题,怎么定义“最接近原子”,怎么计算残差?
选择最接近残差的原子:MP里定义用向量内积原子与残差的距离,咱们用R表示残差,di表示原子,则:
Max[Dist(R,di)]=max[<R,di>];
残差更新:R=R-<R,di>I;继续选择下一个,直至收敛;
须要注意的是,MP算法中要求字典原子||di||=1,上面的公式才成立。
咱们用二维空间上的向量来表示,用以下的图来表述上面的过程:
上图中d1,d2,d3表示归一化的原子,红色向量r表示当前残差;
进过内积计算,<r,d3>最大,因而r分解为d3方向以及垂直于d3方向的两个向量(<r,d3>d3及r-<r,d3>d3),把d3方向的份量(<r,d3>d3)加入到已经求得的重构项中,那么绿色向量(r-<r,d3>d3)变为新的残差。
再一轮迭代获得以下:
R往d1方向投影分解,绿色向量成为新的残差。
从上面的向量图咱们能够清楚地看出,k+1的残差Rk+1是k步残差Rk的份量。根据直角三角形斜边大于直角边,|Rk+1|<=|Rk|,则算法收敛。
1.上面也讲过,字典的原子是归一化的,也就是||di||=1,由于咱们选取max<R,di>时,若是di长度不统一,不能得出最好的投影。
2.若是咱们的字典只有两个向量d1,d2,那么MP算法会在这两个向量间交叉迭代投影,也就是f=a1d1+a2d2+a3d1+a4d2+…..;也就是以前投影过的原子方向,以后还有可能投影。换句话说,MP的方向选择不是最优的,是次优的。
以下图:
这也是其改进版本OMP要改进的地方。
也就是正交的MP算法。
MP算法的次最优性来源其残差只与当前投影方向垂直,这样在接下来的投影中,颇有可能会再次投影到原来的方向。
因而,在投影时,若是咱们使得残差Rk+1与x1-xk+1的全部向量垂直,则能够克服这个问题,以下:
假设咱们已经获得了第k步的最优解:
咱们要继续更新到第k+1步,目标是获得:
须要注意的是,咱们下一步更新时,以前原子的系数 也要更新,不然不能知足约束。
因而咱们须要求得如何更新以前原子系数 ,以及如何求得下一个投影方向 。
一样根据勾股定理,获得以下:
因而算法收敛。
最后,贴一个sparse求解的工具包,里面包含了MP,OMP算法的代码:
http://spams-devel.gforge.inria.fr/
参考文献:
http://lear.inrialpes.fr/people/mairal/tutorial_iccv09/
http://blog.csdn.net/scucj/article/details/7467955