BP反向传播其实就是通过链式法则,从后往前一次计算出损失函数对所有参数的偏导,而前向求导的话每次只能求出某一个特定参数关于损失函数的导数,转了两篇文章,第一篇简单的介绍了一下BP,第二篇是根据神经网络详细的推导
本文转自: 链接

十分钟看懂神经网络反向传输算法

昨天面试被问到如何推导BP(反向传输)算法,顿时蒙住了,大体是知道反向传输算法的过程的,但是用语言描述出来,确实有些困难。回来后看了些博文,发现有的博文中公式推导过于复杂,不易理解,遂综合了网络中其他博文和斯坦福大学CS231n课程中的内容,整理了一份反向传输算法的通俗解释,如有错误,请各位网友指出。

一、反向传输(BP)算法的作用是什么?

首先我们要知道我们的优化目标是什么,对于神经网络模型的优化实质上就是对整体损失函数 L(成本函数) 的优化[BP求导]BP反向传播理解

其中 L为样本集中第 i 个样本的损失值,(xi,yi)为第i个样本。

损失函数 L 的自变量是网络中所有的参数,训练的目的是找到一组参数,使得损失函数 L 达到最小值(或者局部最小值)。通常使用梯度下降算法进行优化参数,对于具体的优化算法,这里不再叙述,具体可以参看深度学习——优化器算法Optimizer详解BGDSGDMBGDMomentumNAGAdagradAdadeltaRMSpropAdam一文。这些算法都是阐述了如何更好的使用梯度信息来快速优化成本函数、找到最有解,但这些算法的前提都是获得了成本函数的梯度值,对于深度网络可能有上亿的参数需要优化,如何高效的求解出 L 对这上亿参数的偏导数,便成为一个难题,反向传输(BP)算法即用来高效的计算这些参数的偏导数,进而得出成本函数(损失函数L)的梯度。

补充:

对于欲优化的代价函数,为权重的函数C=C(W),是一个非常复杂的复合函数,直接使用链式法则对各参数求偏导非常复杂。如果使用导数定义进行树数值求导,一个很明显的计算方式是使用近似:

[BP求导]BP反向传播理解

其中[BP求导]BP反向传播理解是一个大于零的小正数。换句话说,我们可以通过计算两个差距很小的wj的代价,然后利用上式来估计[BP求导]BP反向传播理解。这个方法看起来很不错,使用的是导数的定义求法,但是计算过于复杂,设想我们的神经网络中有100万个待优化的参数,计算一次梯度就要重复计算100万次[BP求导]BP反向传播理解。进而对于每一个样本,都要在神经网络中向前传播100万次。而且还需要计算C(W),相当于要一百万零一次前向传播。

反向传播的优点在于他尽力用一次前向传播加一次反向传播就可以同时计算出所有的偏导数[BP求导]BP反向传播理解,大致来讲,反向传播所需要的总计算量与前向传播的计算量基本相等,原因在于前向传播时主要的计算量在于权重矩阵的乘法计算,反向传播时主要的计算量在于权重矩阵转置的乘法,很明显,它们的计算量差不多。利用反向传播算法求成本函数的梯度,大大减小了计算量,使神经网络优化更快!

举个例子:

[BP求导]BP反向传播理解

二、反向传输算法过程

1.链式求导

首先我们回顾一下微积分中对于复合函数的求导过程,对于任意复合函数,例如:

[BP求导]BP反向传播理解

这就是我们常说的链式求导法则。反向传输算法正是利用了这种链式求导法则。

2.用计算图来解释几种求导方法

2.1 计算图

式子 [BP求导]BP反向传播理解 可以用如下计算图表达:

[BP求导]BP反向传播理解

 

令a=2,b=1则有:

[BP求导]BP反向传播理解

如何在计算图上表达“求导”呢? 导数的含义是因变量随自变量的变化率,例如 [BP求导]BP反向传播理解 表示当x变化1个单位,y会变化3个单位。 微积分中已经学过:加法求导法则是 [BP求导]BP反向传播理解 乘法求导法则是 [BP求导]BP反向传播理解 。 我们在计算图的边上表示导数或偏导数:[BP求导]BP反向传播理解 如下图

[BP求导]BP反向传播理解

那么 [BP求导]BP反向传播理解 如何求呢? [BP求导]BP反向传播理解告诉我们1个单位的b变化会引起1个单位的c变换,[BP求导]BP反向传播理解告诉我们 1 个单位的c变化会引起2个单位的e变化。所以 [BP求导]BP反向传播理解 吗? 答案必然是错误。因为这样做只考虑到了下图橙色的路径,所有的路径都要考虑:[BP求导]BP反向传播理解

[BP求导]BP反向传播理解

所以上面的求导方法总结为一句话就是: 路径上所有边相乘,所有路径相加。不过这里需要补充一条很有用的合并策略:

例如:下面的计算图若要计算[BP求导]BP反向传播理解就会有9条路径:[BP求导]BP反向传播理解

[BP求导]BP反向传播理解

