总的来说,神经网络的演进一直沿着“模块化+层次化”的方向,不断把多个承担相对简单任务的模块组合起来。BP网络是感知器的层次化,深度学习网络则是多个BP网络的层次化——当然后来也出现了多种非BP网络的深度层次化。Hinton最近提出的“胶囊”(capsule)网络就是要进一步模块化。
层次化并不仅仅是网络的拓扑叠加,更重要的是学习算法的升级,例如,仅仅简单地加深层次会导致BP网络的梯度消失问题。
从本质上说,深度学习网络可以比经典的BP网络处理更复杂的任务,在于它的模块性,使得它可以对复杂问题“分而治之”(Divide and Conquer)。无论是多层前馈网络,还是循环神经网络,都体现了这种模块性。
因为我们处理的问题(图像、语音、文字)往往都有天然的模块性,学习网络的模块性若匹配了问题本身内在的模块性,就能取得较好的效果。
这可以看成一种连接主义的“动态规划”,把原来全连接网络的训练这种单一决策过程,变成了多阶段决策过程。例如,在多层卷积网络对图像的处理中,会出现不同的层次依次“抽取”出了从基础特征到高层次模式的现象,每一层基于上一层的输入,就相当于很多子任务可以被重用了。所以这种方法也被称为表示学习(representation learning)方法。
这样的好处是多方面的,既极大提高了学习收敛的速度(解决了维度灾难),又可避免那些“不合理”的局部最优解(因为它们在模块性匹配的过程中被自然淘汰了)。
从这个角度去理解,深度神经网络是“优雅”的,在于它简洁而美。一个“好”的模型,通常是“优雅”的。这很难说是什么科学道理,但是就和物理学一样,一个计算机科学的算法,如果它是技术主干道上的一个有深远价值的东西,往往它是“美”的,简洁的,没有太多补丁。
一个糟糕的算法,就好像托勒密的“本轮”,一个补丁套一个补丁,或者像在发明抗生素之前治疗肺结核的方法,神秘而不可解释。如之前给BP网络和Hopfield网络打各种补丁的方法,前置各种ad-hoc不变形特征提取器,用进化算法训练网络结构,用局部定位消除虚假吸引子,等等,数学上都高深莫测,但是效果并不好。现在回头看,那些模型都很“丑”。
深度学习把学习分层,不是个数学问题,而是个知识重用问题,每一层自然分解出不同等级的特征,从底层特征到高层特征。这样一下子就把原来打几千种补丁的必要性都消灭了。这个架构是优雅的,也同时解决了收敛速度问题和泛化问题,因为它触及了问题的本质。一个优雅的方法,基本的原理往往是特别好懂的,不用看公式就能懂。
这里多说一句,深度学习模型现在大火的同时,也出现了很多对它的“本轮”补丁,如一些几百层的神经网络模型。搞得这么复杂的模型,通常在技术演进上是旁支。