BP神经网络设计常用的基本方法和实用技术

尽管神经网络的研究和应用已经取得巨大成功,但在网络的开发设计方面至今仍没有一套完善的理论做指导,应用中采取的主要设计方法是,在充分了解待解决问题的基础上将经验与试探相结合,通过多次改进性试验,最终选出一个较好的设计方案。下面是在开发神经网络中常用的基本方法和实用技术。

(1)  网络信息容量与训练样本数

多层神经网络的分类能力与网络信息容量相关,如果网络的权值和阈值总数nw表征网络信息容量,研究表明,训练样本数N与给定的训练误差ε之间应满足以下匹配关系:

N = nw / ε.

上式表明网络的信息容量与训练样本数之间存在合理匹配关系。在解决实际问题时,训练样本数常常难以满足以上要求。对于确定的样本数,网络参数太少则不足以表达样本中所蕴含的全部规律即发生欠拟合;而网络参数太多,则可能发生过拟合,造成网络的泛化能力减弱。所以,通过上式根据设定的网络结构和误差要求,可以评估一下大致需要多少训练样本。

(2)  训练样本集的准备

训练数据的准备工作是网络设计与训练的基础,数据选择的科学合理性以及数据表示的合理性对于网络设计具有极为重要的影响。数据准备分为原始数据的收集、数据分析、变量选择和数据预处理等诸多步骤。

输入输出量的选择。

一般来讲,输出量代表系统要实现的功能目标,常常是系统的性能指标,分类问题的类别归属,或非线性函数的函数值等。输入量必须选择那些对输出影响大且能检测或提取的变量,此外还要求输入变量之间互不相关或相关性很小。如果对于某个变量是否合适作网络输入没有把握,可分别训练含有和不含有该输入变量的两个网络,对比其效果。从输入、输出量的性质来看,可分为两类:一是数值变量,一类是语言变量。数值变量指的是数值确定的连续量和离散量。而语言变量是用自然语言表示的概念,其“语言值”使用自然语言标识的事物的各个属性,比如颜色、性别、规模等。当选择语言变量作为网络输入或输出时,需将语言值进行编码转变为离散的数值量。

输入量的提取与表示。

通常需要使用信号处理与特征提取技术从原始数据中提取能够反映其特征的若干特征参数作为网络的输入。常见的典型情况有文字符号输入、曲线输入、函数自变量输入和图像输入。字符输入常常根据要识别的字符的特征进行编码之后再作为网络输入;曲线输入通常进行离散化采样,在满足香农采样定理的前提下等间隔采样,也可以根据小波变化或短时傅里叶变换的思想在曲线变化大的地方细分间隔,在曲线平坦的地方放宽间隔;函数自变量输入直接采用待拟合的曲线的自变量作为网络输入;图像输入则很少直接采用像素点的灰度值作为网络输入,通常根据识别的具体目的从图像中提取一些有用的特征参数,再根据这些参数对输入的贡献进行筛选,而这些特征提取则属于图像处理的范畴。

输出量的表示。

0,1或者-1,1表示为二分类;多个有限的离散值表示为多分类;[0,1]之间表示为逻辑回归;连续值表示为拟合。

输入输出数据的预处理。

尺度变换,也叫归一化或标准化(normalization)。进行尺度变换的原因是:网络的输入数据常常具有不同的物理意义和不同量纲,尺度变换为0~1之间使网络训练一开始就给各输入分量以同等重要地位;BP网络的神经元均采用Sigmoid激发函数,变换后可防止输出饱和;Sigmoid激发函数的输出为0~1之间,作为教师信号的输出数据如不进行变换处理,势必使数值大的输出分量绝对误差大,数值小的输出分量绝对误差小,会导致权值调整不均匀。尺度变换是一种线性变换,当样本分布不合理时,线性变换只能统一样本数据的变化范围,而不能改变其分布规律。适合网络训练的样本分布应该比较均匀,相应的样本分布曲线应比较平坦,当样本分布不理想时,最常用是分布变换。比如对数变换或平方根、立方根等。由于变换是非线性的,其结果不仅压缩了数据变化的范围,而且改善了其分布规律。

训练集的设计

