【西瓜书-读书笔记】第五章 神经网络

第五章 神经网络

神经网络是一种“黑箱模型”,不是因为它无法用数学的方法定义,而是难以以一种非常通俗易懂的方式解释出它的具体操作。在计算机领域只需将它视为包含了多个参数的数学模型,这个模型包含若干个函数组成。

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θ)y=f(\sum_i w_ix_i-\theta ),设f为图5.2中的阶跃函数,则有:

  • “与”运算:令w1=w2=1,θ=2w_1=w_2=1,\theta =2,则y=f(1x1+1x22)y=f(1\cdot x_1 +1\cdot x_2 -2),仅在x1=x2=1x_1=x_2=1时,y=1.
  • “或”运算:令w1=w2=1,θ=0.5w_1=w_2=1,\theta =0.5,则y=f(1x1+1x20.5)y=f(1\cdot x_1 +1\cdot x_2 -0.5),仅在x1x_1x2=1x_2=1时,y=1.
  • “非”运算(x1x_1取非):令w1=0.6w2=0,θ=0.5w_1=-0.6,w_2=0,\theta =0.5,则y=f(0.6x1+0x2+0.5)y=f(-0.6\cdot x_1 +0\cdot x_2 +0.5),在x1=1x_1=1时,y=0,在x1=0x_1=0时,y=1.

更一般地,给定训练数据集,权重wi(i=12...n)w_i(i=1, 2,..., n) 以及阈值可通过学习得到。其中阈值θ\theta可看作一个固定输入xn+1x_{n+1}为 -1.0 的"哑结点" (dummy node) ,其对应的连接权重 wn+1w_{n+1}

设每次感知机的输出为y^\hat {y},则感知机权重的调整过程为:
wiwi+Δwiw_i \leftarrow w_i + \Delta w_i
Δwi=η(yy^)xi\Delta w_i=\eta (y-\hat{y})x_i
其中η(0,1)\eta \in (0,1),成为学习率(learning rate)。若感知机对训练数据预测正确,则感知机相应权重不发生变化,否则将根据测物的程度进行权重的调整。

感知机只有输出层神经元进行**函数处理,即只拥有一层功能神经元,学习能力有限,只能去处理上述与、或、非之类的线性可分模型。若模型并不能线性分割,则感知机的学习过程会产生震荡,不能求得合适解,例如感知机不能求解“异或”这种非线性问题。

5.2.2 多层网络

要解决非线性可分问题,需考虑使用多层功能神经元,例如利用两层感知机就能解决异或问题,输入层与输出层之间有一个隐含层。

【西瓜书-读书笔记】第五章 神经网络
更一般的,常见的神经网络是形如下图的层级结构,这种结构也成位多层前馈神经网络:

【西瓜书-读书笔记】第五章 神经网络

5.3 误差逆传播算法

多层网络的学习能力比单层感知机强得多,想训练多层网络,感知机的学习规则是不够的,需要更强大的学习算法。其中误差逆传播算法(BP)是其中最杰出的代表。

【西瓜书-读书笔记】第五章 神经网络

给定训练集D={(x1,y1),(x2,y2), ,(xm,ym)}D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\},上述神经网络中含d个输入,q个隐含层单元,l个输出层单元,设第j个输出层的阈值为θj\theta _j,第h个隐含层单元阈值为γh\gamma _h,输入层第i个神经元和第h个隐含层神经元的连接权重为vihv_{ih},第h个隐含层神经单元和第j个输出层神经元连接的权重为whjw_{hj}

则第h个隐含层神经元的输入为:αh=i=1dvihxi\alpha _h =\sum _{i=1}^{d} v_{ih}x_i
第j个输出神经元的输入为:βj=h=11whjbh\beta _j = \sum _{h=1}^{1}w_{hj}b_h

假设隐含层和输出层的神经元都是用Sigmoid函数,对于训练样例(xk,yk)(x_k,y_k),输出为y^k=(y^1k,y^2k, ,y^lk)\hat{y}_k=(\hat{y}_1^k,\hat{y}_2^k,\cdots,\hat{y}_l^k)
第k个样例,第j个输出层的单元输出结果为:
y^jk=f(βjθj)\hat{y}_j^k=f(\beta _j -\theta _j)

