前提
训练样例:(xk,yk),
神经网络输出:y^k=(y^k1,y^k2,…,y^kℓ)其中:y^kj=f(βj−θj)
均方误差:
Ek=12∑j=1ℓ(y^kj−ykj)2
第j个输出神经元的输入:
参数更新方式:
v←v+Δv
f(x):
f(x)=11+e−x
f(x)′:
f′(x)=−(1−e−x)−2(−e−x)=e−x(1+e−x)2=f(x)(1−f(x))
梯度下降法
举一个非常简单的例子,如求函数f(x)=x2 的最小值。
利用梯度下降的方法解题步骤如下:
1、求梯度, ∇=2x
2、向梯度相反的方向移动 x ,如下
,其中, γ 为步长。如果步长足够小,则可以保证每一次迭代都在减小,但可能导致收敛太慢,如果步长太大,则不能保证每一次迭代都减少,也不能保证收敛。
3、循环迭代步骤2,直到 x 的值变化到使得
4、此时,输出x ,这个
目标
使得均方误差
推导Δwhj
给定学习率η
按照上面的方法:
求梯度: ∇whj=∂Ek∂whj=∂Ek∂y^kj∂y^kj∂βj∂βj∂whj
其中:
∂βj∂whj=∂∑qh=1whjbh∂whj=bh
前两项表示为:
∂Ek∂y^kj∂y^kj∂βj=∂12∑ℓi=1(y^ki−yki)2∂y^kj∂y^kj∂βj=(y^kj−ykj)y^kj(1−y^kj)
定义gj=−∂Ek∂y^kj∂y^kj∂βj=y^kj(1−y^kj)(ykj−y^kj)
负梯度方向:
Δwhj=−η∇=−η∂Ek∂whj=ηgibh
推导Δθj
同样对于Δθj
求梯度: ∇θj=∂Ek∂whj=∂Ek∂y^kj∂y^kj∂θj=gj
于是得到
Δθj=−ηgj
推导Δvih
ΔvihEky^kjβjbhαh=−η∂Ek∂vih=12∑j=1ℓ(y^kj−ykj)2=f(βj−θj)=∑h=1qwhjbh=f(αh−γh)=∑i=1dvihxi
所以得到,
∂αh∂vih=xi
∂bh∂αh=bh(1−bh)
∂βj∂bh=whj
根据链式法则剩下的部分就是gj,但是因为Ek中的每一项都包含了vih所以最终的结果就是
Δvih=−η∂Ek∂vih=ηbh(1−bh)⋅xi∑j=1ℓgj⋅whj
令
eh=bh(1−bh)∑j=1ℓgjwhj
则
Δvih=ηehxi
推导Δγh
Δγh=−ηeh