反向传播算法
Last updated
Last updated
我们希望有个算法,能够让我们找到权重和偏置,以至于神经网络的输出能够拟合所有的训练输入。为了量化我们如何实现这个目标,我们定义一个代价函数:
这里表示所有网络中权重的集合,是所有的偏置,是训练输入数据的个数,表示网络的层数,是表示当输入为时的网络输出的激活值向量,求和则是在总的训练输出上进行的。符号是指向量的模。我们把称为二次代价函数;有时也别称为均方误差或者MSE。
代价函数是非负的,因为求和公式中的每一项都是非负的。此外,当对于所有的训练输入,接近于输出时,代价函数的值相当小,即。
反向传播算法给出了一个计算代价函数梯度的的方法:
输入:为输入层设置对应的激活值
前向传播:对每个计算相应的的和
输出层误差:计算向量
反向误差传播:对每个,计算
输出:代价函数的梯度由和得出。
第二个假设就是代价可以写成神经网络输出的函数
Hadamard 乘积是按元素乘法的运算
接下来我们介绍四个基本方程。
反向传播算法的目标是计算代价函数分别关于和的偏导数和。为了让方向传播可行,我们需要做出关于代价函数的两个主要假设。
第一个假设就是代价函数可以被写成一个在每个训练样本上的代价函数的均值。对于二次代价函数,每个独立的训练样本的代价是,这个假设对于其他的代价函数也必须满足。需要这个假设的原因是反向传播实际上是对一个独立的训练样本计算了和,然后通过在所有的训练样本上进行平均化获得和。
如图所示,将代价函数看成仅有输出激活值的函数。
假设和是两个相同维度的向量,那么我们使用来表示按元素的乘积。所以的元素就是。
反向传播其实是对权重和偏置变化影响代价函数过程的理解。最终的含义就是计算偏导数和。为了计算这些值,我们先引入一个中间量,这个称之为在的第个神经元上的误差。反向传播将给出计算误差的流程,然后将其关联到计算上面两个偏导数上面。
假定在层的第神经元上,对神经元的带权输入增加很小的变化,这使得神经元的输出由变成,这个变化会向网络后的层进行传播,最终导致整个代价产生的改变。 假如是一个很大的值(或正或负),那么可以通过选择与其相反的符号的来降低代价。相反如果是一个接近于的值,这时候并不能通过调整输入来改善多少代价。所以这里有个启发式的认识,是神经元的误差度量。
按照上面的描述,我们定义层的第个神经元的上的误差为
我们使用表示关联于层的误差向量。