C语言实现的BP神经网络算法(1)-BPANN原理
净输入通过传递函数(TransferFunction)f (·)后,便得到第j个神经元的输出:
式中f(·)是单调上升函数,而且必须是有界函数,因为细胞传递的信号不可能无限增加,必有一最大值。
5.4.2 BP网络
BP算法由数据流的前向计算(正向传播)和误差信号的反向传播两个过程构成。正向传播时,传播方向为输入层→隐层→输出层,每层神经元的状态只影响下一层神经元。若在输出层得不到期望的输出,则转向误差信号的反向传播流程。通过这两个过程的交替进行,在权向量空间执行误差函数梯度下降策略,动态迭代搜索一组权向量,使网络误差函数达到最小值,从而完成信息提取和记忆过程。
5.4.2.1 正向传播
设 BP网络的输入层有n个节点,隐层有q个节点,输出层有m个节点,输入层与隐层之间的权值为,隐层与输出层之间的权值为,如图5.4所示。隐层的传递函数为f1(·),输出层的传递函数为f2(·),则隐层节点的输出为(将阈值写入求和项中):
k=1,2,……q (5.15)
输出层节点的输出为:
j=1,2,……m (5.16)
至此B-P网络就完成了n维空间向量对m维空间的近似映射。
5.4.2.2 反向传播
1) 定义误差函数
输入个学习样本,用来表示。第个样本输入到网络后得到输出(j=1,2,…m)。采用平方型误差函数,于是得到第p个样本的误差Ep:
(5.17)
式中:为期望输出。
对于个样本,全局误差为:
(5.18)
2)输出层权值的变化
采用累计误差BP算法调整,使全局误差变小,即
(5.19)
式中:—学习率
定义误差信号为:
(5.20)
其中第一项:
(5.21)
第二项:
(5.22)
是输出层传递函数的偏微分。
于是:
(5.23)
由链定理得:
(5.24)
于是输出层各神经元的权值调整公式为:
(5.25)
3)隐层权值的变化
(5.26)
定义误差信号为:
(5.27)
其中第一项:
(5.28)
依链定理有:
(5.29)
第二项:
(5.30)
是隐层传递函数的偏微分。
于是:
(5.31)
由链定理得:
(5.32)
从而得到隐层各神经元的权值调整公式为:
(5.33)
5.4.3 BP算法的改进
BP算法理论具有依据可靠、推导过程严谨、精度较高、通用性较好等优点,但标准BP算法存在以下缺点:收敛速度缓慢;容易陷入局部极小值;难以确定隐层数和隐层节点个数。在实际应用中,BP算法很难胜任,因此出现了很多改进算法。
1) 利用动量法改进BP算法
标准BP算法实质上是一种简单的最速下降静态寻优方法,在修正W(K)时,只按照第K步的负梯度方向进行修正,而没有考虑到以前积累的经验,即以前时刻的梯度方向,从而常常使学习过程发生振荡,收敛缓慢。动量法权值调整算法的具体做法是:将上一次权值调整量的一部分迭加到按本次误差计算所得的权值调整量上,作为本次的实际权值调整量,即:
(5.34)
其中:α为动量系数,通常0<α<0.9;η—学习率,范围在0.001~10之间。这种方法所加的动量因子实际上相当于阻尼项,它减小了学习过程中的振荡趋势,从而改善了收敛性。动量法降低了网络对于误差曲面局部细节的敏感性,有效的抑制了网络陷入局部极小。
2) 自适应调整学习速率
标准BP算法收敛速度缓慢的一个重要原因是学习率选择不当,学习率选得太小,收敛太慢;学习率选得太大,则有可能修正过头,导致振荡甚至发散。可采用图5.5所示的自适应方法调整学习率。
调整的基本指导思想是:在学习收敛的情况下,增大η,以缩短学习时间;当η偏大致使不能收敛时,要及时减小η,直到收敛为止。
3) 动量-自适应学习速率调整算法
采用动量法时,BP算法可以找到更优的解;采用自适应学习速率法时,BP算法可以缩短训练时间。将以上两种方法结合起来,就得到动量-自适应学习速率调整算法。
4) L-M学习规则
L-M(Levenberg-Marquardt)算法比前述几种使用梯度下降法的BP算法要快得多,但对于复杂问题,这种方法需要相当大的存储空间。L-M(Levenberg-Marquardt)优化方法的权值调整率选为:
(5.35)
其中:e—误差向量;J—网络误差对权值导数的雅可比(Jacobian)矩阵;μ—标量,当μ很大时上式接近于梯度法,当μ很小时上式变成了Gauss-Newton法,在这种方法中,μ也是自适应调整的。
综合考虑,拟采用L-M学习规则和动量法分别作为神经网络的训练函数和学习函数。
训练过程实际上是根据目标值与网络输出值之间误差的大小反复调整权值和阈值,直到此误差达到预定值为止。
确定了网络层数、每层节点数、传递函数、初始权系数、学习算法等也就确定了BP网络。确定这些选项时有一定的指导原则,但更多的是靠经验和试凑。
使用神经网络的目的是实现摄像机输出RGB颜色空间与CIE-XYZ色空间转换,因此BP网络的输入层和输出层的节点个数分别为3。下面主要介绍隐层节点数量的确定。
每个样本作用时,都对权矩阵进行了一次修改。由于每次权矩阵的修改都没有考虑权值修改后其它样本作用的输出误差是否也减小,因此将导致迭代次数增加。
其中:—输出节点的个数,—训练样本数目,—网络期望输出值,—网络实际输出值。均方误差克服了上述两种算法的缺点,所以选用均方误差算法较合理。
训练一个单隐层的三层BP网络,根据如下经验公式选择隐层节点数[125]:
式中:n为输入节点个数,m为输出节点个数,a为1到10之间的常数。针对本论文n1取值范围为3~13。训练结果如表5.1所示。
隐层神经元个数 |
训练误差 |
测试误差 |
3 |
1.25661 |
1.1275 |
4 |
0.797746 |
0.8232 |
5 |
0.631849 |
0.7278 |
6 |
0.570214 |
0.6707 |
7 |
0.552873 |
0.6895 |
8 |
0.445118 |
0.6575 |
9 |
0.385578 |
0.6497 |
10 |
0.259624 |
0.4555 |
11 |
0.185749 |
0.6644 |
12 |
0.183878 |
0.48 |
13 |
0.168587 |
0.6671 |
由上表可以看出:
① 增加隐层节点数可以减少训练误差,但超过10以后测试误差产生波动,即泛化能力发生变化。综合比较隐层节点数为10与12的训练误差和测试误差,决定隐层节点数选用12。
② 训练误差和测试误差都很大,而且收敛速度极慢(训练过程如图5.7所示),这个问题可以通过对输出量进行归一化来解决。
根据Sigmoid型传递函数输入和输出的范围,对输入变量不进行归一化处理,只对输出变量进行归一化,这是因为在输出数据要求归一化的同时,对输入数据也进行归一化的话,权值的可解释性就更差了。目标值按下式进行变化:
(5.40)
使目标值落在0.05~0.95之间,这样靠近数据变化区间端点的网络输出值就有一波动范围,网络的性能较好。用新生成的训练样本与测试样本对隐层节点数为12的网络进行训练,得到的训练误差为9.89028×10-5,测试误差为1.9899×10-4,达到了预定的目标(训练过程如图5.8所示)。
1) 定量地分析了用线性关系转换摄像机RGB空间到CIE-XYZ空间数据后产生的均方误差,表明CCD摄像机与标准观察者之间有比较明显的差别,也就是说RGB与CIE-XYZ间的转换是非线性的。
C语言实现的BP神经网络算法(1)-BPANN原理相关推荐
- 大数据挖掘建模案例分析:利用BP神经网络算法进行用户行为分析(一)
泰迪智能科技(数据挖掘平台:TipDM数据挖掘平台)最新推出的数据挖掘实战专栏 专栏将数据挖掘理论与项目案例实践相结合,可以让大家获得真实的数据挖掘学习与实践环境,更快.更好的学习数据挖掘知识与积累职 ...
- MATLAB 中BP神经网络算法用于回归拟合的实现
转载自:https://www.cnblogs.com/babyfei/p/7400072.html BP神经网络算法提供了一种普遍并且实用的方法从样例中学习值为实数.离散值或者向量的函数,这里就简单 ...
- 基于BP神经网络算法的性别识别
目录 基于 BP 神经网络算法的性别识别 1 目录 1 1.背景介绍 2 2. OpenCV 的介绍 3 3.安装 OpenCV 4 4. BP 神经网络算法介绍和实践 4 4.1 BP 神经网络结构 ...
- 【项目实战】Python基于BP神经网络算法实现家用热水器用户行为分析与事件识别
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 居民在使用家用热水器的过程中,会因为地区气候.不同区域和用户年龄 ...
- bp神经网络权值调整公式,bp神经网络算法推导
神经网络BP模型 一.BP模型概述误差逆传播(ErrorBack-Propagation)神经网络模型简称为BP(Back-Propagation)网络模型. PallWerbas博士于1974年在他 ...
- 数学建模算法与应用【BP神经网络算法】
评价预测和分类问题可以用到神经网络.卷积神经网络适合大样本的情况,深度学习包括很多种网络,如卷积神经网络,对抗网络等,深度学习大小样本皆可. 人工神经网络ANN 在机器学习和认知科学领域,人工神经网络 ...
- BP神经网络算法基本原理,bp神经网络实例分析
BP人工神经网络方法 (一)方法原理人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统.理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势. 人 ...
- Matlab:基于Matlab实现人工智能算法应用的简介(BP神经网络算法NN、SOFM神经网络)、案例应用(基于Matlab的GUI的方式创建/训练/预测神经网络)之详细攻略
Matlab:基于Matlab实现人工智能算法应用的简介(BP神经网络算法NN.SOFM神经网络).案例应用(基于Matlab的GUI的方式创建/训练/预测神经网络)之详细攻略 目录
- BP神经网络算法伪代码
BP神经网络算法伪代码,该代码可以使用到论文写作当中吗,但是需要结合自己的论文需求进行修改,再次记录.信息来源于参考博客,谢谢! 算法伪代码:输入:训练集D学习率η1:数据归一化(此处需根据数据实际情 ...
最新文章
- iOS weak 自动置为nil的实现
- 人脸识别门禁在安防行业的发展前景
- php rdkafka实例,linux下php扩展kafka的实例分享
- python做表格计算公式_Python自学Day45 制作Excel报表
- 《PHP精粹:编写高效PHP代码》——2.1节数据持久化和Web应用程序
- 机器学习算法-PCA降维技术
- golang func 入参为func_Golang函数常见用法
- 机器信息MachineInfo
- python 全解坦克大战 辅助类 附完整代码【雏形】
- 找出数组中第i小元素(时间复杂度Θ(n)--最坏情况为线性的选择算法
- xp电脑怎么取消开机密码
- python 拟牛顿法 求非线性方程_有限元简单科普之——改进的欧拉法
- soapUI和Jmeter的接口测试结构区别
- c语言删除文件remove_「Python」 - 文件基本操作
- 加减仅仅为了扩大绘制区域:大哥你不会搞不搞行不?
- 网站建设-学习笔记1-建站
- Java使用aspose合并两个PDF文件
- Shell习题100例(2)
- 微信小程序(五)新版的用户授权和判断是否是否已经授权和自动提示更新版本
- 有趣的游戏-猜黑白纸