胡侃“深度学习”

来源:互联网 发布:java数组去重复元素 编辑:程序博客网 时间:2024/05/18 01:02
本来在阳光明媚的周末午后一边品茶一边写程序感觉岁月挺静好的,结果看到一条关于“深度学习”的微薄不知怎么就好像突然被挠了痒处,开始坐立不安无心继续编程了,不释放点什么感觉不会恢复平静了,于是索性写个博客胡侃些至此为止我对深度学习的一些浅薄的看法吧。

作为一个机器学习领域的无名晚辈,我对以机器学习泰斗Geoffrey Hinton(www.cs.toronto.edu/~hinton/)领衔以及一大批著名学者(包括Andrew Ng、Yoshua Bengio、Yann LeCun等)拥护的深度学习研究持怀疑态度或许是我自己功力不够没能领悟到深度学习的精髓——这当然有很大可能,因为最成功的两家搜索引擎Google和Baidu相继把深度学习提升到战略方向已经从实际应用角度证明了深度学习的成功。微博上以及一些技术博客上也是一片追捧深度学习的欢呼声——我脑子里不自觉地一直在闪现着“自由领导人民”那幅著名的油画以及盘旋着“Do you hear the people sing”那首激昂的乐曲——感觉整个机器学习界就要被革命了,整个领域以及不明真相的群众都为之热血沸腾。不过我还是想记录下一些现在的想法,留着以后自己反思。

首先用我自己的理解用白话科普下表示学习(Representation Learning),深度学习(Deep Learning)是基于深度神经网络进行表示学习的一个途径。这里不引经据典(因为我懒得查资料),也不涉及技术细节,但如果要看懂需要对线性代数以及信号处理中的“基(Basis)”有些概念。以数字图像为例,一个图像可以拉伸成一个N维向量,每一维对应一个像素,其值为像素的深浅。那么其实这个图像已经自然地完成了一次在D维坐标系上的“表示”,每一维的读数就是表示系数。我们把这个向量投影到另一组正交基上后(相当于以坐标系原点无节操旋转坐标系),得到的坐标值就是在新的基上的“表示”。如果恰好这个新的坐标系的前几个轴和一组向量(点云)分布最广的几个方向一致,那么这个就是伟大的“主成分分析(PCA)”。可以认为PCA就是最简单的“表示学习”,它使用的是数据分布上variance最大的几个方向上的基来表示原始数据,这和基于深度神经网络的表示学习有一个重要的不同之处:前者的基是正交的完备的,后者的基不正交且过完备(overcomplete)——正是由于过完备的这个特性,“表示学习”的目的就是想让每一个基都具有一定程度的语义,而最终表示的数据是由多个具有语义的基加权重构出来的,比如我们希望用于人脸表示的基分别对应眼睛、鼻子、嘴等(具有语义的表示学习的代表性工作“Learning the parts of objects by non-negative matrix factorization” 最早在1999年发表于《自然》杂志)。好了,说这些只是为了在后面说“深度学习”和这些简单的表示学习方法其实没有什么本质区别。

深度学习之所以叫作“深度学习”是因为它是一个具有多层架构的神经网络。相对于deep model,在深度学习之前的机器学习模型都被统称为shallow model(包括Boltzmann Machine、Autoencoder、Self-Organizing Map、SVM等),因为它们在输入层和输出层之间没有中间层——输入层的数据加权一下一次性投影就直接得到结果了。那么,为什么把几个Boltzmann Machine或者几个Autoencoder叠加在一起,把下一层的输出作为上一层的输入,然后最上一层的输出就能神奇地变好了呢?为什么这个叠加在一起后都没有一个全局的优化方法,只能一层一层地分别调参数的机器被神化了呢?为什么这个简化的神经网络(没有同层连接没有侧抑制)在传统神经网络沉寂了三四十年后王者归来呢?

首先我不觉得深度神经网络是机器学习领域的一场革命,然后我对于其目前的成功有如下几点看法:

