目录
1. 反向传播算法在梯度下降法中的运作原理
我们在使用梯度下降法训练神经网络时需要使用反向传播算法。
在梯度下降法中,有超参数w和b。首先选定初试参数,计算
对损失函数的梯度
,也就是计算神经网络中每一个参数的对损失函数的偏微分。计算完可以进行参数的更新
。持续进行这一过程得到最优参数。
因为在神经网络中参数数量较多,所以使用反向传播算法有效的计算梯度。
2. 链式法则
3. 反向传播算法
反向传播的损失函数是,其中
是
和
之间的距离,
越大表示损失值越大。为了求得损失值的最小值,我们对损失函数进行求偏导
。
首先拿出一个神经元进行考虑,这个神经元的输入是外界的输入和
,
和
分别乘上权重
和
再加上b得到z。得到z之后通过激活函数并通过进一步处理得到最终的输出
和
。
按照链式法则可以拆成两项
。计算
称为正推法,但是计算
称为反推法。
- 怎么计算
呢?
这个是可以秒解的。规律在于:计算时,看w前面接的是什么微分后就是什么。如下图所示。
- 怎么计算
呢?
这一项显然是不太好算的,我们需要使用链式法则对这项进行拆解。
首先假设激活函数是sigmoid函数,z通过sigmoid函数后得到a,a会通过权重再加上其他的值之后得到
,a还会通过权重
加上其他值得到
。
所以,
就是sigmoid函数的微分,
但是和
我们无法算出,我们假设我们知道这两项的值,所以
。
- 我们可以从另外一个观点看待这个式子。
我们可以想象有另外一个不在神经网络中的神经元,简化成下图中的三角形。这个神经元的输入就是和
,第一个输入
乘上
,第二个输入
乘上
,求和后再乘上激活函数
就得到
。
其实是一个常数,以内z在计算正推法的时候就已经被决定好了。
其实,只要能计算出和
,问题就可以迎刃而解。
- 那么怎么计算这两项呢?
情况一:假设两个红色的神经元是输出层
所以
情况二:假设两个红色的神经元不是输出层
我们同样可以使用反向传播进行计算
可是我们又不知道如何计算和
的偏微分。如果不是最后一层,一直不断的计算,直到最后一层是输出层。
上面的方法听起来计算量很大,实际上,我们只需要换一个方向,从输出层的,往回计算。
总结:
首先做一个正向传播,可以算出。在反向传播中,把原来的神经网络的方向倒过来,每一个神经元的输出就是
,把他们乘起来得到
。