当我们使用前馈神经网络接收输入反向传播 - 图1并产生输出反向传播 - 图2时,信息通过网络向前流动。输入反向传播 - 图3提供初始信息,然后传播到每一层的隐藏单元,最终产生输出反向传播 - 图4,这称之为前向传播。在训练过程中,前向传播可以持续向前直到它产生一个标量代价函数反向传播 - 图5。反向传播算法(Back Propagation),允许来自代价函数的信息通过网络向后流动,以便计算梯度。建议边在http://playground.tensorflow.org/上操作,边看本文。

链式法则

微积分中的链式法则(为了不与概率中的链式法则相混淆)用于计算复合函数的导数。反向传播是一种计算链式法则的算法,使用高效的特定运算顺序。

反向传播 - 图6是实数,反向传播 - 图7反向传播 - 图8是从实数映射到实数的函数。反向传播 - 图9并且反向传播 - 图10。那么链式法则是说:

反向传播 - 图11

我们可以将这种标量情况进行拓展。假设假设反向传播 - 图12反向传播 - 图13反向传播 - 图14是从反向传播 - 图15反向传播 - 图16的映射,反向传播 - 图17反向传播 - 图18反向传播 - 图19的映射。如果反向传播 - 图20并且反向传播 - 图21,那么

反向传播 - 图22

使用向量记法,可以等价地写成
反向传播 - 图23

这里反向传播 - 图24反向传播 - 图25反向传播 - 图26的Jacobian矩阵。

通常我们将反向传播算法应用于任意维度的张量,而不仅仅用于向量。从概念上讲,这与使用向量的方向传播完全相同。唯一的区别是如何将数字排列称网格以形成张量。我们可以想象,在运行反向传播之前,将每个张量扁平为一个向量,计算一个向量值梯度,然后将该梯度重新构造成一个张量。从这种重新排列的观点上看,反向传播仍然只是将Jacobian乘以梯度。

反向传播

在进行DNN反向传播算法前,我们需要选择一个损失函数,来度量训练样本计算出的输出和真实的训练样本输出之间的损失。DNN可选择的损失函数有不少,为了专注算法,这里我们使用最常见的均方差来度量损失。当然,针对不同的任务,可以选择不同的损失函数。即对于每个样本,我们期望最小化下式:

反向传播 - 图27

其中,反向传播 - 图28反向传播 - 图29反向传播 - 图30维度的向量,而反向传播 - 图31反向传播 - 图32反向传播 - 图33范数。损失函数有了,现在我们开始用梯度下降法迭代求解每一层的反向传播 - 图34反向传播 - 图35

第一步

首先是输出层(第反向传播 - 图36层)。输出层的反向传播 - 图37反向传播 - 图38满足下式:

反向传播 - 图39

这样对于输出层的参数,我们的损失函数变为:

反向传播 - 图40

这样求解反向传播 - 图41反向传播 - 图42的梯度就简单了:

反向传播 - 图43

反向传播 - 图44

上面式子前两项之所以是Hadamard积反向传播 - 图45形式,是因为反向传播 - 图46都是针对同一层的神经元。如果我们考虑对于反向传播 - 图47层的第反向传播 - 图48个神经元,即反向传播 - 图49,那么整合这一层的神经元,自然是反向传播 - 图50这样Hadamard积的形式。

反向传播 - 图51在第一个式子的最后是因为若反向传播 - 图52,那么反向传播 - 图53

第二步

我们注意到在求解输出层的反向传播 - 图54反向传播 - 图55时,有公共的部分反向传播 - 图56,因此我们可以把公共的部分即对反向传播 - 图57先算出来,记为

反向传播 - 图58

根据第一步的公式我们可以把输出层的梯度计算出来,计算上一层反向传播 - 图59 ,上上层反向传播 - 图60…的梯度就需要步步递推了:对于第反向传播 - 图61层的未激活输出反向传播 - 图62,它的梯度可以表示为

反向传播 - 图63

如果我们可以依次计算出第反向传播 - 图64层的反向传播 - 图65,则该层的反向传播 - 图66反向传播 - 图67就很好计算了,因为根据前向传播:

反向传播 - 图68

所以我们可以很方便的计算出第反向传播 - 图69层的反向传播 - 图70反向传播 - 图71的梯度如下

反向传播 - 图72

反向传播 - 图73

第三步

现在问题的关键就是求反向传播 - 图74了。这里我们使用数学归纳法,假设第反向传播 - 图75层的反向传播 - 图76已经求出,那我们如何求第 反向传播 - 图77层的反向传播 - 图78呢:
反向传播 - 图79

可见,关键在于求解反向传播 - 图80,而反向传播 - 图81反向传播 - 图82的关系很容易求出:

反向传播 - 图83

这样可得

反向传播 - 图84

上式的意思是反向传播 - 图85的每一列都是Hadamard积反向传播 - 图86 ,将上式代入 反向传播 - 图87,得
反向传播 - 图88
反向传播 - 图89

总结

其实,对于更新每一层的反向传播 - 图90的对应梯度,我们仔细观察整个过程,发现只需要四个公式就可以完整地进行更新。这就是著名的反向传播的四个公式。我们稍加改动,使其可以适用于多种损失函数,即:

反向传播 - 图91
反向传播 - 图92
反向传播 - 图93
反向传播 - 图94

Source

https://blog.csdn.net/anshuai_aw1/article/details/84666595
https://arxiv.org/pdf/1411.2738.pdf