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神经网络算法学习的更多相关文章

  1. bp神经网络算法

    对于BP神经网络算法,由于之前一直没有应用到项目中,今日偶然之时 进行了学习, 这个算法的基本思路是这样的:不断地迭代优化网络权值,使得输入与输出之间的映射关系与所期望的映射关系一致,利用梯度下降的方 ...

  2. 二、单层感知器和BP神经网络算法

    一.单层感知器 1958年[仅仅60年前]美国心理学家FrankRosenblant剔除一种具有单层计算单元的神经网络,称为Perceptron,即感知器.感知器研究中首次提出了自组织.自学习的思想, ...

  3. BP神经网络算法预测销量高低

    理论以前写过:https://www.cnblogs.com/fangxiaoqi/p/11306545.html,这里根据天气.是否周末.有无促销的情况,来预测销量情况. function [ ma ...

  4. 数据挖掘系列(9)——BP神经网络算法与实践

    神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropaga ...

  5. BP神经网络算法推导及代码实现笔记zz

    一. 前言: 作为AI入门小白,参考了一些文章,想记点笔记加深印象,发出来是给有需求的童鞋学习共勉,大神轻拍! [毒鸡汤]:算法这东西,读完之后的状态多半是 --> “我是谁,我在哪?” 没事的 ...

  6. [matlab]bp神经网络工具箱学习笔记

    基本就三个函数: newff():创建一个bp神经网络 train():训练函数 sim():仿真函数 同时具有可视化界面,但目前不知道可视化界面如何进行仿真,且设置不太全 工具箱:Neural ne ...

  7. JAVA实现BP神经网络算法

    工作中需要预测一个过程的时间,就想到了使用BP神经网络来进行预测. 简介 BP神经网络(Back Propagation Neural Network)是一种基于BP算法的人工神经网络,其使用BP算法 ...

  8. BP神经网络算法改进

    周志华机器学习BP改进 试设计一个算法,能通过动态调整学习率显著提升收敛速度,编程实现该算法,并选择两个UCI数据集与标准的BP算法进行实验比较. 1.方法设计 传统的BP算法改进主要有两类: - 启 ...

  9. R_Studio(神经网络)BP神经网络算法预测销量的高低

    BP神经网络 百度百科:传送门 BP(back propagation)神经网络:一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络 #设置文件工作区间 setwd('D:\\ ...

随机推荐

  1. ios 内存管理 心得

    - alloc, copy, retain会把引用计数+1 - release会把引用计数-1 - 局部变量如果初始化时不是autorelease的,要及时调用release释放,并且赋值为nil否则 ...

  2. CSS隐藏元素的几种妙法

    一说起CSS隐藏元素,我想大部分小伙伴们都会想到的第一种方法就是设置display为none.这是最为人所熟知也是最常用的方法.我相信还有不少人想到使用设置visibility为hidden来隐藏元素 ...

  3. 《A Tour of PostgreSQL Internals》学习笔记——系统表和数据类型

    上周末学习了<A Tour of PostgreSQL Internals>的第一部分(View 1),今天我们继续打开书本,继续View 2 部分. View 2 Postgresql的 ...

  4. echo输出空行

    rem 以下方法都可以输出空行,这十种方法分为三组,每组的效率依次递减 echo= echo, echo; echo+ echo/ echo[ echo] echo: echo. echo\

  5. Mac OS 10.8 中的 OpenCV 开发环境设置

    一.编译OpenCV 要在Mac OS上使用OpenCV,需要自己编译源代码.操作过程如下: 1)从http://www.cmake.org下载cmake 2.8安装包. 2)安装cmake 2.8. ...

  6. R 安装与环境配置

    R语言是一种很方便的应用于科学计算的语言,推荐给大家学习. 由于R的版本对程序包的兼容有些问题,推荐使用2.15.3. 下面给出下载链接,安装一路默认即可,可以自己更存放目录,其他的都没有影响.下面是 ...

  7. Android应用解决65K方法数限制

    近日,Android Developers在Google+上宣布了新的Multidex支持库,为方法总数超过65K的Android应用提供了官方支持. 如果你是一名幸运的Android应用开发者,正在 ...

  8. JDK Environment Variable And Change default JDK

    Environment Variable : change(import) /etc/bashrc export JAVA_HOME=/software/jdk1.8.0 export PATH=$J ...

  9. php连接数据库

    <?php header('Content-Type:text/html; charset=utf-8'); define('DB_HOST', 'localhost'); define('DB ...

  10. wifi reaver

    PIN码的格式很简单, 八位十进制数,最后一位(第8位)为校验位(可根据前7位算出),验证时先检测前4位,如果一致则反馈一个信息,所以只需1万次就可完全扫描一遍前4位,前4位确定下来的话,只需再试10 ...