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算法的可选项比較多,针对特定的训练数据往往有比較大的优化空间。

时间: 2024-10-09 21:54:11

BP神经网络算法学习的相关文章

bp神经网络算法

对于BP神经网络算法,由于之前一直没有应用到项目中,今日偶然之时 进行了学习, 这个算法的基本思路是这样的:不断地迭代优化网络权值,使得输入与输出之间的映射关系与所期望的映射关系一致,利用梯度下降的方法更新调整各层的权值,求目标函数的最小化. 1:初始化网络权值和神经元阈值(最简单的方法是随机初始化): 2:前向算法:这是bp神经网络的经典算法,主要过程是,按照公式一层层计算隐层神经元和输出神经元的Input和Output. net=x1*w1 + x2*w2 + .....+xn*wn tan

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

神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropagation 简称BP),主要讲述算法的基本流程和自己在训练BP神经网络的一些经验. BP神经网络的结构 神经网络就是模拟人的大脑的神经单元的工作方式,但进行了很大的简化,神经网络由很多神经网络层构成,而每一层又由许多单元组成,第一层叫输入层,最后一层叫输出层,中间的各层叫隐藏层,在BP神经网络中,只有

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

基本就三个函数: newff():创建一个bp神经网络 train():训练函数 sim():仿真函数 同时具有可视化界面,但目前不知道可视化界面如何进行仿真,且设置不太全 工具箱:Neural net fitting textread使用方法:http://blog.sina.com.cn/s/blog_9e67285801010bju.html ex1. clear; clc; %注意P矩阵,matlab默认将一列作为一个输入 P=[0.5152 0.8173 1.0000 ; 0.8173

基于BP神经网络的简单字符识别算法自小结(C语言版)

本文均属自己阅读源码的点滴总结,转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:[email protected] 写在前面的闲话: 自我感觉自己应该不是一个很擅长学习算法的人,过去的一个月时间里因为需要去接触了BP神经网络.在此之前一直都认为算法界的神经网络.蚁群算法.鲁棒控制什么的都是特别高大上的东西,自己也就听听好了,未曾去触碰与了解过.这次和BP神经网络的邂逅,让我初步掌握到,理解透彻算法的基本原理与公式,转为计算机所能识别的代码流,这应该就是所谓的数学和计

深度学习之BP神经网络案例

1.知识点: A.BP神经网络:信号是前向传播,误差是反向传播,BP是算法,它不代表神经网络的结构: B.BP神经网络是有导师学习的神经网络,在训练的时候,需要指定输入和输出,让它知道这个输入对应这个输出,让它清楚每次训练的过程,然后他的神经元的输出和理想值目标有多大的误差,这样才会有误差反向传播这个过程: C.MATLAB里怎么创建神经网络包括设置他的参数:包括训练,包括仿真预测,这个过程需要了解: D.在训练之前有必要对数据进行归一化处理,为什么要归一化,归一化的方法有哪些,需要掌握的知识点

感知机算法及BP神经网络

简介:感知机在1957年就已经提出,可以说是最为古老的分类方法之一了.是很多算法的鼻祖,比如说BP神经网络.虽然在今天看来它的分类模型在很多数时候泛化能力不强,但是它的原理却值得好好研究.先学好感知机算法,对以后学习神经网络,深度学习等会有很大的帮助. 一,感知机模型 (1).超平面的定义 令w1,w2,...wn,v都是实数(R) ,其中至少有一个wi不为零,由所有满足线性方程w1*x1+w2*x2+...+wn*xn=v 的点X=[x1,x2,...xn]组成的集合,称为空间R的超平面. 从

题外:分类篇(音乐风格分类)基于BP神经网络

语音特征参数MFCC的提取及识别 (2012-09-07 20:24:03) 转载▼ 耳蜗实质上相当于一个滤波器组,耳蜗的滤波作用是在对数频率尺度上进行的,在1000HZ下,人耳的感知能力与频率成线性关系:而在1000HZ以上,人耳的感知能力与频率不构成线性关系,而更偏向于对数关系,这就使得人耳对低频信号比高频信号更敏感.Mel频率的提出是为了方便人耳对不同频率语音的感知特性的研究.频率与Mel频率的转换公式为: MFCC在一定程度上模拟了人耳对语音的处理特点,应用了人耳听觉感知方面的研究成果,

【机器学习】BP神经网络实现手写数字识别

最近用python写了一个实现手写数字识别的BP神经网络,BP的推导到处都是,但是一动手才知道,会理论推导跟实现它是两回事.关于BP神经网络的实现网上有一些代码,可惜或多或少都有各种问题,在下手写了一份,连带着一些关于性能的分析也写在下面,希望对大家有所帮助. 本博文不含理论推导,如对BP的理论推导感兴趣百度即可,或参考<模式识别>. 一.数据库 程序使用的数据库是mnist手写数字数据库,这个数据库我有两个版本,一个是别人做好的.mat格式,训练数据有60000条,每条是一个784维的向量,

BP神经网络原理及C++实战

前一段时间做了一个数字识别的小系统,基于BP神经网络算法的,用MFC做的交互.在实现过程中也试着去找一些源码,总体上来讲,这些源码的可移植性都不好,多数将交互部分和核心算法代码杂糅在一起,这样不仅代码阅读困难,而且重要的是核心算法不具备可移植性.设计模式,设计模式的重要性啊!于是自己将BP神经网络的核心算法用标准C++实现,这样可移植性就有保证的,然后在核心算法上实现基于不同GUI库的交互(MFC,QT)是能很快的搭建好系统的.下面边介绍BP算法的原理(请看<数字图像处理与机器视觉>非常适合做