详解反向传播算法(下)

转自:https://zhuanlan.zhihu.com/p/25416673

神经网络结构图:

示例网络图

详解反向传播算法(下)

其中C是损失函数,例如C可以取:

详解反向传播算法(下)

梯度下降(SGD)进行学习时,核心问题是求解损失函数C关于所有网络参数详解反向传播算法(下)的偏导数详解反向传播算法(下)。 根据详解反向传播算法(上) 我们已经知道用反向传播算法可以“一次反向计算”得到损失函数C关于网络中所有参数的偏导数。模仿详解反向传播算法(上) 的推理过程,我们首先画出上面网络图的详细计算图:再看看具体怎么样反向传播求偏导数。

神经网络计算图

对应计算图如下:(只展开了最后两层的计算图):

详解反向传播算法(下)

绿色代表权重参数详解反向传播算法(下),橙色代表基底参数详解反向传播算法(下)。可见虽然网络图上只是简单几条线,计算图还是蛮复杂的。

现在我们在计算图箭头上标出对应的偏导数(只标出了一部分)。

详解反向传播算法(下)

反向传播四公式

上面计算图上每一个节点关于前一个节点的偏导数都可以求得,根据求导的链式法则,想要求损失函数C关于某一节点的偏导数,只需要“把该节点每条反向路径上的偏导数做乘积,再求和”即可。(详解反向传播算法(下)分别对应绿色和橙色的节点)

现在我们已经可以在计算图上求得损失函数C关于模型参数的偏导数详解反向传播算法(下)。但是还不够优雅,反向传播算法要优雅的很多,它通过定义一个损失(详解反向传播算法(下)),先逐层向后传播得到每一层节点的损失(详解反向传播算法(下)),再通过每一个节点的损失(详解反向传播算法(下))来求解该节点的详解反向传播算法(下)

首先记损失函数C关于详解反向传播算法(下)层的第j个元素的偏导为:详解反向传播算法(下)

最后一层

对于最后一层(L层)的元素j会有:

详解反向传播算法(下)

向量化为:

详解反向传播算法(下) (BP1)

其中详解反向传播算法(下)的操作是把两个向量对应元素相乘组成新的元素。

后一层传播到前一层

由前面计算图中L和L-1层所标注的偏导数,可得到倒数第一层(L-1)元素j的损失为:(请仔细对照前面的计算图)详解反向传播算法(下)

向量化:详解反向传播算法(下)

这启发我们后一层(详解反向传播算法(下)层)的损失详解反向传播算法(下) 如何传播到前一层(详解反向传播算法(下)层)得到详解反向传播算法(下)。(只需要把L用详解反向传播算法(下)替换,详解反向传播算法(下)详解反向传播算法(下)替换)就得到了逐层传播损失的公式:

详解反向传播算法(下)(BP2)

关于详解反向传播算法(下)的偏导数

详解反向传播算法(下)(BP3)

向量化:详解反向传播算法(下)


关于详解反向传播算法(下)的偏导数

详解反向传播算法(下)(BP4)

向量化:详解反向传播算法(下)详解反向传播算法(下)

详解反向传播算法(下)

至此就得到了反向传播的4个公式:

详解反向传播算法(下)

图片来自:Neural networks and deep learning
反向传播算法流程:

详解反向传播算法(下)流程图来自:Neural networks and deep learning

本文主要参考 Neural networks and deep learning,原作者写的也不错,不过个人觉得如果按照计算图会更加直观,基本不需要数学推导过程,用肉眼看图就可以理解反向传播的四个公式。当然前提是计算图要画的清晰明白。花了半天时间来写这篇文章,其中画图花费了80%的时间,尤其是计算图改了N次,仍然可能存在错误,欢迎指正~

点赞(分享)就是对文章作者的最大鼓励~

------下面只是备份下用过的公式,以备后面修改使用 ------------

详解反向传播算法(下)详解反向传播算法(下)详解反向传播算法(下)详解反向传播算法(下)详解反向传播算法(下)详解反向传播算法(下)

详解反向传播算法(下)详解反向传播算法(下)详解反向传播算法(下)


详解反向传播算法(下)详解反向传播算法(下)详解反向传播算法(下)

------------------------ 备份 end ----------------------------------------------