训练样本数的确定。一般来说训练样本数越多,训练结果越能正确反映其内在规律,但样本的收集整理往往受到客观条件的限制。此外,当样本数量多到一定程度,网络的精度也很难再提高。实践表明,网络训练所需的样本数取决于输入-输出非线性映射关系的复杂度,映射关系越复杂,样本中含的噪声越大,为保证映射精度所需的样本数越多,而网络规模也越大。因此,可以参考这样一个经验规则,即:训练样本数是网络连接权总数的5~10倍。样本的选择和组织。网络训练中提取的规律蕴含在样本中,因此样本一定要有代表性。样本的选择要注意样本类别的均衡,尽量使得每个类别的数量大致相等。即使是同一类样本也要照顾到样本的多样性和均匀性。按照这种“平均主义”原则选择的样本能使网络在训练时见多识广,而且可以避免网络对样本数量多的类别“印象深”,而对样本数量少的类别“印象浅”。同类样本太集中会使得网络训练时倾向于只建立与其匹配的映射关系,而当另一类别样本集中输入时,权重的调整又转向新的映射关系而将前面的训练结果否定。当各类样本轮流集中输入时,网络的训练会出现振荡使训练时间延长。

(3)  初始权值的设计

网络权值的初始化决定了网络的训练从误差曲面的哪一点开始,因此初始化方法对缩短网络的训练时间至关重要。神经元的变换函数都是关于零点对称的,如果每个节点的净输入均在零点附近,则其输出均处在变换函数的中点。这个位置是其变换最敏感的地方,必然使得网络学习速度快。为了使得各个结点的初始净输入在零点附近,有两种办法可以采用:一是使得初始权值足够小;二是使得初始权值为+1和-1的数量相等。应用中对隐含层权值可采用第一种办法,而对输出层可采用第二种办法。如果输出层权值太小,会使得隐层权值在训练初期的调整量变小,因此采用第二种权值与净输入兼顾的办法。

(4)  神经网络结构设计

神经网络在训练样本问题解决后,网络的输入层结点和输出层结点数便已确定。因此神经网络结构设计主要解决设置几个隐含层和每个隐含层设置几个结点的问题。以下是神经网络的设计者们通过大量实践积累的经验。

隐含层数的设计。

理论证明单隐层的感知器可以映射所有连续函数,只有当学习不连续函数(如锯齿波等)时,才需要两个隐层,所以多层感知器最多需要两个隐层。再设计多层感知器时,一般先考虑设一个隐层,当一个隐层的隐结点数很多仍不能改善网络性能时,才考虑再增加一个隐层。经验表明,采用两个隐层时,如在第一个隐层设置较多的隐结点而第二层设置较少的隐结点,则有利于改善多层前馈网络的性能。此外,对于有些实际问题,采用双隐层所需的隐节点数可能少于单隐层所需的隐节点数。所以,对于隐节点仍不能明显降低训练误差的情况,应当尝试一下增加隐层数。

隐节点数的设计。隐节点的作用是从样本中提取并存储内在规律,每个隐节点有若干权值,而每个权值都是增强网络映射能力的一个参数。隐节点数太少,网络从样本中获取信息的能力就差,不足以概括和体现集中的样本规律;隐节点数太多,可能把样本中非规律性内容如噪声等也学会记劳,从而导致过拟合,造成网络泛化能力减弱。确定最佳隐节点数的一个常用方法是试凑法,可先设置较少的隐节点进行训练,然后逐渐增加隐节点数,用同一个样本集进行训练,从中确定网络误差最小时对应的隐节点数。在用试凑法时,可以用一些确定隐节点数的经验公式。这些公式计算出来的隐节点数只是一种粗略的估计值,可作为试凑法的初始值。其中m为隐层结点数,n为输入层节点数,为输出层节点数,α为1~10之间的常数。

m = sqrt(n+l)+α

m = log2(n)

m = sqrt(nl)

(5)  网络训练与测试

网络设计完成后,要应用设计值进行训练。训练时对所有样本正向运行一轮并反向修改权值一次称为一次训练。在训练过程中反复使用样本集数据,但每一轮最好不要按固定的顺序取数据。通常训练一个网络需要成千上万次。

网络的性能好坏主要看其是否具有很好的泛化能力,而对泛化能力的测试不能用训练数据,而应该用训练数据之外的验证(validation)集。只有训练好的网络在验证集上表现良好才能说明网络训练良好,因此通常是用在验证集上的误差精度来终止训练过程,而不是用训练集上的误差精度。如果网络在训练集上误差非常小,而在验证集上误差却很大,则有可能发生了过拟合。训练次数越多,训练集上误差会越小,而在验证集上误差会先小后增,因此会大致有一个最佳的训练次数。通常在实现中可以判定验证集误差的改变来作为终止训练的标准。比如设定在验证集上,本次训练后的误差要比前一次训练后的误差大20%,就认为前一次训练的结果已经是最佳,则保留前一次训练的网络权值作为训练的结果。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-24 03:42:55

