神经网络:误差逆传播算法
这段时间实在是太忙了,没有更新,今天继续给大家带来神经网络的基础知识。神经网络是如何进行具体的学习与参数的更新的。
上一回我们说到,理论上多层神经网络可以拟合所有的函数。多层网络的学习能力比单层感知机强得多,所以想训练多层网络,简单感知机学习规则显然不够了,需要更强大的学习算法。误差逆传播算法(error Back Propagation , BP)就是其中最杰出的代表,现实项目中使用神经网络时,大多是在使用BP算法进行训练。值得指出的是, BP算法不仅可用于多层前馈神经网络, 还可用于其他类型的神经网络案例,如训练递归神经网络。但通常说“BP 网络”时,一般是指用BP 算法训练的多层前馈神经网络。
BP算法具体是什么意思呢?假设我们给定一个训练集 , ,
同时有 ,即输入示例有d个属性,输出l维实值向量,如上图所示。其中, 表示第j个神经元的阈值; 表示隐层第h个神经元的阈值; 表示连接的权值。那么隐层第h个神经元接收到的输入为:
输出层第j个神经元接收到的输入为:
其中
那么假设隐层和输出层的神经元都使用前一篇文章中提到的Sigmoid函数。对于训练集 ,假定神经网络的输出为 ,即:
则网络在 上的均方差为:
那么BP网络图中就一共有(d + l + 1) * q + l 个参数需要确定:
在BP的迭代学习过程中,在迭代的每一轮都采用广义的感知机学习规则对参数进行更新估计,任意参数v的更新估计式为:
下面我们以“隐层到输出层的连接权 表示”为例子来说明参数更新估计过程。BP算法是基于梯度下降(gradient descent)策略,以目标函数的负梯度方向(函数值最快下降的方向)对参数进行调整,对于上面给定的误差 ,给定一个学习率η,则有:
注意到 先影响到第j个输出层神经元的输入值 ,再影响到其它的输出值 ,然后影响到 ,有:
根据 的定义,显然有:
根据Sigmoid函数的性质:
于是根据上述公式我们可以得到:
在带回到BP算法中 的更新公式中,得到:
类似地可以得到:
其中:
学习率η的取值一般在(0,1)之间,控制着算法每一轮迭代中的更新步长, 若太大则容易震荡,太小则收敛太慢,常设置为η = 0.1。有时为了做比较精细的调整,可以定义另一个学习率,在不同的更新式中分别使用,两者可以不相等。
那么整个训练过程的伪代码如下所示:
对每个训练样例,BP算法执行以下操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差(第4-5行),再将误差逆向传播至隐层神经元(第6行),最后根据隐层神经元的误差来对连接权和阈值进行调整(第7行)。该法代过程循环进行,直到达到某些停止条件为止,例如训练误差己达到一个很小的值。
在周志华老师的《机器学习》中有这么一个例子。考虑西瓜数据集的一个子集,含有2个属性(根蒂和脐部) 的5个样本。
随着训练轮数(读取训练集一遍)的增加,网络参数和分类边界的变化情况如下所示:
- 点赞
- 收藏
- 关注作者
评论(0)