CS231n 反向传播 Backprop

https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit

反向传播 梯度(偏导数)

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

先考虑一个简单的二元乘法函数f(x,y)=xy。对两个输入变量分别求偏导数还是很简单的:
f ( x , y ) = x y d f d x = y d f d y = x x = 4 , y = 3 f ( x , y ) = 12 x 的导数 f x = 3 。这就说明如果将变量x的值变大一点,整个表达式的值就会变小(原因在于负号),而且变小的量是x变大的量的三倍。

对前向传播变量进行缓存:在计算反向传播时,前向传播过程中得到的一些中间变量非常有用。在实际操作中,最好代码实现对于这些中间变量的缓存,这样在反向传播的时候也能用上它们。如果这样做过于困难,也可以(但是浪费计算资源)重新计算它们。

在不同分支的梯度要相加:如果变量x,y在前向传播的表达式中出现多次,那么进行反向传播的时候就要非常小心,使用+=而不是=来累计这些变量的梯度(不然就会造成覆写)。这是遵循了在微积分中的多元链式法则,该法则指出如果变量在线路中分支走向不同的部分,那么梯度在回传的时候,就应该进行累加。

回传流中的模式
神经网络中最常用的加法、乘法和取最大值这三个门单元,加法操作将梯度相等地分发给它的输入。取最大操作将梯度路由给更大的输入。乘法门拿取输入激活数据,对它们进行交换,然后乘以梯度。

猜你喜欢

转载自blog.csdn.net/eqiang8848/article/details/82255506