BP神经网络设计常用的基本方法和实用技术的相关文章

BP神经网络设计

1.网络层数 大部分单个隐藏层即可 2.输入层神经元个数 输入变量的个数通常都是由问题的外部描述所确定的.例如,如果有4个外部变量作为网络的输入,那么网络就有4个输入.但是,这是不是意味着输入层的神经元个数就为4呢?答案是否定的! 因为每个神经元的输入可以有无数个,所以,通常当输入变量较多的时候,输入层神经元个数是明显的少于输入变量的个数的! 3.隐藏层神经元个数 较多的隐藏层神经元个数可以带来更好的性能,但会导致训练时间增加,有这么一些经验公式... (后续补充...) 4.输出层神经元个数

传统神经网络中常用的regularization方法

1.basic choice (1)通过一定的方式来缩小权重 (2)通过一定的方式将部分权重置为0 (3)weight-elimination regulizer 2.Early Stoppping Early stopping方法可以控制VC dimension的大小,具体可结合validation方法来实现. 原文地址:https://www.cnblogs.com/xieb1994/p/9916901.html

模式识别:三层BP神经网络的设计与实现

本文的目的是学习和掌握BP神经网络的原理及其学习算法.在MATLAB平台上编程构造一个3-3-1型的singmoid人工神经网络,并使用随机反向传播算法和成批反向传播算法来训练这个网络,这里设置不同的初始权值,研究算法的学习曲线和训练误差.有了以上的理论基础,最后将构造并训练一个3-3-4型的神经网络来分类4个等概率的三维数据集合. 一.技术论述 1.神经网络简述 神经网络是一种可以适应复杂模型的非常灵活的启发式的统计模式识别技术.而反向传播算法是多层神经网络有监督训练中最简单也最一般的方法之一

“程序设计与算法训练”课程设计:“BP神经网络的实现”(C++类封装实现)

一 题目: 71 BP神经网络的实现: 利用C++语言实现BP神经网络, 并利用BP神经网络解决螨虫分类问题: 蠓虫分类问题:对两种蠓虫(A与B)进行鉴别,依据的资料是触角和翅膀的长度,已知了9支Af和6支Apf 的数据如下:A: (1.24,1.27), (1.36,1.74),(1.38,1.64) , (1.38,1.82) , (1.38,1.90) , (1.40,1.70) , (1.48,1.82) , (1.54,1.82) ,(1.56,2.08).B: (1.14,1.82)

Deep Learning(深度学习)之(三)Deep Learning的常用模型或者方法

九.Deep Learning的常用模型或者方法 9.1.AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重.自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征.自动编码器就是一种尽可能复现输入信号的神经网络.为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素

模式识别之ocr项目---(模板匹配&BP神经网络训练)

摘 要 在MATLAB环境下利用USB摄像头采集字符图像,读取一帧保存为图像,然后对读取保存的字符图像,灰度化,二值化,在此基础上做倾斜矫正,对矫正的图像进行滤波平滑处理,然后对字符区域进行提取分割出单个字符,识别方法一是采用模板匹配的方法逐个对字符与预先制作好的字符模板比较,如果结果小于某一阈值则结果就是模板上的字符:二是采用BP神经网络训练,通过训练好的net对待识别字符进行识别.最然后将识别结果通过MATLAB下的串口工具输出51单片机上用液晶显示出来. 关键字: 倾斜矫正,字符分割,模板

BP神经网络识别手写数字项目解析及代码

这两天在学习人工神经网络,用传统神经网络结构做了一个识别手写数字的小项目作为练手.点滴收获与思考,想跟大家分享一下,欢迎指教,共同进步. 平常说的BP神经网络指传统的人工神经网络,相比于卷积神经网络(CNN)来说要简单些. 人工神经网络具有复杂模式和进行联想.推理记忆的功能, 它是解决某些传统方法所无法解决的问题的有力工具.目前, 它日益受到重视, 同时其他学科的发展, 为其提供了更大的机会.1986 年, Romelhart 和Mcclelland提出了误差反向传播算法(Error Back

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

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

BP神经网络及matlab实现

本文主要内容包括: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 . 第0节.引例  本文以Fisher的Iris数据集作为神经网络程序的测试数据集.Iris数据集可以在http://en.wikipedia.org/wiki/Iris_flower_data_set  找到.这里简要介绍一下Iris数据集: 有一批Iris花,已知这批Iris花可分为3个品种,现需要对其进行分类.不同品种的Iris花的花萼长度.花萼