如果计算图再复杂一些,层数再多一些,路径数量就会呈指数爆炸性增长。但是如果采用合并策略:[BP求导]BP反向传播理解 就不会出现这种问题。这种策略不是 对每一条路径都求和,而是 “合并同类路径”,“分阶段求解”。先求X对Y的总影响 [BP求导]BP反向传播理解 再求Y对Z的总影响 [BP求导]BP反向传播理解 最后综合在一起。

2.2 两种求导模式:前向模式求导( forward-mode differentiation) 反向模式求导(reverse-mode differentiation)

上面提到的求导方法都是前向模式求导( forward-mode differentiation) :从前向后。先求X对Y的总影响 [BP求导]BP反向传播理解 再乘以Y对Z的总影响 [BP求导]BP反向传播理解 。

[BP求导]BP反向传播理解

另一种,反向模式求导(reverse-mode differentiation) 则是从后向前。先求Y对Z的影响再乘以X对Y的影响。

[BP求导]BP反向传播理解

前向求导模式追踪一个输入如何影响每一个节点(对每一个节点进行 [BP求导]BP反向传播理解操作)反向求导模式追踪每一个节点如何影响一个输出(对每一个节点进行 [BP求导]BP反向传播理解操作)。通俗点理解,前向求导模式和反向求导模式只是求导顺序的不同,但是顺序不同运算复杂度也不相同。

2.3 反向求导模式(反向传播算法)的重要性

让我们再次考虑前面的例子:

如果用前向求导模式:关于b向前求导一次

[BP求导]BP反向传播理解

 

 

如果用反向求导模式:向后求导

[BP求导]BP反向传播理解前向求导模式只得到了关于输入b的偏导[BP求导]BP反向传播理解 ,还需要再次求解关于输入a的偏导[BP求导]BP反向传播理解 (运算2遍)。而反向求导一次运算就得到了e对两个输入a,b的偏导[BP求导]BP反向传播理解 (运算1遍)。上面的比较只看到了2倍的加速。但如果有1亿个输入1个输出,意味着前向求导需要操作1亿遍才得到所有关于输入的偏导,而反向求导则只需一次运算,1亿倍的加速。

当我们训练神经网络时,把“损失“ 看作 ”权重参数“ 的函数,需要计算”损失“关于每一个”权重参数“的偏导数(然后用梯度下降法学习)。 神经网络的权重参数可以是百万甚至过亿级别。因此反向求导模式(反向传播算法)可以极大的加速学习。

用更通俗易懂的话来描述反向传输算法,从目标函数开始,逐层向前求解每一层每个结点(运算)的局部梯度,根据链式法则可知,整个网络中成本函数对于某一个参数的偏导数,从成本函数流经本参数所有指路上的偏导数乘积叠加,这样一次运算就可以获得所有参数的偏导数,即成本函数的梯度。梯度从后向前逐层传递。

通过计算流图对该算法进行简要解释:

[BP求导]BP反向传播理解


 

 附录:机器学习常用求导公式

 X是向量,W是与X无关的矩阵

[BP求导]BP反向传播理解

后两个很重要!!!

本文转自:https://zhuanlan.zhihu.com/p/31623305

神经网络中为了使得损失函数 [BP求导]BP反向传播理解 最小化来选取

本文在采用前馈神经网络与本专栏符号系统 文中符号系统的基础上,对反向传播算法进行推导。


1. 反向传播基本方程

为了便于计算,我们定义 [BP求导]BP反向传播理解 层的第 [BP求导]BP反向传播理解 个神经元上的误差 [BP求导]BP反向传播理解 为:

[BP求导]BP反向传播理解

反向传播算法的基本方程为

[BP求导]BP反向传播理解[BP求导]BP反向传播理解
反向传播基本方程

BP1表示了输出层的误差如何计算,BP2表示了如何根据 [BP求导]BP反向传播理解 层的误差来计算上一层也就是 [BP求导]BP反向传播理解 层的误差,BP3表示了如何根据计算出的每层上每个神经元上的误差来计算参数偏置 [BP求导]BP反向传播理解 的梯度下降方向,BP3表示了如何根据已经计算出的每层每个神经元上的误差来计算参数权重 [BP求导]BP反向传播理解 的梯度下降方向。

1.1 BP1推导

[BP求导]BP反向传播理解

1.2 BP2推导

采用链式法则

[BP求导]BP反向传播理解

其中

[BP求导]BP反向传播理解

求导即可得:

[BP求导]BP反向传播理解

带入上式即可得到:

[BP求导]BP反向传播理解

通过上述两个式子,进行反向传播依次求取即可完成误差 [BP求导]BP反向传播理解 的全部计算,然后基于计算结果计算参数的梯度下降方向

1.3 BP3推导

[BP求导]BP反向传播理解

采用链式法则将 [BP求导]BP反向传播理解 带入即可得到

[BP求导]BP反向传播理解

1.4 BP4推导

同样采用链式法则

[BP求导]BP反向传播理解


2. 反向传播算法

由上述公式我们可以总结出神经网络训练过程,主要分为前向传播和反向传播两个过程,如下所示:

[BP求导]BP反向传播理解[BP求导]BP反向传播理解

相关文章: