您的位置:首页 > 其它

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

2017-03-27 18:48 225 查看
一、理解

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

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





直观理解链式法则,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,这里我们直接给出表达式(具体证明,请移步这里):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: