BP(backpropgationalgorithm ):后向传导算法,顾名思义就是从神经网络的输出(顶层)到输入(底层)进行求解。那么求解什么呢,求解的就是神经网络中的参数的导数,即参数梯度方向,从而就可以使用梯度下降等求解无约束问题(cost function的最值)的方法求得最终的参数。神经网络前向传播的过程比较简单,这里不做讲解(如果不了解,可以参看文献)。
1.问题分析
1.1 Cost function
假设我们有一个固定样本集,它包含 m 个样例。我们可以用批量梯度下降法来求解神经网络。具体来讲,对于单个样例(x,y),其代价函数为:
这是一个(二分之一的)方差代价函数。给定一个包含 m 个样例的数据集,我们可以定义整体代价函数为:
以上公式中的第一项J(W,b) 是一个均方差项。第二项是一个规则化项(也叫权重衰减项),其目的是减小权重的幅度,防止过度拟合。
1.2 梯度下降
梯度下降法中每一次迭代都按照如下公式对参数W 和b 进行更新:
由以上公式可以看出我们只需要求解出单个样例对单个参数的导数就可以了。
2. BP算法
如何求取单个样本的costfunction对参数的导数呢,为此我们引入了一个叫做”残差”的概念(也有称为敏感度;残差可以看做是对偏置参数b的导数,偏置变化多少,残差就变化多少,残差就是偏置的变化率)。然后通过这个残差来求解对参数的导数。我们用表示第l层第i个结点的残差,表示第l层第i个结点的激励值,其中:
下面给出反向传导算法的细节:
将上式中的nl-1与nl的关系替换为l和 l+1的关系,就可以得到:
以上逐次从后向前求导的过程即为”反向传导”的本意所在。直观的理解公式就是第l层第i个结点的残差等于第l+1层与其连接的所有结点的权值和残差的加权和再乘以该点对z的导数值。
4:计算我们所需要的偏导数,计算方法如下:
Cost function对参数(第l层第j个结点到第l+1层第i个结点的权值)的导数等于第l层第j个结点的激励值乘以第l+1层第i个结点的残差。
这样反向传播算法就可以表示为以下几个步骤:
实现批量梯度下降法中的一次迭代步骤如下: