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神经网络算法
对于BP神经网络算法,由于之前一直没有应用到项目中,今日偶然之时 进行了学习, 这个算法的基本思路是这样的:不断地迭代优化网络权值,使得输入与输出之间的映射关系与所期望的映射关系一致,利用梯度下降的方 ...
- 二、单层感知器和BP神经网络算法
一.单层感知器 1958年[仅仅60年前]美国心理学家FrankRosenblant剔除一种具有单层计算单元的神经网络,称为Perceptron,即感知器.感知器研究中首次提出了自组织.自学习的思想, ...
- BP神经网络算法预测销量高低
理论以前写过:https://www.cnblogs.com/fangxiaoqi/p/11306545.html,这里根据天气.是否周末.有无促销的情况,来预测销量情况. function [ ma ...
- 数据挖掘系列(9)——BP神经网络算法与实践
神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropaga ...
- BP神经网络算法推导及代码实现笔记zz
一. 前言: 作为AI入门小白,参考了一些文章,想记点笔记加深印象,发出来是给有需求的童鞋学习共勉,大神轻拍! [毒鸡汤]:算法这东西,读完之后的状态多半是 --> “我是谁,我在哪?” 没事的 ...
- [matlab]bp神经网络工具箱学习笔记
基本就三个函数: newff():创建一个bp神经网络 train():训练函数 sim():仿真函数 同时具有可视化界面,但目前不知道可视化界面如何进行仿真,且设置不太全 工具箱:Neural ne ...
- JAVA实现BP神经网络算法
工作中需要预测一个过程的时间,就想到了使用BP神经网络来进行预测. 简介 BP神经网络(Back Propagation Neural Network)是一种基于BP算法的人工神经网络,其使用BP算法 ...
- BP神经网络算法改进
周志华机器学习BP改进 试设计一个算法,能通过动态调整学习率显著提升收敛速度,编程实现该算法,并选择两个UCI数据集与标准的BP算法进行实验比较. 1.方法设计 传统的BP算法改进主要有两类: - 启 ...
- R_Studio(神经网络)BP神经网络算法预测销量的高低
BP神经网络 百度百科:传送门 BP(back propagation)神经网络:一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络 #设置文件工作区间 setwd('D:\\ ...
随机推荐
- [Everyday Mathematics]20150304
证明: $$\bex \frac{2}{\pi}\int_0^\infty \frac{1-\cos 1\cos \lm-\lm \sin 1\sin \lm}{1-\lm^2}\cos \lm x\ ...
- PHP实现的Mysql读写分离
本代码是从uchome的代码修改的,是因为要解决uchome的效率而处理的.这个思维其实很久就有了,只是一直没有去做,相信也有人有同样的想法,如果有类似的,那真的希望提出相关的建议.封装的方式比较简单 ...
- 【LeetCode 235】Lowest Common Ancestor of a Binary Search Tree
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...
- git初步使用
git初步使用 主要目的:使用代码控制工具,练习使用git 1.创建新项目 网址如下: https://github.com/kellyseeme?tab=repositories 注意每个人使用的名 ...
- linux 条件变量
互斥量就是一把锁,在访问数据时能保证同一时间内只有一个线程访问数据,在访问完以后再释放互斥量上的锁. 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条 ...
- pybombs 安装
参考:https://github.com/gnuradio/pybombs 先装:pip 然后: pip install PyBOMBS 更新源: pybombs recipes add gr-re ...
- 使用HttpClient实现文件的上传下载
1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源. 虽然在 JDK 的 java.net ...
- 由于SSH配置文件的不匹配,导致的Permission denied (publickey)及其解决方法。
读者如要转载,请标明出处和作者名,谢谢.地址01:http://space.itpub.net/25851087地址02:http://www.cnblogs.com/zjrodger/作者名:zjr ...
- Hadoop学习笔记(1)
Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. H ...
- V7承保 bug代码
v7 bug1