虽然只是对生物神经网络的低水平模仿,人工神经网络却给机器学习打开了一扇全新的大门。自适应的特性让它能够灵活地更新参数,非线性则赋予它具有更加强大的表达能力。曾经的阿喀琉斯之踵——异或问题也随着隐藏层的引入迎刃而解,由原始特征重构而成的导出特征使多层感知器摆脱了对数据集线性可分的限制,呈现在神经网络前方的是大有可为的广阔天地。

神经网络最重要的正名出现在 1989 年,美国学者乔治·塞本科(George Cybenko)证明了神经网络以对数几率作为激活函数时的通用逼近定理。

简而言之,通用逼近定理(universal approximation theorem)说的是如果一个前馈神经网络(feed-forwad neural network)具有单个隐藏层,隐藏层就可以利用有限个神经元来逼近定义在实数集上的任意连续函数。

1991 年,奥地利学者库尔特·霍尔尼克(Kurt Hornik)又证明了通用逼近特性并不取决于激活函数的选择,而是由多层前馈网络自身的架构决定,这就为神经网络的性能提供了坚实的理论依据。

每一个隐藏神经元都能够生成线性的分类边界,在不同的局部选取不同的线性边界,拼接起来的就是全局层面非规则的形状,这就是通用逼近定理说明的主要问题。

虽然给出了理论的良好性质,但通用逼近定理只是一个存在性定理,它没有说明拟合复杂形状的边界到底需要多少个隐藏神经元,也没有解释要如何才能学习出这样复杂的边界。

当单个隐藏层在广度上难以实现时,一个自然的思路就是以网络结构的深度来换取广度,也就是通过增加隐藏层的数目来降低每个隐藏层中神经元的数目,这就是深度学习的起源

准确地说,深度学习(deep learning)是一类学习方法,它应用的模型架构是深度神经网络(deep neural network)。

深度神经网络是具有多个隐藏层的神经网络,也可以说是浅层神经网络的层次化(hierarchical)组合,其背后是多级的思想。如果把层次化的深度网络压扁成一个平面,得到的就是全连接的单隐藏层神经网络;反过来,深度网络也可以看成是对满足通用逼近定理的单层网络的正则化,通过削减多余的连接来提升网络的泛化性能。

层次化(hierarchicalization)其实是解决问题的一种固有思路,大到政府架构小到快递配送都能看到层次化的身影。层次化的机器学习是将一个复杂的问题分解成若干个简单的问题,再在不同的层面上对这些简单问题进行表示和学习。

从功能上看,深度神经网络通过多个隐藏层的级联实现对输入特征连续不断的非线性处理,提取和变换出了新的特征,每个层次都能够将它的输入数据转换成更加抽象一些的复合表示,这就相当于通过结构的层次化实现抽象特征的层次化。

在图像识别中,特征层次化的作用体现得最为明显。下面的这个例子来自于约书亚·本吉奥(Yoshua Bengio)等人的大作《深度学习》(Deep Learning),在识别这张图片时,理想的算法应该能够将由像素的灰度值所组成的数组输出“女人”这样的标签,识别的过程就是逐层提取模式的过程。

算法的第一层可以根据灰度的空间分布提取出诸如边缘这类在较小的几何尺度上保持不变性的低层次特征,第二层进一步从边缘的组合中抽象出角度和弧度等高级的形状特征,第三层再根据形状的组合抽象出面部和身体等器官的轮廓,最后将这些器官的轮廓组合成关于“女人”的潜在模式。

深度学习示意图(图片来自 Deep Learning,图 1.2)

除了层次化之外,深度学习的另一个主要特点是分布式,由本吉奥在深度学习的开山文献《人工智能中的深度结构学习》(Learning Deep Architectures for AI)中提出。

在前面的文章中我介绍过维度灾难:在构造局部模型时,数据维度的增加会让低维空间中数据点的近邻不再保持,新来的数据就可能找不到任何作为参考的近邻点;而在构造全局模型时,数据维度的增加又会增加模型中参数的数量,使不同自变量对因变量的贡献程度变得难以衡量,导致多元线性回归中的“罗生门”现象。

同是处理高维数据,深度学习采用了分布式表示(distributed representation),将作为整体的高维特征打散成若干个低维特征的组合。

比方说,在传统的学习框架下学习“高富帅”这个概念时,不管是全局模型还是局部模型都会把它看作一个整体,要么寻找它的近邻“白富美”,要么用一组诸如身高和财产之类的属性去拟合它。可是在分布式表示的框架下,“高富帅”这个概念被拆分成“高”、“富”、“帅”三个单独属性的组合,三个属性同时满足才能形成整体意义上的概念。

分布式表示体现了化整为零的思想,其优势是多重的。一方面,它增强了神经网络的表达能力

在分布式表示下,如果“高”、“富”、“帅”这 3 个属性各有两种取值,那么“高”与“不高”就可以用两个神经元来表示,另外两个属性也是如此,所以要描述这 3 个属性形成的所有可能的组合需要 6 个神经元,而在非分布式的局部表示(localized representation)下,3 个属性的组合需要用 23=823=8