深度学习小白——反向传播

一、理解

函数关于每个变量的导数指明了整个表达式对于该变量的敏感程度

梯度▽f是偏导数的向量,所以有,


深度学习小白——反向传播_第1张图片

直观理解链式法则,f=q*z, q=x+y ,先进行前向传播,从输入计算到输出(绿色),然后反向传播从末端开始,根据链式法则递归地向前计算梯度,一直到输入端。

在整个反向传播过程中,每个门单元应将回传的梯度乘以它对其输入的局部梯度,从而得到整个网络的输出对该门单元的每个输入值的梯度

例如上图,加法门收到输入[-2,5],计算输出3,则对于两个输入的局部梯度是+1,网络的其余部分计算出最终值 为-12,反向传播时,算到加法门时,知道加法门的输出梯度是-4,

继续递归并对梯度使用链式法则,加法门拿到梯度,然后把这个梯度分别乘到每个输入值的局部梯度,即得到了整个网络输出对每个输入值的梯度。


二、sigmoid函数

  

注意:在计算反向传播时,前向传播过程中得到的一些中间变量非常有用,在实际操作中,最好代码实现对于这些中间变量的缓存,对于不同分支的梯度,要使用+=而不是=来累积这些变量的梯度


【总结】

加法门:把输出梯度相等地分发给它所有的输入

取最大值门:对梯度作路由,将梯度转给其中一个输入,这个输入是在前向传播中值最大的那个输入。

乘法门:它的局部梯度就是输入值,但是是相互交换之后的。


三、小结

分段计算在反向传播中很重要!应该将函数分成不同的模块,这样计算局部梯度相对容易,然后基于链式法则将其“链”起来

在矩阵运算中,要注意分析维度,通过维度推导出来公式,也可以先写一个小规模的例子,在纸上推演梯度,然后对其一般化。


给一个每层只有一个神经元的4-layer简化模型来说明反向传播:


其中,C表示代价函数,aj = σ(zj)(注意,a4 = z4),zj = wjaj-1 + bj,我们称 zj是神经元的带权输入。现在我们要来研究一下第一个隐藏神经元的梯度∂C/∂b1,这里我们直接给出表达式(具体证明,请移步这里):

深度学习小白——反向传播_第2张图片

你可能感兴趣的:(深度学习小白——反向传播)