BP 神经网络
BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。
一个神经网络的结构示意图如下所示。

BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。输入层神经元的个数由样本属性的维度决定,输出层神经元的个数由样本分类个数决定。隐藏层的层数和每层的神经元个数由用户指定。每一层包含若干个神经元,每个神经元包含一个而阈值
,用来改变神经元的活性。网络中的弧线
表示前一层神经元和后一层神经元之间的权值。每个神经元都有输入和输出。输入层的输入和输出都是训练样本的属性值。
对于隐藏层和输出层的输入
其中,
是由上一层的单元i到单元j的连接的权;
是上一层的单元i的输出;而
是单元j的阈值。
神经网络中神经元的输出是经由赋活函数计算得到的。该函数用符号表现单元代表的神经元活性。赋活函数一般使用simoid函数(或者logistic函数)。神经元的输出为:

除此之外,神经网络中有一个学习率(l)的概念,通常取0和1之间的值,并有助于找到全局最小。如果学习率太小,学习将进行得很慢。如果学习率太大,可能出现在不适当的解之间摆动。
交代清楚了神经网络中基本要素,我们来看一下BP算法的学习过程:
BPTrain(){
初始化network的权和阈值。
while 终止条件不满足 {
for samples中的每个训练样本X {
// 向前传播输入
for 隐藏或输出层每个单元j {
;//
相对于前一层i,计算单元j的净输入
;//
计算单元j的输出
}
// 后向传播误差
for 输出层每个单元j {
;//
计算误差
}
for 由最后一个到第一个隐藏层,对于隐藏层每个单元j {
;//
k是j的下一层中的神经元
}
for network中每个权
{

; // 权增值

; // 权更新
}
for network中每个偏差
{
;
// 偏差增值
;//
偏差更新
}
}
}
算法基本流程就是:
1、初始化网络权值和神经元的阈值(最简单的办法就是随机初始化)
2、前向传播:按照公式一层一层的计算隐层神经元和输出层神经元的输入和输出。
3、后向传播:根据公式修正权值和阈值
直到满足终止条件。
算法中还有几点是需要说明的:
1、关于
,
是神经元的误差。
对于输出层神经元
,其中,
是单元j的实际输
出,而
是j基于给定训练样本的已知类标号的真正输出。
对于隐藏层神经元
,其中,
是由下一较高层中单元k到单元j的连接权,而
是单元k的误差。
权值增量是
,阈值增量是
,其中
是学习率。
对于
的推导采用了梯度下降的算法。推导的前提是保证输出单元的均方差最小。
,其中P是样本总数,m是输出层神经元个数
是样本实际输出,
是神经网络输出。
梯度下降思路就是对
求
的导数。
对于输出层:


其中的
就是
。
对于隐藏层:


其中
=
就是隐藏层的误差计算公式。
2、关于终止条件,可以有多种形式:
§ 前一周期所有的
都太小,小于某个指定的阈值。
§ 前一周期未正确分类的样本百分比小于某个阈值。
§ 超过预先指定的周期数。
§ 神经网络的输出值和实际输出值的均方误差小于某一阈值。
一般地,最后一种终止条件的准确率更高一些。
在实际使用BP神经网络的过程中,还会有一些实际的问题:
1、 样本处理。对于输出,如果只有两类那么输出为0和1,只有当
趋于正负无穷大的时候才会输出0,1。因此条件可适当放宽,输出>0.9时就认为是1,输出<0.1时认为是0。对于输入,样本也需要做归一化处理。
2、 网络结构的选择。主要是指隐藏层层数和神经元数决定了网络规模,网络规模和性能学习效果密切相关。规模大,计算量大,而且可能导致过度拟合;但是规模小,也可能导致欠拟合。
3、 初始权值、阈值的选择,初始值对学习结果是有影响的,选择一个合适初始值也非常重要。
4、 增量学习和批量学习。上面的算法和数学推导都是基于批量学习的,批量学习适用于离线学习,学习效果稳定性好;增量学习使用于在线学习,它对输入样本的噪声是比较敏感的,不适合剧烈变化的输入模式。
5、 对于激励函数和误差函数也有其他的选择。
总的来说BP算法的可选项比较多,针对特定的训练数据往往有比较大的优化空间。
BP 神经网络的更多相关文章
- BP神经网络原理及python实现
[废话外传]:终于要讲神经网络了,这个让我踏进机器学习大门,让我读研,改变我人生命运的四个字!话说那么一天,我在乱点百度,看到了这样的内容: 看到这么高大上,这么牛逼的定义,怎么能不让我这个技术宅男心 ...
- BP神经网络
秋招刚结束,这俩月没事就学习下斯坦福大学公开课,想学习一下深度学习(这年头不会DL,都不敢说自己懂机器学习),目前学到了神经网络部分,学习起来有点吃力,把之前学的BP(back-progagation ...
- 数据挖掘系列(9)——BP神经网络算法与实践
神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropaga ...
- BP神经网络推导过程详解
BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的. 一.多层神经网络结构及其描述 ...
- 极简反传(BP)神经网络
一.两层神经网络(感知机) import numpy as np '''极简两层反传(BP)神经网络''' # 样本 X = np.array([[0,0,1],[0,1,1],[1,0,1],[1, ...
- BP神经网络
BP神经网络基本原理 BP神经网络是一种单向传播的多层前向网络,具有三层或多层以上的神经网络结构,其中包含输入层.隐含层和输出层的三层网络应用最为普遍. 网络中的上下层之间实现全连接,而每层神经元之 ...
- BP神经网络学习笔记_附源代码
BP神经网络基本原理: 误差逆传播(back propagation, BP)算法是一种计算单个权值变化引起网络性能变化的较为简单的方法.由于BP算法过程包含从输出节点开始,反向地向第一隐含层(即最接 ...
- 机器学习(一):梯度下降、神经网络、BP神经网络
这几天围绕论文A Neural Probability Language Model 看了一些周边资料,如神经网络.梯度下降算法,然后顺便又延伸温习了一下线性代数.概率论以及求导.总的来说,学到不少知 ...
- 基于Storm 分布式BP神经网络,将神经网络做成实时分布式架构
将神经网络做成实时分布式架构: Storm 分布式BP神经网络: http://bbs.csdn.net/topics/390717623 流式大数据处理的三种框架:Storm,Spark和Sa ...
- BP神经网络算法学习
BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是眼下应用最广泛的神经网络模型之中的一个 ...
随机推荐
- 为什么选择C++
为什么选择C++,怎么不选其它语言呢? 为什么不选择C? 因为C++比C简单点~ 为什么不选择C#? 因为C++可以在所有操作系统上使用. 为什么不选择JAVA? 因为C++的性能好一点~ 还有其他的 ...
- SpriteKit中节点的z-position
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...
- 生活沉思录 via 哲理小故事
本文转载:http://www.cnblogs.com/willick/p/3174803.html 1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛, ...
- 树莓派初体验,安装Ubuntu 14.04 LTS
转载自:http://www.polarxiong.com/archives/%E6%A0%91%E8%8E%93%E6%B4%BE%E5%88%9D%E4%BD%93%E9%AA%8C-%E5%AE ...
- Asp.net 在刷新或提交页面后保持滚动条的位置
网页内容在较长时,每次回传刷新页面或提交网页时都会定位到最顶端,非常不利于用户交互. 将Page.MaintainScrollPositionOnPostBack属性值设置为true即可实现刷新后保持 ...
- Java并发框架——AQS之阻塞与唤醒
根据前面的线程阻塞与唤醒小节知道,目前在Java语言层面能实现阻塞唤醒的方式一共有三种:suspend与resume组合.wait与notify组合.park与unpark组合.其中suspend与r ...
- Django 实现简单的文件上传
今天分享一下Django实现的简单的文件上传的小例子. 步骤 创建Django项目,创建Django应用 设计模型 处理urls.py 以及views.py 设计模板,设计表单 运行项目,查看数据库 ...
- FFmpeg源代码结构图 - 解码
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
- 1026. Table Tennis (30)
题目如下: A table tennis club has N tables available to the public. The tables are numbered from 1 to N. ...
- Android的ExpandableListView-android学习之旅(二十八)
ExpandableListView简介 ExpandableListView是ListView的子类,用法和ListView类似,ExpandableListView可以创建几个类别,每个类别下面又 ...