1.2 感知器与神经网络
学习特征变换从概念上讨论是容易的,转化为实际可操作的步骤就不太简单了。方法之一就是将特征变换参数化,然后学习参数,就相当于学习了特征变换。理解特征变换参数化需要建立在感知器(Perceptron)的基础上。
生物学上的神经元模型说的是神经元彼此相连,当神经元接受其他神经元的化学递质直至电信号超出阈值被激活的时候,会向其他神经元发送信号,每个神经元只有激活和未激活两种状态,通过这样的方式,生物似乎可以自动或者非自动地学习到某种模式。比如简单的膝跳反射,这种单一突触的通路即可完成这个反射,膝盖骨的刺激到小腿向前踢的动作,就是一个将输入转化为输出的过程,甚至不需要大脑的参与。在机器学习中,借鉴了神经元模型的感知器做了三点简化和改变:
(1)将神经元与神经元之间化学递质的传递简化为数的传递。
(2)在(1)的基础上,将神经元与神经元的可能连接(突触)处理为权重系数(Weights)没有连接就代表权重为零。
(3)在(1),(2)的基础上,把细胞体当作一个开关,所以把细胞体抽象为激活函数(Activation Function),当数值大于某个值时,函数才会输出。如图1.1,输入特征为n维,但同时也希望偏置项(Bias)可以处理一部分的噪声,所以共有n+1维的权重边,输入经过每个权重系数的乘积得到的数值,进入到细胞体,如果细胞体被激活,那么经过激活函数的值就是最后的输出。
图1.1 感知机的简单示例,Bias为偏置
令t表示激活阈值,b表示偏置,f为激活函数,感知器就可以在数学上表达为:
从表达式来看,感知器算法与logistic回归一致,并没有任何特殊的地方,本质上都是线性算法。logistic回归的权重是通过广义线性模型的假设添加,该假设要求参数函数是线性的;
而在感知器中,权重系数被看作神经元之间的边,真正的分类器是控制输出的激活函数。
正因为如此,感知器算法仍然是无法解决非线性问题,我们可以将感知器算法拓展为一个非线性算法,只需要将输入X变为ϕ(X),那么输出就会变为:
径向基函数(RBF)网络就运用了这一想法,它直接将输入通过径向基函数得到非线性转换,再对其做线性组合,本质上就是将感知器算法的输入做了非线性的预处理。在网络结构上,RBF网络多加了一层神经元来获取非线性,我们将加在输入层和输出层的中间层叫作隐层(Hidden Layer)。隐层的作用就是完成特征的非线性转换。
我们把拥有隐层的感知器叫作多层感知器(Multi Layer Perceptron),如图1.2,输出层和输出层之间插入了一个隐层来实现特征变换。于是引出了深度学习的第一个重要概念,即,只有输出层才进行分类,前面的所有层均在进行表示学习。
图1.2 多层感知器的示意图,每一个节点表示一个神经元
至此,我们就很容易看出特征变换的参数化实际上是隐层来实现的,所谓的表示学习就是对隐层参数的学习,它包括隐层的激活函数、激活函数的阈值和相关的权重边来定义,我们对这三者的学习,就是对特征变换进行学习。
事实上,多层感知器就是前馈神经网络(Feedforward Neura lNetwork)的一种,当隐层的层数大于等于2的时候,叫作深度前馈神经网络,这一概念的划分实际上来源于万能近似定理(Universal Approximation Theorem),见定理1.1。因为只要隐层的神经元数目足够多,万能近似定理总是可以发挥作用,而神经元的数目可以通过两种方式来实现,一种是扩展网络的宽度,另一种是拓展网络的深度。
定理1.1(万能近似定理) 如果神经网络具有线性输出层和具有“挤压”性质的激活函数构成的隐层,只要隐层的神经元数量足够多,该前馈神经网络总是可以近似任意的一个定义在Rd的有界闭集的连续函数(Borel可测函数)神经网络这一性质对于很多的非线性激活函数也成立。
增加深度既可以增加神经元的数目,又增加了隐层的数目,隐层越多,代表着特征变换的次数越多,因为好的特征变换往往不能一次完成,所以增加隐层的数目即拓展深度是更好的选择。