对“深度学习”的一些理解

时间:2023-01-29 17:45:00

 今天在深度学习的一个交流群里提出了这样一个问题:

    对于深度学习,我有一件事情一直都不太理解,深度学习的一个核心观点是:“很多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画”。我不明白的是,从理论上来说,单隐层神经网络只要隐层神经节数量足够多,也能够拟合出任何复杂的函数,那么多隐层网络与单隐层网络相比,优势究竟何在呢?

   这算是研究深度学习以来,一直感到困扰的问题,也算是关于“深度学习”的一个本质问题。

    晚上临睡觉之前,又开始琢磨这个问题,想着想着,突然觉得自己想通了,很多东西感觉豁然开朗,兴奋得爬起来写下这些文字。

    首先,单隐层也好,多隐层也好,只要神经节的数量足够多,就具有足够强的函数拟合能力,能够刻画几乎任意复杂的特征结构——这已经是一个被证明了的关于神经网络的基本结论。

    但是,理论上可以“任意复杂“,并不意味着现实中就可以真的实现。

    因为训练BP神经网络时,都是通过各种最优化方法,让神经网络逐步逼近训练数据,但梯度下降法也好,共轭梯度法也好,拟牛顿法也好,都存在一个最根本的致命弱点:陷入局部最优。这个”局部最优“使得BP神经网络对一些复杂结构的拟合,只能”浅尝而止“,很快就停步不前了。

  在Ufldl的深度学习教程中,介绍梯度下降法时有这样一段文字:

    (代价函数)是一个非凸函数,梯度下降法很可能会收敛到局部最优解;但是在实际应用中,梯度下降法通常能得到令人满意的结果。

   这段文字很可能对于”深度学习“学习者来说是误导,因为在”深度学习“的奠基之时,多层神经网络陷入局部最优的问题就被列为重点攻克的对象之一(或之首),所以可以说摆脱局部最优就是”深度学习“的初衷(之一)。

   也就是说,多层神经网络可以拟合任意复杂结构,这只是一种”潜力“,由于存在局部最优,使得拟合能力停留在浅层的最优值上,要想把潜力挖掘出来,需要一系列的技巧。

  通常可以实现全局最优的方法是用启发式的搜索方法,例如遗传算法,退火算法,理论上可以证明,当退火算法的退火速度足够慢时,可以达到全局最优。但是这些搜索算法每次只能更改少数几个参数,更改范围也很小,当需要训练的参数达到几万乃至几百万时,搜索效率可想而知,因此这条道路是走不通的。

  即便无法实现全局最优,也可以在最优化过程中加入一些随机扰动,从而摆脱局部最优。例如一边训练一边在训练数据中加入噪音,再如采用随机梯度下降法或在线训练法,再如在梯度下降时只随机的更新一部分参数等等。

 加入这些方法,固然能够摆脱一些浅层的局部最优,挖掘出更深刻的结构,但是如果有的”局部最优“的深度足够深,以至于加入足够大的扰动都无法摆脱,那么要挖掘出更深层次的结构,就需要特别的技巧了,这也就是”深度学习“要做的事情。

  ——BP神经网络诞生之后引发了一阵人工智能的热潮,但BP网络很快就被冷落,boosting,SVM,隐马,最大熵等等浅层学习算法成为人工智能的主流,我想可能是因为这些算法不像多层BP网络那样容易陷入局部最优。

  ”深度学习“的本质,我觉得就是通过一系列的技巧,修筑一条通往BP神经网络的更深层次最优解的道路,其中最主要的一个方法就是逐层训练,用这种方式把多层网络一步一步推进到一个”深渊“的边缘,让多层网络一开始进行整体调优的时候,就已经站在一个远远摆脱了浅层最优的位置。

  我猜测”深度学习“未必能找到全局最优,但它能够把多层网络刻画结构的潜力挖掘到以往最优化技巧无法达到的深度,这或许是“深度学习”这个名称的深意之一。未来也许还能找到更好的技巧,把神经网络的潜力挖得更深。


PS:

下面是昨天看到的一个图,比较深度学习算法和其他算法的拟合能力,最初看到这副图时,我的想法是:是什么原因导致不同算法,经过充分训练之后,拟合结果会有很大差异。现在我想我找到答案了,应该是由两方面决定的:一是拟合的方法本身是否有足够丰富的表达能力(比如同样是双层神经网络,隐层神经节越多,表达的能力越丰富),二是训练方法本身是否有足够的能力将算法的拟合潜力挖掘出来。

对“深度学习”的一些理解