反向传播不是新算法,只是链式法则的记账方式

把计算图画出来,每个节点的局部导数乘上上游传来的梯度,就是全部。

学习《从零理解反向传播》

上一篇写到 是一个投影方向。这一篇回答:几百万个参数,梯度怎么一次算完

前向时存下中间量

设有两层:

前向传播算出 ,同时把 留着。留着它们不是为了省一次计算,而是因为反向时每个局部导数都要用到这些值。

反向只是从右往左乘

我们想要 。先算最右边:

然后往前推一步。,所以对 的梯度是 乘上游:

注意这里出现的转置——它不是技巧,纯粹是形状对上了: 维,,只有乘 才能得到 维。

整个反向传播就是在做这件事,一路把 维梯度变成 维梯度。没有别的内容。

局部导数表

运算前向梯度怎么往回传
矩阵乘 一次乘法
加法 相加原样复制给两边
逐元素逐元素
求和 求和广播回每个分量

这张表记住之后,看任何框架的自动微分文档都会变简单。所谓”框架帮你求导”,就是自动按这张表逐项往回传。

下一讲:动量法,以及为什么它能把扁平曲面上的震荡压掉。

相关