M-P神经元模型:神经元接收n个来自其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值与神经元阈值进行比较,通过激活函数处理产生神经元的输出.
常见的激活函数:
感知机:由两层神经元组成,输入层接收外界输入信号,传递给输出层,输出层是M-P神经元(阈值逻辑单元),感知机能容易的实现逻辑运算(使用阶跃函数作为激活函数),一般处理线性可分的问题,也就是可以用一个线性超平面分割的问题。
对于非线性问题,使用多层功能神经元,输入层与输出层之间的一层神经元被称为隐层或者隐含层,隐含层和输出层的的神经元都是拥有激活函数的功能神经元。每层神经元只与下一层神经元相连,神经元之间不存在同层相连,也不存在跨层相连,这样的神经网络被称为多层前馈神经网络。
神经网络学习过程中,根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值,神经网络学到的东西蕴藏在连接权和阈值当中。
误差逆传播(error BackPropagation,简称BP),用于训练多层神经网络。BP算法不仅可以用于多层前馈神经网络,也可以用于其他类型的神经网络。BP网络一般指用BP算法训练多层前馈神经网络。
如图,BP网络(图片来源于《机器学习》–周志华)
网络中需要确定的参数: ( d + 1 + l ) × q + l (d + 1 + l)\times q + l (d+1+l)×q+l
个人理解为:
对某一样本 ( x k , y k ) (x_k, y_k) (xk,yk),假定神经网络输出为 y ^ = ( y 1 k ^ , y 2 k ^ , . . . , y l k ^ ) \hat{y} = (\hat{y_1^k}, \hat{y_2^k}, ..., \hat{y^k_l}) y^=(y1k^,y2k^,...,ylk^)
其中 y j k ^ = f ( β j − θ j ) \hat{y_j^k} = f(\beta_j-\theta_j) yjk^=f(βj−θj),这里面 β j = ∑ h = 1 q w h j b h \beta_j = \sum_{h = 1}^qw_{hj}b_h βj=∑h=1qwhjbh( b h b_h bh表示隐层的第 h h h个功能神经元, θ j \theta_j θj表示输出层的阈值)
在样本上的均方误差(针对样本 k k k来说,样本 k k k的均方误差): E k = 1 2 ∑ j = 1 l ( y j k ^ − y j k ) 2 E_k = \frac{1}{2}\sum_{j = 1}^l{(\hat{y_j^k }- y_j^k)}^2 Ek=21∑j=1l(yjk^−yjk)2
对于任意参数 v v v更新的估计式为: v ← v + Δ v v \leftarrow v + \Delta v v←v+Δv
也就是说任意参数的更新需要基于上述的公式,这里的 Δ v \Delta v Δv的计算根据梯度下降策略, Δ v = − η ∂ E ∂ v \Delta v = -\eta\frac{\partial E }{\partial v} Δv=−η∂v∂E
书中给出的为 Δ w h j = − η ∂ E k ∂ w h j \Delta w_{hj} = -\eta\frac{\partial E_k}{\partial w_{hj}} Δwhj=−η∂whj∂Ek
这里面的 w h j w_{hj} whj表示,从隐层中第 h h h个(例子中一共 q q q个)神经元到输出层中第 j j j个(例子中一个 l l l个)神经元的连接权。
可以知道,神经网络通过梯度下降对参数进行调整,梯度下降的目标函数也就是均方误差,对这个目标函数求梯度,也就是在各个方向上求偏导。
∂ E k ∂ w h j = ∂ E k ∂ y j k ^ ⋅ ∂ y j k ^ ∂ β j ⋅ ∂ β j ∂ w h j \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}} ∂whj∂Ek=∂yjk^∂Ek⋅∂βj∂yjk^⋅∂whj∂βj其中 ∂ β j ∂ w h j = b h \frac{\partial \beta_j}{\partial w_{hj}} = b_h ∂whj∂βj=bh( b h b_h bh表示隐层的第h个神经元)
书中这里提到了sigmoid函数的一个性质: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x) = f(x)(1-f(x)) f′(x)=f(x)(1−f(x)),这里就不去证明了,上述也给出了sigmoid函数。这里提到sigmoid是因为 y j k ^ \hat{y_j^k} yjk^是网络中sigmoid函数的结果,sigmoid函数需要什么样的函数变量也在文章的最开始提到了,即神经元的总输入减神经元的阈值。
根据 ∂ E k ∂ w h j = ∂ E k ∂ y j k ^ ⋅ ∂ y j k ^ ∂ β j ⋅ ∂ β j ∂ w h j \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}} ∂whj∂Ek=∂yjk^∂Ek⋅∂βj∂yjk^⋅∂whj∂βj等式右边的前两项,创建一个新的变量
g j = − ∂ E k ∂ y j k ^ ⋅ ∂ y j k ^ ∂ β j = − ( y j k ^ − y j k ) f ′ ( β j − θ j ) = y j k ^ ( 1 − y j k ^ ) ( y j k − y j k ^ ) g_j = -\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)f'(\beta_j - \theta_j)=\hat{y_j^k}(1 - \hat{y_j^k})(y_j^k-\hat{y_j^k}) gj=−∂yjk^∂Ek⋅∂βj∂yjk^=−(yjk^−yjk)f′(βj−θj)=yjk^(1−yjk^)(yjk−yjk^)
前两项的值进行推导之后和 y j k ^ \hat{y_j^k} yjk^与 y j k y_j^k yjk有关。
最后 Δ w h j = η g i b h \Delta w_{hj} = \eta g_i b_h Δwhj=ηgibh Δ θ j = − η g j \Delta \theta_j = -\eta g_j Δθj=−ηgj Δ v i h = η e h x i \Delta v_{ih} = \eta e_h x_i Δvih=ηehxi Δ γ h = − η e h \Delta \gamma_h = -\eta e_h Δγh=−ηeh
这里面的 e h = − ∂ E k ∂ b h ⋅ ∂ b h ∂ α h = − ∑ j = 1 l ∂ E k ∂ β j ⋅ ∂ β j ∂ b n f ′ ( α h − γ h ) = ∑ j = 1 l w h j g j f ′ ( α h − γ h ) = b n ( 1 − b n ) ∑ j = 1 l w h j g j 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_n}f'(\alpha_h - \gamma_h)=\sum_{j=1}^l w_{hj}g_j f'(\alpha_h - \gamma_h)=b_n(1-b_n)\sum_{j=1}^l w_{hj}g_j eh=−∂bh∂Ek⋅∂αh∂bh=−j=1∑l∂βj∂Ek⋅∂bn∂βjf′(αh−γh)=j=1∑lwhjgjf′(αh−γh)=bn(1−bn)j=1∑lwhjgj这里的 α h = ∑ i = 1 d v i h x i \alpha_h = \sum_{i = 1}^d v_{ih} x_i αh=∑i=1dvihxi,表示隐层的第 h h h个神经元的输入,中间参数中 ∂ β j ∂ b n = w h j \frac{\partial \beta_j}{\partial b_n} = w_{hj} ∂bn∂βj=whj。
这一部分求出了所有参数的 Δ \Delta Δ,也就是变化量。变化量由 η \eta η(学习率或者步长)与对应参数上的梯度的反方向乘积决定。
BP算法的目标是最小化训练集上的累计误差。
多隐层的神经网络,多隐层神经网络难以直接用经典算法进行训练,无监督逐层训练时多隐层网络训练的有效手段,其基本思想是每次训练一层隐节点,称为预训练,全部预训练完后,在对整个网络进行微调训练。
节省训练开销的策略,权共享,即让一组神经元使用相同的连接权,这个策略在卷积神经网络中发挥了重要作用。