Backpropagation(反向传播)缩写为BP,是“偏差反向传播”的简称,是一种与最优化方法(如梯度低落法)相结合利用的、目前演习人工神经网络的常见方法。

若何直不雅观地解释 backpropagation 算法?_算法_神经收集 智能问答

反向传播算法的基本思想是,学习过程由旗子暗记的正向传播和偏差的反向传播两个过程组成,输入从输入层输入,经隐层处理往后,传向输出层。
如果输出层的实际输出和期望输出不符合,就进入偏差的反向传播阶段。

偏差反向传播是将输出偏差以某种形式通过隐层向输入层反向传播,并将偏差分摊给各层的所有单元,从而得到各层单元的偏差旗子暗记,这个偏差旗子暗记就作为改动各个单元权值的依据,直到输出的偏差知足一定条件或者迭代次数达到一定次数。

与机器学习里面最基本也非常有用的算法LMS学习规则一样,反向传播近似最速低落算法,该方法对网络中所有权重打算丢失函数的梯度。
这个梯度会反馈给最优化方法,用来更新权值以最小化丢失函数。

反向传播哀求对每个输入值想得到的已知输出,来打算丢失函数梯度。
因此,它常日被认为是一种监督式学习方法,虽然它也用在一些无监督网络(如自动编码器)中。
它是多层前馈网络的Delta规则(英语:delta rule)的推广,可以用链式法则对每层迭代打算梯度。
反向传播哀求人工神经元(英语:artificial neuron)(或“节点”)的勉励函数可微。

LMS算法和反向传播之间的差异仅在于打算导数的办法。

对付单层线性网络来说,偏差是网络权重的显式线性函数,其相对付权重的导数可以很随意马虎地皮算出来。
在具有非线性通报函数的多层网络中,网络权重与偏差之间的关系更为繁芜。
为了打算权重的导数,须要利用微积分的链式法则。

《深度学习事理与实践》的书中有这样一个例子。

深度学习事理与实践(异步图书出品)

反向传播算法中利用到的变量示例

如图所示,假设神经网络中的一个参数

发生了小幅度的改变,那么这个改变将会影响后续激活值的输出,下一层根据这个激活值连续今后通报该改变。
如此一层一层地今后通报,直到丢失函数吸收到该改变为止。
终极这个小幅度的改变影响了全体网络,犹如在水面上划了一下,水波向外扩散影响了全体湖面的沉着。

为了知道这个改变的幅度,我们选择从网络的末了一层(输出层)开始,利用丢失函数向前求得每一层每一个神经元的偏差,从而得到这个参数的梯度(原始的小幅度的改变值)。

由于神经网络的构造模型繁芜——多层网络进行排列堆叠,如何合理打算丢失函数的梯度是一个严厉的寻衅。

梯度低落算法从整体出发,求得网络中参数的梯度后对参数进行更新,而如何求得网络参数的梯度则是反向传播算法须要做的事情。

虽然在神经网络中,求网络参数的梯度不一定利用反向传播算法,并且反向传播算法有收敛慢、随意马虎陷入局部最小解等缺陷,但是其易用性、准确率却是其他求解梯度算法无法比拟的。
因此在当代神经网络中,反向传播算法被广泛利用。
为了便于理解反向传播算法,《深度学习事理与实践》中还举了这样的例子:

现在有一个口述绘画游戏,第1个人看一幅画(输入数据), 描述给第2个人(隐层)……依次类推,到末了一个人(输出)的时候,画出来的画肯定与原画不太像(偏差较大)。
下面开始反向传播算法,我们把画拿给末了一个人看(打算丢失函数), 然后末了一个人见告前面一个人下次描述时须要把稳哪些地方画错了(通过丢失打算梯度)……同样依次类推,直到第1个人。

当然该例子可能会与真正的反向传播算法有一定的差别,下面我们来看其数学定义。

假设神经网络模型的参数为

,那么反向传播算法的精髓是:通过链式求导法则,求出网络模型中的每个参数的导数


由于神经网络模型构造繁芜,随着网络层数和节点数的增加,网络中的参数也会越来越多。
为了便于打算机对神经网络中的参数进行跟踪和存储记录,我们可以通过打算图(Computation Graph) 来对反向传播算法进行初步理解。

1. 理解打算图

打算图可以看作一种用来描述打算函数的措辞,图中的节点代表函数的操作,边代表函数的输入。
如图所示,打算图的函数为:

反向传播算法希望通过链式法则得到式中

的各个参数的梯度:


假设

输入的数据分别是-5、2、-6,根据链式法则,我们可以得到式中的各个参数的梯度值为:

下图所示为单个神经元模型的打算图展开示例,

为神经元的输出,

分别为该神经元的输入,

为求和节点。

神经元展开打算图示例图。
(a) 为带有两个输入的神经元模块, (b) 为该神经元模型。

从图中可以看出,神经网络的反向传播算法便是利用打算图的事理,从网络的输出层开始,反向打算神经网络中每一个参数的梯度。
然后通过梯度低落算法,以一定的学习率根据梯度低落算法的基本公式

