DNN反向传播推导过程

1. L L 层神经网络的前向传播:

设第 l l 层的权值矩阵为 Wl W l ,输出为 zl z l ,激活值为 al a l , 激活函数都选用 σ σ ,误差函数选择均方误差,则有如下关系:

zl=Wlal1+blal=σ(zl)J(W,b,x,y)=12||aLy||22 z l = W l a l − 1 + b l a l = σ ( z l ) J ( W , b , x , y ) = 1 2 | | a L − y | | 2 2

2. L L 层神经网络的反向传播:

对于输出层 L L 层:

J(W,b,x,y)WL==J(W,b,x,y)aLaLzLzLWL(aLy)σ(zL)(aL1)T(18)(19) (18) ∂ J ( W , b , x , y ) ∂ W L = ∂ J ( W , b , x , y ) ∂ a L ∂ a L ∂ z L ∂ z L ∂ W L (19) = ( a L − y ) ⨀ σ ′ ( z L ) ( a L − 1 ) T

J(W,b,x,y)bL==J(W,b,x,y)aLaLzLzLbL(aLy)σ(zL)(20)(21) (20) ∂ J ( W , b , x , y ) ∂ b L = ∂ J ( W , b , x , y ) ∂ a L ∂ a L ∂ z L ∂ z L ∂ b L (21) = ( a L − y ) ⨀ σ ′ ( z L )

显然 J(W,b,x,y)zL=(aLy)σ(zL) ∂ J ( W , b , x , y ) ∂ z L = ( a L − y ) ⨀ σ ′ ( z L ) ,设其为 δL δ L

则对于第 l l 层:

δl=Jzl=JzLzLzL1...zl+1zl δ l = ∂ J ∂ z l = ∂ J ∂ z L ∂ z L ∂ z L − 1 . . . ∂ z l + 1 ∂ z l

δl=δl+1zl+1zl=(Wl+1)Tδl+1σ(zl) δ l = δ l + 1 ∂ z l + 1 ∂ z l = ( W l + 1 ) T δ l + 1 ⨀ σ ′ ( z l )

则有:

J(W,b,x,y)Wl==J(W,b,x,y)zlzlWlδl(al1)T(22)(23) (22) ∂ J ( W , b , x , y ) ∂ W l = ∂ J ( W , b , x , y ) ∂ z l ∂ z l ∂ W l (23) = δ l ( a l − 1 ) T

J(W,b,x,y)bl==J(W,b,x,y)zlzlblδl(24)(25) (24) ∂ J ( W , b , x , y ) ∂ b l = ∂ J ( W , b , x , y ) ∂ z l ∂ z l ∂ b l (25) = δ l

3.激活函数为sigmoid情况下的收敛速度

注意到反向传播过程中的激活函数导数 σ(zl) σ ′ ( z l ) 的出现,导致在链式求导法则过程中不断连乘 σ(zl) σ ′ ( z l ) ,而如果选择 sigmoid s i g m o i d 作为激活函数的时候, 其本身的导数大部分是较小的,导致梯度的消失。

为了改进,选择交叉熵损失函数:

J(W,b,x,y)=y.ln(aL)(1y).ln(1aL)) J ( W , b , x , y ) = − y . l n ( a L ) − ( 1 − y ) . l n ( 1 − a L ) )

激活函数为 sigmoid s i g m o i d 则, σ(x)=σ(x)(1σ(x)) σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) )

则有:

δl===J(W,b,x,y)zly1aL(aL)(1aL)+(1y)11aL(aL)(1aL)aLy(26)(27)(28) (26) δ l = ∂ J ( W , b , x , y ) ∂ z l (27) = − y 1 a L ( a L ) ( 1 − a L ) + ( 1 − y ) 1 1 − a L ( a L ) ( 1 − a L ) (28) = a L − y

求得的表达式中不含有 σ σ ′ ,所以在使用sigmoid函数的时候,交叉熵损失函数要优于均方误差函数。

4. softmax s o f t m a x 激活函数与对数似然损失函数

对数似然损失,对于每个样本的对数损失加和:

J(W,b,x,y)=kykln(aLk) J ( W , b , x , y ) = − ∑ k y k l n ( a k L )

对于给定的样本标签 y y 是一个one-hot向量的时候,可以写作 J(W,b,x,y)=ln(aLi) J ( W , b , x , y ) = − l n ( a i L ) ,其中i为样本真实标签号。

softmax激活函数:

aLi=ezLinLj=1ezLi a i L = e z i L ∑ j = 1 n L e z i L

softmax输出了对应分类的概率,每一个激活值都是(0,1)区间的数字。

此时:

J(W,b,x,y)zLi===JaLiaLizLi1aLiezlinLj=1ezLjezLiezLi(nLj=1ezLj)2(aLi1)(29)(30)(31) (29) ∂ J ( W , b , x , y ) ∂ z i L = ∂ J ∂ a i L ∂ a i L ∂ z i L (30) = − 1 a i L e z i l ∑ j = 1 n L e z j L − e z i L e z i L ( ∑ j = 1 n L e z j L ) 2 (31) = ( a i L − 1 )

J(W,b,x,y)zLj(ji)===aLjJaLiaLizLj1aLiezLjezLi(kezLk)2(32)(33)(34) (32) ∂ J ( W , b , x , y ) ∂ z j L ( j ≠ i ) = ∂ J ∂ a i L ∂ a i L ∂ z j L (33) = − 1 a i L − e z j L e z i L ( ∑ k e z k L ) 2 (34) = a j L

即可以得到完整的 J(W,b,x,y)zL=δL ∂ J ( W , b , x , y ) ∂ z L = δ L

然后以同2中式子进行反向传播求解对 w,b w , b 的偏导数。

5.DNN的正则化

L2正则化的惩罚系数为 λ λ ,则引入正则化的损失函数为:

J(W,b,x,y)=J(W,b,x,y)+λ||w||22 J ( W , b , x , y ) = J ′ ( W , b , x , y ) + λ | | w | | 2 2

在更新 W W 权重的时候,引入的正则项使梯度下降的时候以学习率 α α 更新为:

Wl=Wlαδl(al1)TαλWl W l = W l − α ∑ δ l ( a l − 1 ) T − α λ W l

或者多通过dropout进行正则化,每批次训练进行神经元随机抑制,每次训练一个全连接的子集。

你可能感兴趣的:(机器学习)