高维数据稀疏表示-什么是字典学习(过完备词典)

稀疏表示理论背景

稀疏表示的由来

稀疏表示理论最早是在研究信号处理应用中发展起来得。其基础是多尺度分析理论,在此基础上拓展,形成了相应的理论框架。主要是通过少数的稀疏稀疏来逼近原信号。近年来,稀疏表示的方法主要应用于信号处理和图像处理方面。

啥是高维数据

这里,信号和图像都可以看成是一个数据对象在所有维度上的信号,本文统称为“数据对象”。因此,不难看出,这种数据对象必然是一个高维的。何为高维?举个栗子:比如对一个10个人的薪酬表的描述。表的行是这10个人;列是这是个人的属性,比如姓名、生日、职位、基本工资、工作年限等一共20个属性。那么这个表就是一个10*20的表。每个人即一个数据对象,是20维的。那么问题来了,比如一个人脸的图像(简化一下,不是自拍照,是一寸照。再简化一下,比如这个图像要求的清晰度不高,只要32*32像素的)。那么可以理解成这个图像有32*32个点,每个点有一个表示颜色的数值(再进一步简化,这是黑白照片,每个点的数值表示的是这个点的深浅程度)。那么这个照片就有32*32=1024个点。如果我们有这要的照片100张,每张照片都有1024个表示颜色深浅的数据,那么就得到了一个100*1024的表。这明显是高维了。而真正的图像中,不可能是32*32的吧(难道都是小霸王里的超级玛丽?),要再是彩色的,俺的苍天啊,这个维度就更高了,高到我不想举例子了。在实际工作的研究领域,一般20维以上即可以算作是高维数据了。

高维数据的特点

  1. 维灾:这个名字太贴切了,维度增加带来的灾难。这个概念是一个叫Bellman的大叔在1962年提出来的(好像不是大叔,大爷都不止了)。意思是对于一个多变量的函数,随着维数的增加(变量的增加),这样高维数据问题往往转化成为了一个多变量的优化求解问题。但由于维度太高了,传统的算法就不行了。比如,每个数据对象理解成一个点,我们一般用k近邻的概念时要找到距离这个点最近的k个点。但是在高维空间中,最近的点和最远的点的距离随维度增加而减小,换句话说,维度增加让远点和近点的差异减小,趋近于零。所以单纯用传统办法解决高维问题,没戏了。(这里的例子实际上是高维聚类问题)
  2. 未标记(UNlabeled):所谓标记,就是上面薪酬例子里的,姓名,年龄,这些东西,可以理解成为属性(即维度)的名字。但是现在这个社会,得到的大量数据往往是未标记的。比如,一个电子商务系统中,大量不同商品评论的情感分析,如果去手动标注情感倾向(比如积极的、消极的、中立的)十分不现实,要有愚公移山的精神,那就是子子孙孙无穷匮也。但这样显然没有意义。这里针对有标记的数据的学习过程一般称为有监督的学习,无标记的,自然就是无监督(Unsupervised)学习了。而我们说的字典学习往往就是应用在无监督学习中。

稀疏表示原理

看了高维数据的特点,怎么解决呢?既然维度高了,那就降下来吧。所以问题就变成了,把高维数据用低维度表示的问题了。线代学得好的人这里可能想到了什么正交啊,基的问题。差不多就是这个意思。举个不是特别贴切的例子(实在找不到好理解的例子了),比如,你现在的位置怎么表述,东经多少,北纬多少,海拔多少,三个维度。但其实换一个说法,宿舍床上。一个维度。为啥维度变了呢,参照物变了,也就是所谓的基变了。这里的字典就是这个基。

学术一点表示,字典就是一个矩阵(n维),这个矩阵比之前的的高维数据(k维)的维度要低得多,即n<<k。数据对象y可以表示成y=a1 x1 +…+an xn
其中,xi 是字典的列向量,ai 是一个线性组合,称之为稀疏表示系数,整个ai 构成的矩阵记为A。所谓的稀疏表示,其实就是求这个系数的矩阵。为了实现稀疏,系数矩阵的很多值,都是0。

过完备字典完成稀疏表示理论计算理论

稀疏求解的方法

通常情况下,构造一个目标函数,让A里面尽可能的出现0,这里就出现了L0 范数的概念。但开始一般用L_ 1范数求解。为什么L1 可以实现稀疏化,这要从L0 (0范数)说起。L0 范数表示向量中非零元素的个数。Donoho证明了在完备字典构成的矩阵满足一定条件的时候,L0范数优化问题是有解的,而且是唯一解。这样的稀疏化即直观(稀疏就是让变量变少,也就是很多变量的系数变为0),同时还有唯一解,为什么不用L0 范数,一定要o用L1 呢。很简单,L0 范数优化求解问题(L0 范数最小化)属于NP难问题(靠,又是这个东西)。当然,你可以用BMP,ROMP,OMP,OOMP,ORMP,SAMP等去求解L0 问题。然而,这些求解方法都是基于贪婪算法,效率很低,也就是说了等于白说。这时候,人类出大招了,Tao和Candes提出了近似求解该问题的方案,证明了在求解向量足够稀疏的情况下,L0 范数优化问题等价于L1 范数优化问题,即各向量分量绝对值之和。这样在多项式时间内就可以求解了,方法很多,不赘述了。
总之,L1 主要追求了稀疏化,对应的作为牺牲,则不能保证数据对象接近稀疏表示y,也就是说数据对象间的局部结构特征没有完全地体现出来。这也是LASSO的一个不足之处。

字典构造的方法

字典的构造式寻找稀疏表示下的最优基的构造,既要满足系数条件唯一性的约束,同时要得到更精确和更稀疏的表示。主要有两类方法:基于数据模型的字典构造和基于学习算法的字典构造。

  1. 基于基于数据模型的字典构:运用组合正交基等一定的数学分析工具得到稀疏字典,主要包括小波变化、离散余弦变换等等,好多。
  2. 基于学习算法的字典构造:这个方法是使用机器学习相关技术从训练样本集中学习字典,包括了稀疏表示和字典更新,也就是说,字典可以自动更新,找到更好的解了。听起来更加高大上了吧。经典的基于学习的构建方法是是产生K-means聚类过程的K-SVD算法,K-SVD通过迭代策略结合稀疏表示的更新一更新字典,从而加速收敛。

总结

说白了,什么是字典学习呢?主要是在面对高维数据时,我们不好处理,所以变成好处理的低维数据(降维)。在这个过程中,有基于模型的方法,也有更高大上的基于学习的方法,这时候需要字典学习。这个工作的主要就是求一个稀疏表示系数矩阵A。

posted @ 2016-01-28 16:18  Tavion  阅读(15409)  评论(0编辑  收藏  举报