一、多层前馈神经网络

要解决非线性可分问题,需考虑使用多层功能神经元。

输入层和输出层之间的一层神经元,被称为隐层或隐含层(hidden layer)。

隐含层和输出层神经元都是拥有激活函数的功能神经元。

更一般的,常见的神经网络如下图所示的层级结构:

图1 多层前馈神经网络结构示意图

每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforward neural networks),其中输入层神经元接受外界输入,隐层和输出层神经元对信号进行加工,最终结果由输出层神经元输出。

(换句话说,输入层神经元仅接受输入,不进行函数处理。)

(a)图通常称为“两层神经网络”,为避免歧义,将其命名为单隐层网络(只需包含隐层,即可称为多层网络)。

神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值,换言之,神经网络学到的东西,蕴含在连接权和阈值中。

二、标准误差逆传播算法(标准BP算法)

BP算法亦称为“反向传播算法”。

通常说的“BP网络”一般是指BP算法训练的多层前馈神经网络。

下面讲解什么是BP算法?

BP算法的基本思想是:

(1)正向传播FP(求损失):在这个过程中,我们根据样本的输入,给定的初始化权重值W和偏置项的值b,计算最终输出值以及输出值与实际值之间的损失值。如果损失值不在给定的范围内则进行反向传播的过程,否则停止W,b的更新。

(2)反向传播BP(回传误差):将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号。此误差信号即作为修正各单元权值的依据。

以三层感知机结构为例,说明BP算法的一般计算方法

给定训练集

即输入示例由d个属性描述,输出l维实值向量。

为了便于讨论,给出下图:

上图给出了一个拥有d个输入神经元,l个输出神经元、q个隐层神经元的多层前馈神经网络。

输出层第j个神经元的阈值用表示,隐层第h个神经元的阈值用表示。输入层第i个神经元与隐层第h个神经元之间的连接权用表示。隐层第h个神经元与输出层第j个神经元之间的连接权用表示。

记隐层第h个神经元接收到的输入为

输出层第j个神经元接收到的输入为,其中为隐层第h个神经元的输出。

假设隐层和输出层都是用sigmoid函数。

对训练例,假定神经网络的输出为,即

则网络在上的均方误差为:

网络中需要确定的参数为:输入层到隐层的个权值,隐层到输出层的个权值,q个隐层神经元的阈值,l个输出层神经元的阈值。一共是个参数。

BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计。

以隐层到输出层的连接权为例来进行推导。

BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,给定学习率η,有:

注意到先影响到第j个输出层神经元的输入值,再影响到其输出值,然后影响到,

根据链式法则有:

因为,所以:

Sigmoid函数有一个很好的性质为:

因为:,所以

因为:,所以,故:

(输出层神经元的梯度项)

所以,

类似地,注意到首先影响到输出值,再影响到,所以有:

类似地,隐层神经元的梯度项的求解为:

首先注意到首先影响到第h个隐层神经元的输入值,在影响到隐层神经元的输出值,最后影响到,所以有:

其中,由于是隐层神经元的输出,则,那么

(隐层神经元的梯度项)

所以, 

类似地,注意到首先影响到输出值,再影响到,所以有:

经过推导,得出(标准)BP算法的步骤为:


输入:训练集;学习率

过程:

在(0,1)范围内随机初始化网络中所有连接权和阈值

repeat:

