详解反向传播算法(下)
原文出处:详解反向传播算法(下)
详解反向传播算法(下)
神经网络结构图:
示例网络图
其中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,原作者写的也不错,不过个人觉得如果按照计算图会更加直观,基本不需要数学推导过程,用肉眼看图就可以理解反向传播的四个公式。当然前提是计算图要画的清晰明白。花了半天时间来写这篇文章,其中画图花费了80%的时间,尤其是计算图改了N次,仍然可能存在错误,欢迎指正~
点赞(分享)就是对文章作者的最大鼓励~
------下面只是备份下用过的公式,以备后面修改使用 ------------
------------------------ 备份 end ----------------------------------------------