神经网络中的前向传播和反向传播的算法推导

前言

神经网络中的前向传播与反向传播是机器学习中最基础的理论之一,这次可算走心推导。

机器学习中常用的10大算法概要 这一篇文章中有引导介绍。

推导流程

1.1符号表达

     在推导过程中将会涉及到很多元素的表达,严谨的数学符号能帮助我们更清晰的阅读推导的过程。

 (1) 首先上图描述的是简单易懂的三层结构的神经网络,输入层、隐藏层、以及输出层,本文约定以[L]表示层的数量级;

 (2) w_{ij}[L]用来表示权重,i是属于L层上节点的位置,j是表示L+1层上节点的位置;

 (3) z_{i}[L]用来表示L层第i个位置的输入,a_{i}[L]是属于L层第i节点的输出,b_{i}[L]是表示第L层第i节点的偏移;

1.2 正向传播

      在了解完符号表达后,先推导正向传播是如何进行的:

      (1)节点C的输入z_{1}[2] = a_{1}[1]*w_{11}[1] + a_{2}[1]*w_{21}[1]  + b_{1}[2]

      (2)同理节点D的输入z_{2}[2] = a_{1}[1]*w_{12}[1] + a_{2}[1]*w_{22}[1]  + b_{2}[2]

      (3)同理节点C的输出a_{1}[2] = sigmoid(z_{1}{\color{DarkOrange} }[2])

      (4)同理节点D的输出a_{2}[2] = sigmoid(z_{2}[2])

      (5)引入矩阵的概念:    \begin{bmatrix} z_{1}[2]\\ z_{2}[2] \end{bmatrix}=    \begin{bmatrix} ^{w_{11}} & ^{w_{21}}\\ ^{w_{12}} & ^{w_{22}} \end{bmatrix}  \begin{bmatrix} ^{a_{1}[1]}\\ ^{a_{2}[1]} \end{bmatrix} ,权重矩阵起到了纽带的作用。

1.3 反向传播

     反向传播作用在于通过误差更新权重以期减少误差。如图-2所示,现在通过计算得到了两个误差,分别为e1和e2,通过反向传播造成了节点C 的eh1误差,eh1的量归功于eo1与eo2的贡献,遵循按劳分配的原则可知

  

图-2

      eh1 = [w_{11}[2]/(w_{11}[2] + w_{12}[2])] * eo1 + [w_{12}[2]/(w_{11}[2] + w_{12}[2])] * eo2

     不改变比例忽略相同因子1/(w_{11}[2] + w_{12}[2]) 可得

      eh1 = w_{11}[2] * eo1 + w_{12}[2] * eo2

     不难发现反向传播时,权重值依然是重要的计算枢纽。只不过使用矩阵表示时是权重矩阵的转置

1.4链式求导

    如果你悉知高等数学,以下内容对你来说不值一提,如果不太熟悉,还是看看推导吧。

    (1)首先我们需要明确目标,反向传播的意义在于更新权值,以节点C为例更新w_{11}[2] 的值,这时需要从产生误差的地方开始回推:

      eo1 = 1/2  * (a_{1}[3] - y1)

     a_{1}[3] = sigmoid(z_{1}{\color{DarkOrange} }[3])

     z_{1}[3] = a_{1}[2]*w_{11}[2] + a_{2}[2]*w_{21}[2]  + b_{1}[3]

一直推算到出现w_{11}[2]为止。

 (2)现在需要依据上面的步骤对w_{11}[2]进行求求偏导

     \frac{\partial eo1}{\partial w11[2]} =\frac{\partial eo1}{\partial a1[3]}\cdot \frac{\partial a1[3]}{\partial z1[3]}\cdot \frac{\partial z1[3]}{\partial w11[2]}       

  带入已知值可得:

    \frac{\partial eo1}{\partial w11[2]} =(a_{1}[3] - y_{3})\cdot sigmoid(z_{1}[3])\cdot (1-sigmoid(z_{1}[3]))\cdot a_{1}[2]       

同样对w_{21}[2]的求导:

    \frac{\partial eo1}{\partial w21[2]} =\frac{\partial eo1}{\partial a1[3]}\cdot \frac{\partial a1[3]}{\partial z1[3]}\cdot \frac{\partial z1[3]}{\partial w21[2]}

带入已知值可得:

    {\color{Orange} \frac{\partial eo1}{\partial w21[2]} =(a_{1}[3] - y_{3})\cdot sigmoid(z_{1}[3])\cdot (1-sigmoid(z_{1}[3]))\cdot a_{2}[2]}

按照以上步骤向更靠前的地方算,当所有偏导数都为已知的情况下可以更新权值

w_{11}[2]:=w_{11}[2]-\eta \cdot \frac{\partial eo1}{\partial w_{11}[2]}

这也是阶段性的目的,也是最终的目标。

猜你喜欢

转载自blog.csdn.net/baidu_33512336/article/details/107752549