此样例的均方误差为:
Ek=12j=1l(y^jkyjk)2E_k=\frac{1}{2}\sum _{j=1}^{l}(\hat{y}_j^k-y_j^k)^2

BP是一个迭代学习算法,每一轮迭代中任意参数vv的更新估计式为:
vv+Δvv\leftarrow v + \Delta v

权重更新推导过程:(以调整隐藏层到输出层的连接权重whjw_{hj}为例来进行推导)

BP算法的策略是以目标的负方向梯度对参数进行调整,给定学习率η\eta和上述的误差EkE_k,则调整的大小可以表示为:
Δwhj=ηEkwhj\Delta w_{hj}=-\eta \frac{\partial E_k}{\partial w_{hj}}

其中梯度可以表示为:
Ekwhj=Eky^jky^jkβjβjwhj\frac{\partial E_k}{\partial w_{hj}}=\frac{\partial E_k}{\partial \hat{y}_j^k} \cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_{hj}}

其中whjw_{hj}先直接影响βj\beta_j,在经过**函数影响y^jk\hat{y}_j^k,最后影响了EkE_k

根据βj\beta_j的定义,首先可以得到:
βjwhj=bh\frac{\partial \beta_j}{\partial w_{hj}}=b_h

接着令gj=Eky^jky^jkβjg_j=-\frac{\partial E_k}{\partial \hat{y}_j^k} \cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j}表示负梯度的前两项,推导可得:
gi=Eky^jky^jkβj=(y^jkyjk)f(βjθj)=y^jk(1y^jk)(yjky^jk)\begin{aligned} g_i &=\frac{\partial E_k}{\partial \hat{y}_j^k} \cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j} \\ &=-(\hat{y}_j^k-y_j^k)\cdot f^{'}(\beta _j- \theta _j)\\ &=\hat{y}_j^k(1-\hat{y}_j^k)(y_j^k-\hat{y}_j^k) \end{aligned}

带入gig_i得,调整权重的大小为:
Δwhj=ηgibh\Delta w_{hj}=\eta g_i b_h

类似的可以得到调整其它参数的大小为:
Δθj=ηgi\Delta \theta _j=-\eta g_i
Δvih=ηehxi\Delta v_{ih}=\eta e_h x_i
Δγh=ηeh\Delta \gamma _h=- \eta e_h

其中ehe_h为:
eh=Ekbhbhαh=j=1lEkβjβjbhf(αhγh)=j=1lwhjgif(αhγh)=bh(1bh)j=1lwhjgi\begin{aligned} e_h &=\frac{\partial E_k}{\partial b_h} \cdot \frac{\partial b_h}{\partial \alpha_h} \\ &=-\sum_{j=1}^l \frac{\partial E_k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial b_h}\cdot f^{'}(\alpha_h- \gamma _h)\\ &=\sum_{j=1}^l w_{hj} g_i f^{'}(\alpha_h- \gamma _h) \\ &=b_h(1-b_h)\sum_{j=1}^l w_{hj} g_i \end{aligned}

对于每个样例,BP算法先将数据提供给输入层神经元,根据输出计算误差。再将误差逆向传播给隐含层神经网络并根据梯度更新参数,最后根据隐含层的向前传播至输入层并根据梯度项跟新相应参数。

BP算法的目标是最小化训练集D上的累积误差:

E=1mk=1mEkE=\frac {1}{m}\sum _{k=1}^m E_k

正是由于其强大的表示能力, BP 神经网络经常遭遇过拟合,其训练误差持续降低,但测试误差却可能上升。

有两种策略常用来缓解BP网络的过拟合:
第 一种策略是"早停" (early stopping):
将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值;验证集用来估计误差,若训练集误差降低,但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。

第二种策略是"正则化" (regularization) :
基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。
E=λ1mk=1mEk+(1λ)iwi2E=\lambda \frac {1}{m}\sum _{k=1}^m E_k+ (1-\lambda)\sum_iw_i^2