反向传播算法之数学原理

反向传播算法之数学原理

一. 数学原理
  反向传播从数学的角度考虑,就是利用了链式法则求导,其中的梯度下降算法也是微分学的一个知识点。以一层神经元为例。


在这里插入图片描述

  输出层的激活值 a^(L) ,L表示输出层,前一层的激活值为a^(L-1)。
  单一训练样本,已知训练值为y。计算损失函数。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  整体的流程是


在这里插入图片描述

  • 先使用前一个激活值和权重 w 以及偏置 b 计算出 z
  • 再将 z 传入激活函数计算出 a
  • 最后利用 a 和目标值 y 计算出损失
  实践中需要对mini-batch中所有的样本求平均损失


在这里插入图片描述

  进一步,∂C/∂w^(L) 只是梯度向量 ▽C 的一个分量;梯度向量本身是由损失函数对每个参数偏导构成。


在这里插入图片描述

1. 反向传播的四个基本公式:
  第一个是损失函数对输出层神经元的激活值的偏导数。


在这里插入图片描述

  第二个是损失函数对其它层神经元的激活值的偏导数,这一步是重要的,需要理解求和的作用,因为其它层的神经元激活值作用在后一层所有的神经元上,所以需要将后一层所有的损失函数对此神经元的偏导数求到一起,进行求和。


在这里插入图片描述

  第三个是权重的偏导。


在这里插入图片描述

  第四个是偏置的偏导。


在这里插入图片描述

  我们的目标是将损失函数降到最低,从几何学讲,就是在图像上找到极小值点,那就需要找到图像的下降最快的方向,也就是上升最快的方向求反,常用的就是求导,因为是多元函数,所以对不同的参数,求他们的下降方向,就需要用到梯度,也就是偏导数。


在这里插入图片描述

二. 实例计算
  下面将以实际的例子,运算一遍反向传播算法。使用2个输入神经元,2个隐藏层神经元,2个输出神经元,还有偏置。初始训练时都会对权重和偏置设置随机初始值。


在这里插入图片描述

  可以看到,上图的输入,0.05和0.10,希望的输出为0.01和0.99。
1. 前向传播
  1)隐藏层计算
  首先计算隐藏层h1的输入值:


在这里插入图片描述

  然后使用的激活函数是sigmoid,对输入值进行激活:


在这里插入图片描述

  同理隐藏层h2激活值:


在这里插入图片描述

  2)输出层计算
  这时计算输出层,使用隐藏层计算好的激活值作为输入:


在这里插入图片描述

  同理输出层o2的激活值:


在这里插入图片描述

  3)计算总误差
  损失函数使用平方误差函数,计算每一个输出节点的激活值与真实值的误差,将所有的输出节点相加得到总误差。


在这里插入图片描述

  因为o1的激活值为0.75136507,目标值是0.01。其损失值为:


在这里插入图片描述

  同理o2的损失值为:


在这里插入图片描述

  总误差为:


在这里插入图片描述

2. 反向传播
  1)输出层


在这里插入图片描述

  我们需要求w5权重的梯度


在这里插入图片描述

  根据链式法则:


在这里插入图片描述

  下图我们可以更好的理解目前做的事情。


在这里插入图片描述

  一个部分一个部分去求解:


在这里插入图片描述

  整体:


在这里插入图片描述

  最后为了减少误差,应该从当前的权重值,减去梯度*学习率。


在这里插入图片描述

  同理:


在这里插入图片描述

  2)隐藏层
  接下来将继续为新的计算值,向后传递w1,w2,w3,w4。


在这里插入图片描述
在这里插入图片描述

  继续向前计算,我们将和输出层方式一致,不过有一些微小的不同。因为outh1的偏导数需要求和,因为outh1对输出层的两个神经元都有作用。


在这里插入图片描述
在这里插入图片描述

  现在更新权重w1:


在这里插入图片描述
在这里插入图片描述

  最后更新所有的参数变量,进行输出层到隐藏层之间权重梯度下降时,使用的隐藏层到输出层的权重仍然是正向传播时的权重,整体更新完成后,再完成迭代。

猜你喜欢

转载自blog.csdn.net/weixin_40192195/article/details/88369870