神经网络:误差逆传播算法

举报
xia1111 发表于 2020/12/30 22:59:38 2020/12/30
【摘要】 这段时间实在是太忙了,没有更新,今天继续给大家带来神经网络的基础知识。神经网络是如何进行具体的学习与参数的更新的。上一回我们说到,理论上多层神经网络可以拟合所有的函数。多层网络的学习能力比单层感知机强得多,所以想训练多层网络,简单感知机学习规则显然不够了,需要更强大的学习算法。误差逆传播算法(error Back Propagation , BP)就是其中最杰出的代表,现实项目中使用神经网络...

这段时间实在是太忙了,没有更新,今天继续给大家带来神经网络的基础知识。神经网络是如何进行具体的学习与参数的更新的。

上一回我们说到,理论上多层神经网络可以拟合所有的函数。多层网络的学习能力比单层感知机强得多,所以想训练多层网络,简单感知机学习规则显然不够了,需要更强大的学习算法。误差逆传播算法(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个样本。

随着训练轮数(读取训练集一遍)的增加,网络参数和分类边界的变化情况如下所示:

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。