首先明确两点:
- 前向传播求损失,反向传播回传误差;
- 每个神经元都可以根据误差修正权重。
一、前向计算
我们以下图的三层神经网络为例,介绍前向传播和反向传播。
输入层为[x1, x2, x3],权重为b1,输入的形状为(1, 3),计算过程如下图所示:
前向输出计算完成,只需要带入到损失函数MSE中计算出损失(loss),前向计算就完成了。
二、神经网络反向推导
1 损失函数展开
从损失函数开始推导,将损失函数展开至输入层
- 输出层
- 误差展开至隐藏层
- 误差展开至输入层
要理解上面的公式和下面的内容,我们需要知道以下三点:
- 权重(w)更新公式:当前权重 - 损失函数(MSE)对于权重的偏导数 * 学习率(lr);
- 隐藏层的输出和隐藏层的输入在前向计算中已经的到,是一个已知量;
- 求偏导的依据是链式法则,上面的公式是总结,可以根据这个公式求每个权重的偏导。
=========================================================================
弄清楚了损失函数的展开式,我们来计算W(2)11的权重更新。
损失函数E 对于权重w(2)11的偏导数:
2 更新权重
第一步:求,已知MSE函数的导数为:
则损失对于out1的偏导数为:
第二步:求,sigmoid函数的导数为:
则f(out1)对于out1的导数为:
第三步:求,out1对于w(2)11的导数由下公式求得:
out1 = w(2)11 * f(h1) + w(2)21 * f(h2) + w(2)31 * f(h3) + b (由于偏置的导数为0,所以我们的反向传播几乎没考虑过偏置)
out1对于w(2)11的导数为:
综上推理,可得损失函数E 对于权重w(2)11的偏导数为:
公式中出现的值都是前向计算中计算出的已知值,所以将值代入即可求得偏导数。
第四步:更新权重
至此权重w(2)11更新完成。
=========================================================================
如果我们想更新w(1)11呢?
三 求w(1)11的偏导数
求损失对于w(1)11的偏导数公式如下:
其中可以展开为下式:
那么展开 和
可得下面的结果:
根据求w(2)11的经验,我们可以轻松求得更新后的w(1)11。
=========================================================================
参考博客:https://blog.csdn.net/ft_sunshine/article/details/90221691