[关闭]
@songying 2018-11-08T11:03:37.000000Z 字数 2939 阅读 1111

反向传播算法

deep-learning


参考

零基础入门深度学习(3) - 神经网络和反向传播算法

关于前向传播和反向传播

如果不了解前向传播的话,可以参见:深度学习之从感知机进化到神经网络

简单来说,前向传播就是从输入到输出的计算过程,而反向传播是从输出到输入的更新权重过程。但从数学推导上来讲,反向传播远远要比前向传播复杂的多。反向传播算法在神经网络的训练中占据着举足轻重的作用,而对于不同的神经网络模型又衍生出诸多变体,我们没有必要深究每一个变体的内部机制,因为如TensorFlow这种工具已经将细节封装,我们要掌握的是一种思想。就像一句话所说的那样:弱者重术,强者重道。

反向传播算法的推导

我们知道,神经网络与普通的机器学习方法一样都需要一个叫目标函数或损失函数的东西来评价模型,按照一般机器学习的套路,我们先确定神经网络的目标函数,然后再用随机梯度下降算法去求当目标函数最小时的参数的值。引申到深度学习中,思路是一样的,而这些参数就是权重W。用下图来说的话,就是求 等这些权重的值。

那么如何求呢?我们还是要首先确定目标函数,最常用就是误差平方和了:


我们目的是优化权重W,用梯度下降算法对目标参数优化有:

从上图中我们看出,权重w_{ji} 仅能通过影响节点j的输入影响网络的其他部分,我们假设net_j 是节点j的加权输入,则有:

那么根据链式法则,我们可以有:

现在,我们的目标改为如何求 \frac{\partial{E_d}}{\partial{net_j}} 了,这个式子的求取我们要分为输出层和隐藏层两种情况。

1. 输出层的权值推导

对于输出层而言,从上面的式子中,我们知道 E_d 首先是输出值y_j 的函数,而net_j 表示输出节点j的输入值,如节点8,那么相关的两个公式有:

那么我们最终可以得出:


其中,

那么我们最终可以得出:


我们代入权值优化中,则有输出层的权重为:

2. 隐层权重训练

首先,我们的目标还是要计算 \frac{\partial{E_d}}{\partial{net_j}} ,net_j 表示节点j的加权输入, 如节点4,我们先来看看节点4是如何影响E_d 的。很容易,我们发现节点4是通过影响节点8,9 的加权输入来影响E_d ,我们就说节点8,9是节点4 的下游节点,我们得出结论,net_j 只能通过影响下游节点 Downstream(j) 来影响 E_d 。

我们假设,net_j 是节点j的输入,net_k 是节点 j 的下游节点的输入,E_d 是 net_k 的函数,并且,注意一点,一个节点有一个或多个下游节点,那么我们有:


那么我们可以得出最终对于隐层的权值优化为:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注