【李宏毅机器学习2017】-P14笔记-反向传播算法(Backpropagation)
版权声明:小博主水平有限,希望大家多多指导。
本文仅代表作者本人观点,转载请联系知乎原作者——BG大龍。
笔记目录
1.为什么引入Back propagation
2.具体介绍
【参考资料】
1——CS224n 第五讲 - 反向传播和项目建议-视频外翻-AI研习社
2——前向传播算法(Forward propagation)与反向传播算法(Back propagation) - bitcarmanlee的博客 - CSDN博客
3——通俗解释反向传播(Backpropagation)的计算 - Kobe Bryant的专栏 - CSDN博客
1、为什么引入“反向传播的概念”?
1——在神经网络的计算中,神经网络通常含有非常深的隐藏层(换句话说就是可能拥有百万量级的参数),为了在梯度下降时更加有效地计算梯度,引入一个概念:反向传播算法。
在神经网络的训练中,梯度下降和其他方法原理一致,区别在于参数的数量当有了很多,乃至上百万的参数时,我们要用到反向传播算法(Backpropagation) 来提高效率。
2——链式法则
Backpropagation主要用到了链式法则
3——问题的关键是,怎么求一个data的“C对w的偏微分”
4——取出一个神经网络进行研究。
根据链式法则, ∂C/∂w = (∂z/∂w )*( ∂C/∂z),计算∂z/∂w我们称为前向过程,计算∂C/∂z我们称为后向过程
5——【前向过程】
我们能明显看出前向过程∂z/∂w的值。
6——【反向过程】
在这里做一下变换。将 ∂C/∂z 拆成 ∂a/∂z 和 ∂C/∂a , 先处理 ∂a/∂z
对 ∂C/∂a 进行处理
前两项容易知道是W3、W4。后两项实际上不知,但假设我们知道。
整理式子后。
如下图所示,倘若我们从另外一个观点看待上面的式子:有另外一个neuron(下图中的三角形,表示乘法/放大器)。
Input是∂C / ∂z′与∂C / ∂z′′,权重分别是w3,w4,求和经过neuron(乘以σ′(z)),得到∂C / ∂z。
因为在前向传播中z早已确定, ′ (z)是一个常数。
7——那么现在问题又来了,我们该如何计算∂C / ∂z′与∂C / ∂z′′呢?
分2种情况。
(1)z′,z″ 所接的neuron,是output layer的neuron
(2)z′,z″ 所接的neuron不是output layer的neuron——体现递归的思想
(3)总结:实际上在做Backword Pass的时候,就是建立一个反向的neural network的过程,对损失函数求导 = 前向传播 * 后向传播
2、本节总结:
链式法则将计算∂C / ∂w 拆成前向过程与后向过程。
前向过程计算的是∂z / ∂w ,这里z是w所指neuron的input,计算结果是与w相连的值。
后向过程计算的是∂C / ∂z,这里z仍是w所指neuron的input,计算结果通过从后至前递归得到
以上,是作者本课的心得体会,欢迎交流!