对神经网络中的参数进行更新,接着运行一次向前传播算法,得到新的丢失值。
对上述步骤不断迭代,便是全体神经网络演习的过程。

反向传播算法的打算方法跟打算图一样,其核心思想是通过链式求导法则,得到网络中每个参数的梯度。
这里不再给出上图中的打算过程。

对付神经网络的学习,如果只强调求解、推导中的数学依据对理解算法是不利的。
当然,不理解数学依据更加不利,我们关心的重点不仅仅是数学本身,而更该当关注其最核心的事理,大略的高数求导是建立深度学习的根本!

关于BP算法的详细推导可见《深度学习事理与实践》这本书。

当然,我们也可以把反向传播算法视为一个黑盒子,连续向下看。

2. 反向传播算法流程

利用反向传播算法的4个基本方程,可以很清晰地对反向传播算法流程进行总结。

反向传播4个基本方程

输入(Input) :输入层输入向量 。
向前传播(Feed Forward) : 打算 。
输出层偏差(Output Error) : 根据公式BP1打算偏差向量

反向传播偏差(Backpropagate Error) : 根据公式BP2逐层反向打算每一层的偏差

输出(Output) : 根据公式BP3和BP4输出丢失函数的偏置。

在演习阶段,反向传播算法的事情办法便是把数据传着迷经网络,然后经由一次向前传播后,得到每一层的输出数据。
接着开始从输出层往前打算每一层的偏差,直到第一层(输入层)为止。
末了根据每一层的偏差数据打算每一个丢失函数关于偏置和权重参数的偏导,而这个偏导便是网络中参数的变革率。

有了这个变革率之后,我们就可以利用梯度低落算法更新一次网络中的参数。
如此循环迭代,利用反向传播算法来求得网络参数的变革率,并用于更新网络的参数,终极使得丢失函数收敛到局部最小值,演习阶段结束。

3. 反向传播算法的实现

在实现反向传播算法之前,我们须要定义神经网络的模型架构,即神经网络有多少层、每一层有多少神经元。
其余,还须要给入迷经网络定义演习的数据和实际的输出。

不才面代码中, network sizes为用于测试的神经网络的模型架构,该网络一共有3层,输入层有3个神经元,隐层有4个神经元,输出层有2个神经元,如图所示。

接着我们根据网络模型的大小,利用高斯分布函数的权重参数 weights 和偏置参数 biases 产生均值为0、方差为1的随机值。
(我们这里利用大略的高斯分布即可)

为了方便反向传播算法流程的代码实现,不才面代码中,我们对丢失函数、激活函数和激活函数的求导进行了定义。
丢失函数利用了均方偏差

作为该神经网络的丢失函数,因此求导后的输入分别为网络的预测值和真实输出值,输出为两者之差,其余,激活函数利用了 Sigmoid函数。

完成了对神经网络模型的架构定义和一些赞助函数之后,剩下的是下面代码中的反向传播算法的核心实现,按照上文中的反向传播算法流程实现。

backprop()函数的输入为x和y, 个中x为(3, 1) 的矩阵,y为(2, 1) 的矩阵。
根据反向传播算法的4个基本公式(BP1~BP4) 的打算中须要知道每一层神经元的激活值和加权输入值,因此在进行向前传播时,分别利用activations 记录每一层的激活值和 zs 记录每一层的加权输入值。

接下来是反向传播函数的核心代码,实现4个基本公式。
既然是反向传播,那么我们首先从输出层

进行打算,因此先打算输出层的偏差,然后打算丢失函数关于输出层

中的偏置和权重参数的偏导。
末了的循环为 range (2,num_layers) , 意思是从网络的倒数第二层开始,往前打算第

层的丢失值,以及丢失函数关于第

层的偏置和权重参数的偏导。
末了输出一次反向传播后,得到关于丢失函数的所有参数的偏导。

详情可见《深度学习事理与实践》第二章人工神经网络 第2.3.3小节 反向传播算法

虽然BP神经网络有三个非常显著的优点:

非线性映射能力;泛化能力;容错能力;许可输入样本中带有较大偏差乃至个别缺点。
反应精确规律的知识来自全体样本,个别样本中的偏差不能旁边对权矩阵的调度。

不过BP神经网络也有着较为明显的毛病。

例如须要的参数过多,而且参数的选择没有有效的方法。
确定一个BP神经网络须要知道网络的层数、每一层神经元的个数和权值。

再例如权值可以通过学习得到,如果隐层神经元数量太多会引起过学习,如果隐层神经元个数太少会引起欠学习。
此外学习率的选择也是须要考虑。
目前来说,对付参数的确定短缺一个大略有效的方法,以是导致算法很不稳定。

并且BP神经网络属于监督学习,对付样本有较大依赖性,网络学习的逼近和推广能力与样本有很大关系,如果样本凑集代表性差、样本抵牾多、存在冗余样本,网络就很难达到预期的性能。

末了由于权值是随机给定的,以是BP神经网络具有不可重现性。

目前针对算法的不敷,也涌现了一些例如动量法、调节学习率法等BP算法的改进。
不过backpropagation仍还有许多须要我们探索的部分。

十分期待backpropagation在未来发挥更大的浸染。