梯度反向传播
参考资料:https://blog.csdn.net/weixin_41803874/article/details/88817640
反向传播的直观理解
反向传播是一个优美的局部过程。在整个计算线路图中,每个门单元都会得到一些输入并立即计算两个
东西:1. 这个门的输出值,和2.其输出值关于输入值的局部梯度。门单元完成这两件事是完全独立的,
它不需要知道计算线路中的其他细节。然而,一旦前向传播完毕,在反向传播的过程中,门单元门将最
终获得整个网络的最终输出值在自己的输出值上的梯度。链式法则指出,门单元应该将回传的梯度乘以
它对其的输入的局部梯度,从而得到整个网络的输出对该门单元的每个输入值的梯度。
这里对于每个输入的乘法操作是基于链式法则的。该操作让一个相对独立的门单元变成复杂计算线
路中不可或缺的一部分,这个复杂计算线路可以是神经网络等。
下面通过例子来对这一过程进行理解。加法门收到了输入[-2, 5],计算输出是3。既然这个门是加法操
作,那么对于两个输入的局部梯度都是+1。网络的其余部分计算出最终值为-12。在反向传播时将递归地
使用链式法则,算到加法门(是乘法门的输入)的时候,知道加法门的输出的梯度是-4。如果网络如果
想要输出值更高,那么可以认为它会想要加法门的输出更小一点(因为负号),而且还有一个4的倍数。
继续递归并对梯度使用链式法则,加法门拿到梯度,然后把这个梯度分别乘到每个输入值的局部梯度
(就是让-4乘以x和y的局部梯度,x和y的局部梯度都是1,所以最终都是-4)。可以看到得到了想要的效
果:如果x,y减小(它们的梯度为负),那么加法门的输出值减小,这会让乘法门的输出值增大。
因此,反向传播可以看做是门单元之间在通过梯度信号相互通信,只要让它们的输入沿着梯度方向变
化,无论它们自己的输出值在何种程度上升或降低,都是为了让整个网络的输出值更高。
模块化:Sigmoid例子
上面介绍的门是相对随意的。任何可微分的函数都可以看做门。可以将多个门组合成一个门,也可以根
据需要将一个函数分拆成多个门。现在看看一个表达式:
在后面的课程中可以看到,这个表达式描述了一个含输入x和权重w的2维的神经元,该神经元使用了
sigmoid
激活
函数。但是现在只是看做是一个简单的输入为x和w,输出为一个数字的函数。这个函数是
由多个门组成的。除了上文介绍的加法门,乘法门,取最大值门,还有下面这4种:
其中,函数 使用对输入值进行了常量 的平移, 将输入值扩大了常量 倍。它们是加法和乘法的特
例,但是这里将其看做一元门单元,因为确实需要计算常量 的梯度。整个计算线路如下: