上一篇文章算是用“链式法则”给我们开了个头,下一篇文章则是将反向传播算法应用到神经网络。

 

原文出处:知乎 https://zhuanlan.zhihu.com/p/25081671

 

作者:晓雷
链接: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次,仍然可能存在错误,欢迎指正~

相关文章: