基于多层感知机的反向传播算法推导

机器学习课的作业,由于latex的公式编辑我很不熟悉,很多公式都没有编辑好,不过先发出来算了。后续我可能还会更新基于卷积神经网络的反向传播算法推导。

  1. 前馈神经网络的反向传播推导

定义如下记号描述网络:

L L L:神经网络的层数

n l n^{l} nl:表示第 l l l层神经元的个数

f l ( ) f_{l}() fl(): 第 l l l层神经元激活函数

W ( l ) ∈ R n l × n l − 1 W^{\left( l \right)} \in R^{n^{l} \times n^{l - 1}} W(l)Rnl×nl1:表示第 l − 1 l - 1 l1层到第 l l l层的权重矩阵

b ( l ) ∈ R n l b^{(l)} \in R^{n^{l}} b(l)Rnl:表示第 l − 1 l - 1 l1层到第 l l l层的偏置

z ( l ) ∈ R n l z^{(l)} \in R^{n^{l}} z(l)Rnl:表示第 l l l层的神经元状态

a ( l ) ∈ R n l a^{(l)} \in R^{n^{l}} a(l)Rnl:表示第 l l l层的神经元活性值

前馈神经网络通过下面公式进行信息传播:

z ( l ) = W ( l ) ∙ a ( l − 1 ) + b ( l ) z^{\left( l \right)} = W^{\left( l \right)} \bullet a^{\left( l - 1 \right)} + b^{\left( l \right)} z(l)=W(l)a(l1)+b(l)

a ( l ) = f l ( z ( l ) ) a^{\left( l \right)} = f_{l}\left( z^{\left( l \right)} \right) a(l)=fl(z(l))

公式也可以写成:

z ( l ) = W ( l ) ⋅ f l ( z ( l − 1 ) ) + b ( l ) z^{\left( l \right)} = W^{\left( l \right)} \cdot f_{l}\left( z^{\left( l - 1 \right)} \right) + b^{\left( l \right)} z(l)=W(l)fl(z(l1))+b(l)

给定一组样本 ( X ( i ) , y ( i ) ) , 1 ≤ i ≤ N (X(i),y(i)),1 \leq i \leq N (X(i),y(i)),1iN,前馈神经网络的输出 f ( X ∣ W , b ) f(X|W,b) f(XW,b)目标函数为:
J ( W , b ) = ∑ i = 1 N L ( y ( i ) , f ( X ( i ) ∣ W , b ) ) + 1 2 λ ∣ ∣ W ∣ ∣ F 2 = ∑ i = 1 N ( W , b ; X ( i ) , y ( i ) ) + 1 2 λ ∣ ∣ W ∣ ∣ F 2 \begin{matrix} J(W,b) & = \sum_{i = 1}^{N}{L(y^{(i)},f(X^{(i)}|W,b)) + \frac{1}{2}\lambda||W||_{F}^{2}} \\ & = \sum_{i = 1}^{N}{(W,b;X(i),y^{\left( i \right)}) + \frac{1}{2}\lambda||W||_{F}^{2}} \\ \end{matrix} J(W,b)=i=1NL(y(i),f(X(i)W,b))+21λWF2=i=1N(W,b;X(i),y(i))+21λWF2

这里的 W W W b b b包含了每一层的权重矩阵和偏置向量, ∣ ∣ W ∣ ∣ F 2 = ∑ l = 1 L ∑ j = 1 n l + 1 ∑ i = 1 n l W ij ( l ) ||W||_{F}^{2} = \sum_{l = 1}^{L}{\sum_{j = 1}^{n^{l + 1}}{\sum_{i = 1}^{n^{l}}W_{\text{ij}}^{\left( l \right)}}} WF2=l=1Lj=1nl+1i=1nlWij(l)

如果使用梯度下降来最小化目标函数,使用如下方法更新参数:

W ( l ) = W ( l ) − α ∂ J ( W , b ) ∂ W ( l ) , = W ( l ) − α ∑ i = 1 N ( J ( W , b ; X ( i ) , y ( i ) ) ∂ W ( l ) ) − λ W b ( l ) = b ( l ) − α ∂ J ( W , b ) ∂ b ( l ) , = b ( l ) − α ∑ i = 1 N ( J ( W , b ; X ( i ) , y ( i ) ) ∂ b ( l ) ) \begin{matrix} W^{(l)} & = W^{(l)} - \alpha\frac{\partial J(W,b)}{\partial W^{(l)}}, \\ & = W^{(l)} - \alpha\sum_{i = 1}^{N}{(\frac{J(W,b;X^{(i)},y^{(i)})}{\partial W^{(l)}}) - \lambda W} \\ b^{(l)} & = b^{(l)} - \alpha\frac{\partial J(W,b)}{\partial b^{(l)}}, \\ & = b^{(l)} - \alpha\sum_{i = 1}^{N}{(\frac{J(W,b;X^{(i)},y^{(i)})}{\partial b^{(l)}})} \\ \end{matrix} W(l)b(l)=W(l)αW(l)J(W,b),=W(l)αi=1N(W(l)J(W,b;X(i),y(i)))λW=b(l)αb(l)J(W,b),=b(l)αi=1N(b(l)J(W,b;X(i),y(i)))

