作者:彦廷孟颖益皓 | 来源:互联网 | 2023-10-10 17:11
一、理解函数关于每个变量的导数指明了整个表达式对于该变量的敏感程度梯度▽f是偏导数的向量,所以有,直观理解链式法则,fq*z,qx+y,先进行前向传播,从输入计算到输出(绿色),然后反
一、理解
函数关于每个变量的导数指明了整个表达式对于该变量的敏感程度
梯度▽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,这里我们直接给出表达式(具体证明,请移步这里):