(1)多层表示的确可以自下而上更好地抽象出比单层更具有语义的过完备基。这个观点说好理解也好理解,如果单层无监督学习学出来的基作为superpixel进一步进行无监督学习,那么上一层学出来的基随便想想应该也会比其输入更具有语义一些(因为表示学习其实是个basis可以overlap的聚类)。但是说不好理解也不好理解,为什么每上去一层一定能保证其学出来的“representation”会比下一层好呢?深度学习没有对这个结论进行理论支持(也可能是因为我没看到这方面的文献)。但很多文献中的实验结果可视化出来的确实验证明了越上层的“表示”看起来越具备语义性。所以说,深度结构应该是深度学习这么成功的原因之一。

(2)深度学习本身是一种表示学习,换句话说就是模板学习,只要模板足够多(覆盖一切角度平移缩放光线的可能性),多到测试样本总是落在训练样本支撑的凸包(convex hull)中,那么测试就一定能成功。如今的大数据成全了深度学习的训练样本;如今的分布式计算支持了深度学习所需的大规模计算能力。深度学习是一个特征工程(它是一个工程,它不是科学,个人意见),它依赖的是大规模训练数据和超级计算能力——这就是为什么企业界对深度学习这么追捧的原因,因为企业有的是数据和设备。

(3)最后一点就是风水轮流转,该轮到Hinton火一把的时候了(其实Hinton也挺不容易的,感兴趣的可以去看一下他的八卦)。其实无论什么方法效果都差不多的,只是看哪个门派是那几年的武林盟主而已,机器学习领域内的人能深切地体会到这点。我等无名小辈既无门派也无族谱,反正哪个火了就读点那个门派的文献跟风做。我曾惊叹于统计学习理论的精妙,也曾折服于贝叶斯方法的优雅;我几年前就感觉深度学习即将笑傲江湖,可读了相关文献就是毫无感觉;每隔一段时间也会翻看一些最新的深度学习的论文——为什么所有的论文里面都是画了几个像汉诺塔一样的图然后一个公式都没有实验一大堆——感觉以后都不会再爱了……

最后总结一下:深度学习再怎么深,它也只是把输入的样本在原来的空间中重新组织一下换个更具表达能力的基表示出来,和PCA没有本质区别;即使这个基它的确能表示一些眼睛鼻子的眉目,但是它永远无法超越训练样本中的知识。深度学习并不是机器学习领域的革命,成就深度学习的是天时(大数据)地利(超级计算能力)人和(风水转到了Hinton)而并不是它本身的革命性突破。最为深度学习欢欣鼓舞的一定是工程师,因为他们看重的是否work,能处理海量的数据跑出来效果还不错就是王道;科学家一定是持怀疑态度的,因为深度学习到现在为止还没有理论支持为什么它叠加了几个Boltzmann机每层调调参数效果就好,那些模拟真实神经网络的科学家对此一定很无语(我读博时实验室有一个挺著名的搞神经网络的兼职教授,他搞的我觉得才是真正的神经网络,虽然我当时也没产生兴趣);而艺术家就更不会相信深度学习了——如果深度学习能抽取高层语义特征还需要艺术家干什么?为什么艺术家寥寥几笔就能勾勒出一副漫画人像而且你一看就能认出来画的是谁?那是因为艺术家能写意。我其实觉得要做一个好的机器视觉研究者需要有一定的艺术细胞,只有这样才能想象出抽取哪些特征来表示特定的事物,但是由于数学表达的局限性,并不是所有想象得出的语义特征都能形式化表达出来的。举个最简单的例子,艺术表示手法的话只要有一对猫耳朵的轮廓(唯一需要的特征),无论是真实的猫的照片、还是剪影、还是动画形象、还是几个线条的猫的品牌Logo,都能识别出那是一只猫。可是如果要用深度学习的话,要把Google Image里所有的猫的图片都学习一下学习出representation,才能识别出来,而且这只是因为测试样本已经被训练样本覆盖了,k-NN罢了……
原创粉丝点击