第五章 神经网络
神经网络是一种“黑箱模型”,不是因为它无法用数学的方法定义,而是难以以一种非常通俗易懂的方式解释出它的具体操作。在计算机领域只需将它视为包含了多个参数的数学模型,这个模型包含若干个函数组成。
5.1 神经元模型
神经元模型是神经网络中最基本的成分,当神经元超过了某一个”阈值“电位,就会产生”兴奋“,进而会向其他神经元发送化学物质。1943年,有人将上述过程抽象为下图中的简单模型,即”M-P神经元模型“:
在这个模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些信号通过带权重的连接进行传递,并将接收到的输入总值和阈值进行比较,然后通过**函数处理以产生神经元的输出。
理想中的**函数为如图5.2(a)所示的阶跃函数,即将输入值映射为0或1,但由于阶跃函数具有不连续、不光滑等不太好的性质,实际上常用的为如图5.2(b)的Sigmoid函数,它把可能在较大范围内变化的输入值挤压到(0,1)区间内,有时也成为“挤压函数”。
5.2 感知机与多层网络
5.2.1 感知机
感知机由2层神经元组成,输入层接收到信号传给输出层,输出层为一个M-P神经元,也称为“阈值-逻辑单元”。
感知机能够实现逻辑与、或、非运算,使用y=f(∑iwixi−θ),设f为图5.2中的阶跃函数,则有:
- “与”运算:令w1=w2=1,θ=2,则y=f(1⋅x1+1⋅x2−2),仅在x1=x2=1时,y=1.
- “或”运算:令w1=w2=1,θ=0.5,则y=f(1⋅x1+1⋅x2−0.5),仅在x1或x2=1时,y=1.
- “非”运算(x1取非):令w1=−0.6,w2=0,θ=0.5,则y=f(−0.6⋅x1+0⋅x2+0.5),在x1=1时,y=0,在x1=0时,y=1.
更一般地,给定训练数据集,权重wi(i=1,2,...,n) 以及阈值可通过学习得到。其中阈值θ可看作一个固定输入xn+1为 -1.0 的"哑结点" (dummy node) ,其对应的连接权重 wn+1。
设每次感知机的输出为y^,则感知机权重的调整过程为:
wi←wi+Δwi
Δwi=η(y−y^)xi
其中η∈(0,1),成为学习率(learning rate)。若感知机对训练数据预测正确,则感知机相应权重不发生变化,否则将根据测物的程度进行权重的调整。
感知机只有输出层神经元进行**函数处理,即只拥有一层功能神经元,学习能力有限,只能去处理上述与、或、非之类的线性可分模型。若模型并不能线性分割,则感知机的学习过程会产生震荡,不能求得合适解,例如感知机不能求解“异或”这种非线性问题。
5.2.2 多层网络
要解决非线性可分问题,需考虑使用多层功能神经元,例如利用两层感知机就能解决异或问题,输入层与输出层之间有一个隐含层。
更一般的,常见的神经网络是形如下图的层级结构,这种结构也成位多层前馈神经网络:
5.3 误差逆传播算法
多层网络的学习能力比单层感知机强得多,想训练多层网络,感知机的学习规则是不够的,需要更强大的学习算法。其中误差逆传播算法(BP)是其中最杰出的代表。
给定训练集D={(x1,y1),(x2,y2),⋯,(xm,ym)},上述神经网络中含d个输入,q个隐含层单元,l个输出层单元,设第j个输出层的阈值为θj,第h个隐含层单元阈值为γh,输入层第i个神经元和第h个隐含层神经元的连接权重为vih,第h个隐含层神经单元和第j个输出层神经元连接的权重为whj。
则第h个隐含层神经元的输入为:αh=∑i=1dvihxi
第j个输出神经元的输入为:βj=∑h=11whjbh
假设隐含层和输出层的神经元都是用Sigmoid函数,对于训练样例(xk,yk),输出为y^k=(y^1k,y^2k,⋯,y^lk)。
第k个样例,第j个输出层的单元输出结果为:
y^jk=f(βj−θj)
此样例的均方误差为:
Ek=21∑j=1l(y^jk−yjk)2
BP是一个迭代学习算法,每一轮迭代中任意参数v的更新估计式为:
v←v+Δv
权重更新推导过程:(以调整隐藏层到输出层的连接权重whj为例来进行推导)
BP算法的策略是以目标的负方向梯度对参数进行调整,给定学习率η和上述的误差Ek,则调整的大小可以表示为:
Δwhj=−η∂whj∂Ek
其中梯度可以表示为:
∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj
其中whj先直接影响βj,在经过**函数影响y^jk,最后影响了Ek。
根据βj的定义,首先可以得到:
∂whj∂βj=bh
接着令gj=−∂y^jk∂Ek⋅∂βj∂y^jk表示负梯度的前两项,推导可得:
gi=∂y^jk∂Ek⋅∂βj∂y^jk=−(y^jk−yjk)⋅f′(βj−θj)=y^jk(1−y^jk)(yjk−y^jk)
带入gi得,调整权重的大小为:
Δwhj=ηgibh
类似的可以得到调整其它参数的大小为:
Δθj=−ηgi
Δvih=ηehxi
Δγh=−ηeh
其中eh为:
eh=∂bh∂Ek⋅∂αh∂bh=−j=1∑l∂βj∂Ek⋅∂bh∂βj⋅f′(αh−γh)=j=1∑lwhjgif′(αh−γh)=bh(1−bh)j=1∑lwhjgi
对于每个样例,BP算法先将数据提供给输入层神经元,根据输出计算误差。再将误差逆向传播给隐含层神经网络并根据梯度更新参数,最后根据隐含层的向前传播至输入层并根据梯度项跟新相应参数。
BP算法的目标是最小化训练集D上的累积误差:
E=m1∑k=1mEk
正是由于其强大的表示能力, BP 神经网络经常遭遇过拟合,其训练误差持续降低,但测试误差却可能上升。
有两种策略常用来缓解BP网络的过拟合:
第 一种策略是"早停" (early stopping):
将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值;验证集用来估计误差,若训练集误差降低,但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
第二种策略是"正则化" (regularization) :
基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。
E=λm1∑k=1mEk+(1−λ)∑iwi2