<!doctype html>
反向传播算法简介(BP,Backpropagation algorithm)
原文:http://neuralnetworksanddeeplearning.com/chap2.html
BP 算法所关注的是神经网络中损失函数 C (cost function) 与每一个权重 和偏置 的偏导。BP 不仅仅是一个快速的算法,其同时为我们提供了一个视角,让我们观察权值和偏置是如何影响网络输出的。
译者注:本文中所描述的网络以层为单位,如果把层当做图的节点,数据流向作为图的有向边,那么本文所描述的网络所抽象出的图一定是有向无环的。本文并没有翻译原文所有内容。
热身:利用矩阵实现网络计算
先介绍一个网络权重的数学标记法:,这个数学标记表示神经网络中第 层网络的第 个元素和第 层第 个元素之间的权重。同样, 表示第 层第 个元素的偏置值, 表示 层第 个元素的激活函数输出值。利用这种数学表示, 可以表示为:
使用矩阵形式表示上述表达式:
定义 为激活函数的输入值则可以将上面表达式 表示为:
损失函数的两个特点
BP 算法用于计算网络中所有权重 和偏置 关于损失函数 的偏导数 和。为了使 BP 算法正常运行,损失函数需要满足两个条件。在给出这两个条件前,我们先介绍一种常用的均方差损失函数,如式所示:
表达式 中变量解释如下, 是训练网络的样本个数; 是训练样本 的期望值(也就是样本的标签); 表示网络的层数; 是网络在输入为 时输出层的输出。
现在描述我们对损失函数的要求。首先,损失函数可以写成所有训练样本损失值均值的形式: 。
我们做上面的要求是因为训练的过程中我们常常使用批训练的方式,而不是每次只训练一个样本。批训练之后我们求当前批次样本损失值的平均数来更新权重和偏置,所以损失函数要满足叠加定理。
其次,损失函数可以使用网络输出层的输出作为参数:, 是网络输出层的输出,如果不满足这个要求我们将不能定量分析网络的性能。以均方差损失函数为例,当样本为时,网络的损失值为:
上式中所有元素的值都是已知的, 是标签、 是网络输出层的输出。
Hadamard 积,
Hadamardd 积(哈达玛积)表示矩阵按对应元素做乘法:,例如:
BP 算法所依赖的四个方程
BP 算法用于计算网络中权值与偏置关于网络损失值的偏导,也就是计算:和 。在给出这四个方程前我们先引入一个中间变量 ,这个变量表示网络第 层第 个元素的输入值()对整个网络损失的影响。BP 算法可以帮我们计算出 ,然后我们就可以通过 得到和 。
为了便于理解,这里我们假设网络中的某个神经元(第 层第 个)旁边住着一个小恶魔,它可以帮我们调整神经元的输入()。小恶魔不出手时这个神经元的输入为:,小恶魔出手后,当前神经元的输入为:,其中 是小恶魔做的调整,此时这个神经元的输出为 。小恶魔对当前神经元的调整最终将影响整个网络的输出,小恶魔出手后对整个网络损失值的影响为:。
如果这是一个善良的小恶魔,那么它可以帮我们调整输入以减少网络的损失值。如果 的值不为0,那么调整