其中 λ \lambda λ是参数更新率。

∂ J ( W , b ; X , y ) ∂ W ij ( l ) = t r ( ( J ( W , b ; X , y ) ∂ z ( l ) ) T ∂ z ( l ) ∂ W ij ( l ) ) \frac{\partial J\left( W,b;X,y \right)}{\partial W_{\text{ij}}^{\left( l \right)}} = tr((\frac{J\left( W,b;X,y \right)}{\partial z^{\left( l \right)}})^{T}\frac{\partial z^{\left( l \right)}}{\partial W_{\text{ij}}^{\left( l \right)}}) Wij(l)J(W,b;X,y)=tr((z(l)J(W,b;X,y))TWij(l)z(l))

对于第 l l l层,定义一个误差项 δ ( l ) = J ( W , b ; X , y ) ∂ z ( l ) ∈ R n ( l ) \delta^{(l)} = \frac{J(W,b;X,y)}{\partial z^{(l)}} \in R^{n^{(l)}} δ(l)=z(l)J(W,b;X,y)Rn(l)是目前目标函数关于第l层的神经元 z ( l ) z^{(l)} z(l)的偏导数。 δ ( l ) \delta^{(l)} δ(l)也反映了最终的输出对第l层神经元对最终误差的敏感程度。
∂ J ( W , b ; X , y ) ∂ W ( l ) = δ i ( l ) ( a j ( l − 1 ) ) T ∂ J ( W , b ; X , y ) ∂ b ( l ) = δ i ( l ) \begin{matrix} \frac{\partial J\left( W,b;X,y \right)}{\partial W^{\left( l \right)}} & = \delta_{i}^{\left( l \right)}(a_{j}^{\left( l - 1 \right)})^{T} \\ \frac{\partial J\left( W,b;X,y \right)}{\partial b^{\left( l \right)}} & = \delta_{i}^{\left( l \right)} \\ \end{matrix} W(l)J(W,b;X,y)b(l)J(W,b;X,y)=δi(l)(aj(l1))T=δi(l)

现在来看第l层的误差项 δ ( l ) \delta^{(l)} δ(l)

δ ( l ) ≜ J ( W , b ; X , y ) ∂ z ( l ) = ∂ a ( l ) ∂ z ( l ) ⋅ ∂ z ( l + 1 ) ∂ a ( l ) ⋅ J ( W , b ; X , y ) ∂ z ( l + 1 ) = d i a g ( f l ′ ( z ( l ) ) ) ⋅ ( W ( l + 1 ) ) T ⋅ δ ( l + 1 ) = f l ′ ( z ( l ) ) ⊙ ( ( W ( l + 1 ) ) T δ ( l + 1 ) ) \begin{matrix} \delta^{(l)} & \triangleq \frac{J(W,b;X,y)}{\partial z^{(l)}} \\ & = \frac{\partial a^{(l)}}{\partial z^{(l)}} \cdot \frac{\partial z^{(l + 1)}}{\partial a^{(l)}} \cdot \frac{J(W,b;X,y)}{\partial z^{(l + 1)}} \\ & = diag(f_{l}^{'}(z^{(l)})) \cdot (W^{(l + 1)})^{T} \cdot \delta^{(l + 1)} \\ & = f_{l}^{'}(z^{(l)}) \odot ((W^{(l + 1)})^{T}\delta^{(l + 1)}) \\ \end{matrix} δ(l)z(l)J(W,b;X,y)=z(l)a(l)a(l)z(l+1)z(l+1)J(W,b;X,y)=diag(fl(z(l)))(W(l+1))Tδ(l+1)=fl(z(l))((W(l+1))Tδ(l+1))

⊙ \odot 是向量点积运算符,表示每个元素相乘。

因此,前馈神经网络的训练过程可以分为以下步骤:

Forward pass中计算每一层的状态和激活值,直到最后一层,

Backward pass中计算每一层的误差,计算每一层参数的偏导数,并更新参数。

本篇博客绝大部分参考了这个博客,大家可以去他的原博客看,十分感谢这位博主

你可能感兴趣的:(深度学习)