首页 > 代码库 > 2014年总结

2014年总结

马上就进入2014年的最后一个月了,往年的这个时候已经穿羽绒服了,可是现在深圳完全察觉不到季节的变化。回首今年,从年初,也就是研一下学期开始,由于所有课都上完了,于是就专心开始看文章。

正式开始看文章差不多是2014年3、4月份的时候。刚开始我打算找一篇满足如下两个条件的文章:第一,要比较火一点的,因为这样的话,相关的研究应该比较充分,这样的话能找到的资料也就丰富一些,上手就容易一些;第二是最好要与我之前学过的东西搭上边。于是我就在IEEE transaction on Signal Processing上找到了这篇“Bayesian Compressive Sensing”,它是IEEE transaction on Signal Processing的favorite article,2008年发表的。这篇文章提到了CS,不过后来我发现,这篇文章的方法似乎仅仅是用了CS的结论:“在某些特殊情况下模0解等价与模1解”。然后整片文章就开始专注如何求模1解,也就是说这篇文章其实和CS理论没有太大关系。这篇文章使用层级先验的方法,不断的给变量加上先验,然后用EM算法求解。

当我差不多看了几天这篇文章后,我发现这篇文章几乎就是另一片文章的翻版:“Sparse Bayesian Learning and the Relevance Vector Machine”,这是Michael Tipping在2001年写的文章。到这里我就了解到了一个叫RVM的东西了。从它的名字来看,似乎和著名的SVM有不少渊源,于是我就开始看Tipping的这篇文章了(关于SVM,我以前纠结过很久它的那个Mercer定理,还写过一篇博客作为学习记录)。刚开始拿到Tipping这篇文章的时候,一共30多页!这对于一个刚开始看文章的学术小白而言,简直可以成为恐怖!这比我以前做过的最长的英文阅读不知道还要长多少倍。不过畏惧归畏惧,该看的还是要看,硬着头皮,我看的第一篇比较长的英文文献就这么看下来了。其实现在想想,几十页的英文文献也不算什么,因为英文科技文献的用词和语法结构相对简单,不像GRE那种,一句话看10遍都看不懂的。。。而且外国人写东西本来就比较啰嗦,不像有一些中国的教材,几乎就是引理定理的堆砌。我记得我本科的信息论教材,就100来页,从信源编码到信道编码各种知识全部都堆在上面了,整本书全部是定义、定理、公式,都很少看到例题,大段不带公式的文字几乎绝迹,更没有讲解啊什么的了,简直恐怖至极!然而,国外的很多教材虽然非常厚,但是很多地方都是大段的讲解,像是在听作者讲话一样,信息量的密度低很多,这样的安排就不会让读者有一种喘不过气的感觉。

言归正传,下面总结一下我对RVM的理解。我的理解应该还是有待深入的,希望读者们自己判断啦。RVM,用最简单粗暴话概括,就是“sparser than sparser”(比稀疏更稀疏 = =||),这个潜在的比较对象当然就是SVM啦。RVM主要用于回归,也可以用于分类,用于回归的主要模型是$$t_n = y(x_n;\omega)+\epsilon_n$$,其中$\{x_n,t_n\}$是input-target pairs, $\omega$是回归系数,它的分量会很稀疏,$\epsilon_n$是误差,这个模型中假定它是0均值的高斯分布:$\epsilon_n  \sim N(0,\sigma^2)$。而$y(x_n;\omega) = \sum_{i}\sum_{j}k(x_i,x_j)\omega_j$,这里不像SVM一样要求$k(\cdot,\cdot)$是正定核,因为它不要求$k(x_i,x_j)$一定可以表示成$(\Phi(x_i), \Phi(x_j))$,这一点就放宽了RVM中的核函数的选择范围,从而使得提取特征更加灵活,这是第一个优于SVM的地方,后面还有几个优于SVM的地方:比SVM更加稀疏,这是第二个优于SVM的地方;能给出回归值的置信度,这个第三个优于SVM的地方。通过给回归系数$\omega$加上Student’s t-distribution,可以使得$\omega$的各个分量,以更大的概率,等于0。我们知道:“Studuent’s t-distribution is obtained by placing a conjugate gamma prior over the precision of a univariate Gaussian distribution and then integrating out the precision variable, and it can therefore be viewed as an infinite mixture of Gaussian having the same mean but different variances”,RVM在具体实施这个学生分布的时候,不是直接给$\omega$加上学生分布,而是通过层级先验的方法,先给$\omega$加上高斯分布, with prior $\alpha$:$$p(\omega|\alpha) = N(\omega|0,\alpha^{-1})$$,然后再给这个$\alpha$加上Gamma分布:$p(\alpha) = \Gamma(\alpha;a,b)$,其中$a,b$为参数,它们就不再具有先验了,在RVM中它们一般取固定值$10^{-4}$。到了这里我们发现$\alpha$的作用不就是相当于隐变量吗,所以用EM算法来求解$\omega$应该是个不错的选择。所以我就去看了EM算法。

