- [机器学习入门] 李宏毅机器学习笔记-8(Backpropaga
- [机器学习入门] 李宏毅机器学习笔记-15 (Unsupervi
- [机器学习入门] 李宏毅机器学习笔记-24(introducti
- [机器学习入门] 李宏毅机器学习笔记-30 (Sequence
- [机器学习入门] 李宏毅机器学习笔记-31 (Sequence
- [机器学习入门] 李宏毅机器学习笔记-14 (Unsupervi
- [机器学习入门] 李宏毅机器学习笔记-22(Transfer L
- [机器学习入门] 李宏毅机器学习笔记-9 (“Hello wor
- [机器学习入门] 李宏毅机器学习笔记-33 (Recurrent
- [机器学习入门] 李宏毅机器学习笔记-34 (Recurrent
@[toc]
文章说明
反向传播(Backpropagation)算法是怎么让神经网络(neural network)变的有效率的。
背景
梯度下降(Gradient Descent)

反向传播(Backpropagation)并不是和梯度下降(Gradient descent)不同的一个方法。他只是一个比较有效率的演算法,让你在计算梯度向量的时候比较有效率把结果计算出来。
链式法则(Chain Rule)
关键就是求导的链式法则(Chain Rule),下图就是链式法则求导的两种case

反向传播
首先定义损失函数(Lost function):
- 损失函数(Loss function)是定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的哦,用L表示。
-
代价函数(Cost function)是定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平均其实不会影响最后的参数的求解结果。
所以这里定义的是有点问题的。

那怎么去做呢?我们先整个神经网络(Neural network)种抽取出一小部分的神经(Neural)去看:


从这一小部分中去看,把计算梯度分成两个部分
- 计算
(Forward pass的部分)
- 计算
( Backward pass的部分 )
Forward pass
那么,首先计算(Forward pass的部分):

根据链式法则(Chain Rule),forward pass的运算规律就是:
直接使用数字,更直观地看到运算规律:

是不是只管看到了结果,就是上一个的值,接下来是计算 Backward pass~~
Backward pass
(Backward pass的部分)这就很困难复杂因为我们的C是最后一层:
那怎么计算 (Backward pass的部分)这就很困难复杂因为我们的C是最后一层:

计算所有激活函数的偏微分,激活函数有很多,这里使用Sigmod函数为例

这里使用链式法则(Chain Rule)的case1,计算过程如下:

最终的式子结果:

但是你可以想象从另外一个角度看这个事情,现在有另外一个neural,把back的过程逆向过来:

case 1: Output layer
case 1,就是y1与y2是输出值:

case2:Not Output Layer

- Compute
for all activation function inputs z
- Compute
from the output layer

怎么去计算呢?


实际上进行backward pass时候就是反向的计算(也相当于一个neural network)。
总结

网友评论