反向传播
背景
梯度下降
- 给到
(weight and bias) - 先选择一个初始的
,计算 的损失函数(Loss Function)设一个参数的偏微分 - 计算完这个向量(vector)偏微分,然后就可以去更新
- 百万级别的参数(millions of parameters)
- 反向传播(Backpropagation)是一个比较有效率的算法,让你计算梯度(Gradient) 的向量(Vector)时,可以有效率的计算出来
链式法则
- 连锁影响(可以看出x会影响y,y会影响z)
- BP主要用到了chain rule
反向传播
- 损失函数(Loss function)是定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的,用
表示。 - 代价函数(Cost function)是定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平均其实不会影响最后的参数的求解结果。
- 总体损失函数(Total loss function)是定义在整个训练集上面的,也就是所有样本的误差的总和。也就是平时我们反向传播需要最小化的值。
对于
取出一个Neuron进行分析
从这一小部分中去看,把计算梯度分成两个部分
- 计算
(Forward pass的部分) - 计算
( Backward pass的部分 )
Forward Pass
那么,首先计算
根据求微分原理,forward pass的运算规律就是:
这里计算得到的
Backward Pass
(Backward pass的部分)这就很困难复杂因为我们的
计算所有激活函数的偏微分,激活函数有很多,这里使用Sigmoid函数为例
这里使用链式法则(Chain Rule)的case1,计算过程如下:
最终的式子结果:
但是你可以想象从另外一个角度看这个事情,现在有另外一个神经元,把forward的过程逆向过来,其中
case 1 : Output layer
假设
但是如果不是最后一层,计算
case 2 : Not Output Layer
对于这个问题,我们要继续计算后面绿色的
对上图,我们可以从最后一个
实际上进行backward pass时候和向前传播的计算量差不多。
总结
我们的目标是要求计算