for all(

根据当前参数和计算当前样本的输出;

计算输出层神经元的梯度项;

计算隐层神经元的梯度项;

更新连接权与阈值

end for

until 达到停止条件

输出:连接权与阈值确定的多层前馈神经网络


需要注意的是,BP算法的目标是要最小化训练集D上的累积误差

但是从我们上面的BP算法过程来看,我们每次针对一个训练样例更新连接权和阈值,也就是说,上述算法的更新规则是基于单个的Ek推导而得。

如果类似地推导出基于累积误差最小化得更新规则,就得到了累积误差逆传播算法。他在读取整个数据集D一遍后,才对参数进行更新

由于BP神经网络强大得表示能力,所以其经常遭遇过拟合。即训练误差持续降低,但测试误差却可能上升。有两种策略缓解BP网络得过拟合:

(1)早停:将数据分成训练集和测试集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低,但验证集误差升高,则停止训练,同时返回最小验证集误差的连接权和阈值。

(2)正则化:在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和。仍令Ek表示第k个训练样例上的误差,wi表示连接权和阈值,则误差目标函数为:

其中,在(0,1)中,用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法估计。

机器学习算法——神经网络3(误差逆传播算法-BP算法)相关推荐

  1. 人工智能知识全面讲解:多层神经网络与误差逆传播算法

    7.3.1 从单层到多层神经网络 明斯基教授曾表示,单层神经网络无法解决异或问题,但是当增加一个计 算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分 类效果.只是两层神经网络的计算 ...

  2. 《机器学习与数据挖掘》实验五 编程实现误差逆传播算法(BP算法)

    前言: 摘要:本文对机器学习实验五 标准BP算法的代码进行实现,如果不了解的BP算法的话,可以自行上网搜索BP算法的详解. 实验题目:编程实现误差逆传播算法(BP算法) 实验目的:掌握误差逆传播算法( ...

  3. BP算法误差逆传播参数更新公式推导

    BP算法误差逆传播参数更新公式推导

  4. BP(BackPropagation)误差逆传播算法

    上篇文章介绍了多层前馈神经网络,那么这种网络是怎样训练生成的呢,BP算法就是其中一种生成多层神经网络的算法 ,又称为反向传播算法,下面来了解一下BP算法. 举例: 下图中是根据一个手写数字辨识的神经网 ...

  5. 误差逆传播算法公式理解及推导

    前言:公式理解及推导参考自<机器学习>周志华 P101 BP网络 BP网络一般是指由 误差逆传播(error BackPropagation, BP)算法训练的多层前馈神经网络. 给定训练 ...

  6. 深度学习(一)——MP神经元模型, BP算法, 神经元激活函数, Dropout

    https://antkillerfarm.github.io/ 前言 神经网络本质上不是什么新东西.十年前,我还在上学的时候,就接触过皮毛.然而那时这玩意更多的还是学术界的屠龙之术,工业界几乎没有涉 ...

  7. 有关神经网络的训练算法,神经网络训练计算器app

    为什么要用GPU来训练神经网络而不是CPU? 许多现代神经网络的实现基于GPU,GPU最初是为图形应用而开发的专用硬件组件.所以神经网络收益于游戏产业的发展. 中央处理器(central proces ...

  8. 机器学习入门学习笔记:(1)BP神经网络原理推导及程序实现

    机器学习中,神经网络算法可以说是当下使用的最广泛的算法.神经网络的结构模仿自生物神经网络,生物神经网络中的每个神经元与其他神经元相连,当它"兴奋"时,想下一级相连的神经元发送化学物 ...

  9. 机器学习西瓜书笔记:神经网络:BP算法公式推导

    1.变量符号含义 1.训练集D={(x⃗1,y⃗1),(x⃗2,y⃗2),...,(x⃗m,y⃗m)}D = \{(\vec{x}_1, \vec{y}_1), (\vec{x}_2, \vec{y} ...

  10. 神经网络——BP算法

    一.BP算法的意义 对于初学者来说,了解了一个算法的重要意义,往往会引起他对算法本身的重视.BP(Back Propagation,后向传播)算法,具有非凡的历史意义和重大的现实意义. 1.1.历史意 ...

最新文章

  1. find的命令的使用和文件名的后缀
  2. svn命令行使用说明
  3. C++ 工程实践(2):不要重载全局 ::operator new()
  4. 从0开始架构一个IOS程序——03 — -分包用添加pch全局引用文件
  5. Debian下PostgreSQL修改密码与配置详解
  6. 怎么把c语言变成汇编语言,如何把汇编语言转换成C语言
  7. golang使用redis——redigo安装
  8. CSS颜色表示的几种方式
  9. svn插件Subclipse
  10. python笔记三之面向对象(继承,封装,多态)
  11. Python学习记录 helloPython
  12. 160个crackme 024详细题解(动态指令)
  13. Python分布式通用爬虫(4)
  14. 微信小程序开发 - 视图与逻辑
  15. 【java】除法,除数后缀
  16. openssl命令查看证书有效期_kubeadm初始化k8s集群延长证书过期时间
  17. centos7-登录显示名称及登录欢迎界面设置
  18. java和基岩版凋零打法,六种凋零打法介绍 凋零还可以这么打
  19. 抖音不做真人出镜,打造百万粉运营攻略!
  20. java多态优化多个if_脑壳疼!代码中那么多“烦人”的if else

热门文章

  1. 世界时间经纬_世界纬度和经度地图
  2. .Net框架搭建之辅助模版代码生成工具
  3. 攻防世界 逆向 logmein
  4. JavaSE——多线程
  5. 实例6.1 六度空间 (30 分)+C语言实现
  6. AXD 查看register笔记
  7. 规则三度体磁力异常 matlab,三维强磁性体的勘探方法及勘探系统与流程
  8. Java字符串常见面试题
  9. MySQL大批量造数据
  10. 【后缀数组+???】BZOJ3654 图样图森破