1. 符号定义
- 本文以单隐藏层的神经网络结构,均方误差为损失函数为例来详细推导各个参数的梯度更新。
- 给定训练集D={(x1,y1),(x2,y2),...,(xm,ym)},xi∈Rd,yi∈Rl, 即输入示例由d个属性描述,输出l维实值向量。为便于讨论图1给出了一个拥有d个输入神经元、l个输出神经元、q个隐层神经元的多层前馈网络结构,其中输出层第j个神经元的阀值用θj表示,隐层第h个神经元的阔值用γh 表示。输入层第i个神经元与隐居第h个神经元之间的连接权为vih,隐层第h个神经元与输出层第j个神经元之间的连接权为whj。
- 记隐层第h个神经元接收到的输入为αh=∑i=1dvihxi,输出层第j个神经元接收到的输入为β=∑h=1qwhjbh,其中bh为隐层第h个神经元的输出。假设隐层和输出层神经元都使用Sigmoid函数f(x)=1+e−x1。
- 对训练例(xk,yk),假定神经网络的输出为y^k=(y^1k,y^2k,...,y^lk),即
y^jk=f(βj−θj)(1)
网络在(xk,yk)上的均分误差为
Ek=21j=1∑l(y^jk−yjk)2(2)
图1 BP 络及算法中的交量符号
BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行更新。任意参数v的更新估计式为
v←v+Δv
2. 隐藏层到输出层的权重更新
本节对图1中的隐层到输出层的连接权重whj的更新进行推导。
对公式(1)的误差Ek,给定学习速率η,有权重whj的更新公式为
Δwhj=−η∂whj∂Ek(3)
根据图1可知,whj先影响到第j个输出层神经元的输入值βj,然后βj再影响到该神经元的输出值y^jk,最后y^jk影响到Ek,因此Ek对whj的偏导数可改写为
∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj(4)
根据βj的定义,显然有
∂whj∂βj=whj∂(h=1∑qwhjbh)=bh(5)
由于Sigmoid函数有一个很好的性质:
f′(x)=f(x)(1−f(x))(6)
因此根据公式(1)和(2),有
gj=−∂y^jk∂Ek⋅∂βj∂y^jk=−(y^jk−yjk)f′(βj−θj)=−(y^jk−yjk)y^jk(1−y^jk)=y^jk(1−y^jk)(yjk−y^jk)(7)
将公式(5)和(7)带入公式(4),再带入公式(3),就得到了BP算法中关于权重whj的更新公式
Δwhj=ηgjbh(8)
3. 输出层神经元阈值更新
对于输出层第j个神经元的阈值θj,它首先影响到该神经元的输出值y^jk,再影响到Ek,因此有
Δθj=−η∂θj∂Ek=−η∂y^jk∂Ek⋅∂θj∂y^jk=−η(y^jk−yjk)f′(βj−θj)=−η(y^jk−yjk)[−y^jk(1−y^jk)]=−η[y^jk(1−y^jk)(yjk−y^jk)=−ηgj(9)
4. 输入层到隐藏层的权重更新
对于输入层的第i个神经元到隐藏层的第h个神经元的权重值vih,它首先影响到隐藏层第h个神经元的输入值αh,然后αh再影响到第h个神经元的输出值bh,最后bh再影响到Ek。以下推导Ek对vih的偏导数:
∂vih∂Ek=∂bh∂Ek⋅∂αh∂bh⋅∂vih∂αh(10)
首先考虑第三项:
∂vih∂αh=xi(11)
其次考虑第一项和第二项的乘积,如公式(12)所示,先考虑第二项的导数结果:
∂bh∂Ek⋅∂αh∂bh=∂bh∂Ek⋅f′(αh+γh)=∂bh∂Ek⋅bh(1−bh)(12)
下面考虑Ek对bh的偏导数,据图1可知bh先影响到βj,然后βj影响到y^jk:
∂bh∂Ek=j=1∑l∂βj∂Ek⋅∂bh∂βj=j=1∑l(∂y^jk∂Ek⋅∂βj∂y^jk)⋅whj=−j=1∑lgjwhj(13)
将公式(13)带入(12)中有
∂bh∂Ek⋅∂αh∂bh=−bh(1−bh)⋅j=1∑lgjwhj(14)
令
eh=−∂bh∂Ek⋅∂αh∂bh=bh(1−bh)⋅j=1∑lgjwhj(15)
将公式(15)和公式(11)带入公式(10)中有
∂vih∂Ek=ehxi(16)
进一步可得
Δvih=ηehxi(17)
5. 隐藏层神经元阈值更新
对于隐藏层第h个神经元的阈值γh, 它首先影响到
∂γh∂Ek=∂bh∂Ek⋅∂γh∂bh=∂bh∂Ek⋅f′(αh+γh)=∂bh∂Ek⋅bh(1−bh)(18)
将公式(13)带入(18)有
∂γh∂Ek=−bh(1−bh)⋅j=1∑lgjwhj=−eh(19)
因此有
Δγh=−η∂γh∂Ek=ηeh(20)
本文是参考周志华《机器学习》5.3节BP神经网络内容,并进行了详细地推导。