但是,我们回过头来看这个模型,它其实并不等价与给系数$\omega$加上$\|\|_1$模,而真正等价与加上$\|\|_1$模的应该是Laplace先验:$$p(\omega;\lambda) = \left( \frac{\lambda}{2} \right)^N \exp\left( -\lambda \sum_{i}^{N}|\omega_i| \right)$$,其中$N$是系数$\omega$的分量个数。RVM里面为啥不直接用Laplace先验而要用Student先验呢?因为Laplace先验和$\epsilon_n$的高斯先验不共轭嘛。可是后来我又找到了这篇文章:“Bayesian Compressive Sensing  Using Laplace Priors”,2010年发表在IEEE Transaction on Image Processing上的文章。本文作者通过将Laplace先验转化成层级先验,解决了与$\epsilon_n$的高斯先验不共轭的问题。在这个层级先验中,第一层是一个高斯先验:$$p(\omega|\gamma) = \prod_{i=1}^{N}N(\omega_i|0,\gamma_i)$$,其中$\gamma$可以理解为中间变量,也可以理解为隐变量。第二层是一个符合指数分布的先验$$p(\gamma_i|\lambda) = \frac{\lambda}{2} \exp \left( -\frac{\lambda\gamma_i }{2} \right), ~\gamma_i \geq 0,~\lambda\geq 0$$。这两个层级先验一求个marginal,就可以算出$\omega$是参数为$\lambda$的Laplace分布了。另外,$\lambda$还加上了一个分布,这里略过不写了。这篇使用Laplace先验的文章公式特别多,我的问题是:这些公式我都看懂了,也能自己推倒了,可是我还是不明白它干嘛要加这么多的层级先验呢?到底有什么作用,难道先验加的越多效果就越好吗?不一定吧。我想我应该没有理解到这篇文章的精髓吧,也就是有可能没看懂。

以上的这些方法都用到了EM算法,于是我去学习了EM算法。期间,我还穿插学了其他一些东西:我看了Andrew Ng的那个Stanford的机器学习的公开课;买了一本《Machine Learning in Action》,把书上的算法都自己写了一遍。看了以上这些东西后,已经6月份了。然后我就开始全身心投入GRE的复习中了,一直到8月中旬。

然后,研二的生活开始了。不变的是周围的环境,变化的是更加想要出结果的心态。唉。。。GRE过后,我又看了一篇文章:“Nonparametric Bayesian Dictionary Learning for Analysis of Noisy and Incomplete Images”,2012年的文章(其实我不是那么多天就看这一篇,而是还看了许多其他的paper,只是说这一篇是最主要的)。这一篇也是类似的去噪模型:$$t_n = \boldsymbol{D}\omega_n + \epsilon_n$$,其中$\epsilon_n$零均值高斯。它与RVM系列不同地方是在$\omega$的建模上,它给$\omega$建了这样的模型:$$\omega_n = z_n \odot s_n$$,其中$s_n \sim N(0,\sigma_s^2)$,而$z_n \sim \textrm{Bernoulli} (\boldsymbol{\pi}),~\boldsymbol{\pi} \sim \textrm{DP}(\alpha G_0)$,其中$\textrm{DP} (\alpha G_0)$是Dirichlet Process的一个采样(Dirichlet Process被称为分布上的分布,它的每一个采样都是一个分布)。这个模型这么复杂了,那怎么求解它呢?作者用的方法是Gibbs Sampling。于是我又懂了一点Gibbs Sampling的知识。由于是采用Gibbs Sampling,所以没有太多的求解算法。这个paper的Matlab在作者的website上找得到,我也照着它的code自己把这些code写了一遍。然后我又碰到了老问题:我依然不知道怎么去改进他的方法,所以看了之后依然没有结果。

然后就是Fetal ECG了,这个其实比较简单,也和前面的东西没有关联,今后可能也不打算再看这方面的东西。

自己总结一下自己的问题,就是不断的在改变的学习的点,不停的在变,虽然是学到一些东西,但是没有在这个不停学习的过程中形成自己的突破点,没有自己的研究方向。这是我的大问题!我很想确定一个自己的方向,然后就一直做直到做出一些成果出来。这里面还有一个问题需要说明,就是我为什么不自己给自己强行确定一个方向然后就坚持做下去呢?因为每当我把一个方向大致看懂之后,我就找不到突破口了。比如说RVM那个方面,“Bayesian Compressive Sensing”用RVM来做了信号去噪,我发现不了他的方法里面有哪些可以提高的地方,找来找去都找不到,于是只好换一个方向继续学习了。

到了IRACE这边后,杨老师给我布置了一些作业,这些作业里有关于EM算法的题目。通过做这些作业,我立刻感到对EM算法的理解加深了不少。看来我的问题就是:以前只是一味的去学习知识,而没有及时的运用知识,所以对知识的掌握都很皮毛。以前没有做这些关于EM算法的习题的时候,我也知道EM算法的具体步骤,但就是因为没有在实战中运用过EM算法,所以一直不能很感性的去认识它。通过做这些作业,这些作业也算是一种实战嘛,我确实对EM算法有了一些感觉了。EM算法,是通过不停的求得更好的中间变量,使得模型里面的待求解参数在这些更好的中间变量的帮助下,得到更好的参数值,然后更好的参数值又导致下一波更好的中间变量。通过这样反复的迭代,直到参数的最优解。而在这个过程中,这些中间变量,也就是隐变量,起着指导的作用。什么样的问题可以转化为EM算法可以解决的样子呢?只要这个问题可以被看作是由一个不显现出来的变量所导致的,那么几乎都可以通过EM算法有效的求解出来。

2014年总结