上一讲介绍了神经网络的前向传播,本讲开介绍反向传播理论,还是以之前的网络为例,不熟悉的同学可以翻看前一讲回顾一下。
反向传播是一个误差传递、权重更新的过程,运用的主要方法就是梯度下降,既然梯度下降需要每一层都有明确的误差才能更新参数,所以接下来的重点是如何将输出层的误差反向传播给隐藏层。
其中输出层、隐藏层节点的误差如图所示,输出层误差已知,接下来对隐藏层第一个节点c作误差分析。还是站在节点c上,不同的是这次是往前看(输出层的方向),可以看到指向c节点的两个蓝色粗箭头是从节点e和节点f开始的,因此对于节点c的误差肯定是和输出层的节点e和f有关。
不难发现,输出层的节点e有箭头分别指向了隐藏层的节点c和d,因此对于隐藏节点e的误差不能被隐藏节点c霸为己有,而是要服从按劳分配的原则(按权重分配),同理节点f的误差也需服从这样的原则,因此对于隐藏层节点c的误差为:
同理,对于隐藏层节点d的误差为:
为了减少工作量,我们还是写成矩阵相乘的形式:
你会发现这个矩阵比较繁琐,如果能够简化到前向传播那样的形式就更好了。实际上我们可以这么来做,只要不破坏它们的比例就好,因此我们可以忽略掉分母部分,所以重新成矩阵形式为:
仔细观察,你会发现这个权重矩阵,其实是前向传播时权重矩阵w的转置,因此简写形式如下:
接下来关于链式求导的问题,前面介绍了输入信息的前向传播与输出误差的后向传播,接下来就根据求得的误差来更新参数。
首先对隐藏层的w11进行参数更新,更新之前让我们从后往前推导,直到预见w11为止:
因此误差对w11求偏导如下:
求导得如下公式(所有值已知):
同理,误差对于w12的偏导如下:
同样,求导得w12的求值公式:
同理,误差对于偏置求偏导如下:
带入上述公式为:
接着对输入层的w11进行参数更新,更新之前我们依然从后往前推导,直到预见第一层的w11为止(只不过这次需要往前推的更久一些):
因此误差对输入层的w11求偏导如下:
求导得如下公式:
同理,输入层的其他三个参数按照同样的方法即可求出各自的偏导,在这不再赘述。
在每个参数偏导数明确的情况下,带入梯度下降公式即可(不在重点介绍):
至此,利用链式法则来对每层参数进行更新的任务已经完成。
祝您的机器学习之旅愉快!
领取专属 10元无门槛券
私享最新 技术干货