BP神经网络JAVA实现详解

技术分享  / 只看大图  / 倒序浏览   ©

#楼主# 2019-11-6

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
从2016年3月份左右,我的毕业设计开题答辩时间正好是AlphaGo大战李世石之日。还记得当时答辩PPT最末引用的图片还是这张:
153505kns68ntgm1vvn5on.jpg


李世石大战Google的AlphaGo
不过当时答辩情况并不理想,答辩组老师也没发现我留的这个彩蛋。想想但是我是一种多么激动的心情面对这个毕业设计课题的吗,第一次与前沿科技这么近距离的沾边。可是他们咋就没有多关注关注新闻呢,而且当天下午就是对战之日呀!!
到如今我毕业已近一载,而alphago也已战胜柯洁,隐藏功与名默默退役,将对弈棋谱献于世人研究。我的配图也该换一换了:
153505oqvvdvq7v074p0vb.jpg


柯洁对战AlphaGo
好了,过了这么久,在这过程中又接触到了许多神经网络内容。是该蹭蹭热点,重拾毕业设计内容,来一发BP神经网络的总结和探寻了。
其实,神经网络在上世纪50年代,神经网络就引发过一次热潮,不过由于当时的硬件计算速度和神经网络模型研究的不够深入。在短暂的兴盛后,在60年代末陷入了沉默,之后是默默的反思探究,默默耕耘。直至如今,当前人工智能将发展如何就让历史来评判吧。
153506q1h7qt7pfzu3p3zh.jpg


神经网络发展历史
如今,随之BP神经网络模型,深度神经网络模型的提成,而且硬件水平的大福提升(加工工艺都已经到8nm了),AlphaGo的围棋挑战又一次引爆了这个AI热潮。谈谈我对BP神经网络的一些看法吧,神经网络应用,其核心就“几乎万能的模型+误差修正函数”。
例如:看到某品牌的泥塑很好,小作坊想仿造,拥有很多陶泥(输入),还有可修改的模具(万能的模型),可套出任意形状。然后开始仿制,首先刚起步很蠢用一大坨陶泥模子套出个长条形身体,出去卖当然市场不买账,返工对比发现需要手和脚(误差判断修正函数),然后一次一次的尝试改正(大小尺寸、头发、眼睛等),然后慢慢成型,这个模型就记录各种参数,然后直接套模子出产品就是的了。
BP神经网络(Back Propagation)误差反向传播神经网络,是通过误差反向传播算法实现的神经网络模型,其核心是误差反向传播思想和算法,简称BP神经网络。那么BP神经网络的万能模型就是下图中的神经网络拓扑结构了:
153506tyuni8n80nb9tmm8.jpg


研究证明:神经元网络拓扑结构可以逼近任意非线性函数(国外论文数学论证了的,就当它具有这个功能就行了,仿生学厉害呀,仿造人脑神经元间的信息传递)而且观察到神经元网络为多输入的并行结构,能同时输入不同类型的信息进行处理并给出输出,高效而迅速。
有了万能的淘宝,呕不,万能的模具。还差一个美工刀来雕琢修改了。倒是有很多种偏差修正函数,这里提一种我熟悉也较为通用(通用始终比不上专用的喽)的修正判定函数吧。
二次型性能修正:和最小二乘法的思想相似,取偏差的平方差构成2次函数。
简单的例子:有一根绳子长度为x米,需要另外剪一根和它长度一样的绳子。第一次剪了y1米,y1>x长了就需要剪短。第二次再修正剪短一节n1米,当前的绳子长y2=y1-n1,发现y2短了需要增长。第三次再修正增加一节n2米...以此类推,不断的逼近目标,使偏差趋于零。
最小二乘法:我们都知道一元二次函数
153506o3lf3l0qldlqp43i.jpg


的曲线是一个“U”形,如下图所示:
153506kqurps6g7j6aitsq.jpg


一元二次函数曲线
可以观察到,U形最底部与x相交处函数值最小,趋近于零。由梯度下降法求解极小值思想,向函数增大的反方向或函数减小的同方向迈步,而函数的变化方向可以通过求导得到,在交点左侧导数小于零,右侧导数大于零。
梯度下降法:导数为正函数正在增大,外部修正调节效果变坏,应反向调节使其减小;导数为负函数正在减小外部修正修正调节效果变好,函数正在减小趋近于零,保存当前调节。通过不断的正反向梯度调节,最终逐渐逼近于导数为零时,纯2次函数的导数为零点即偏差为零点。从而达到学习调整权值逐渐趋近期望目标,使偏差逼近零。(不断的剪短或增加绳子的长度,逐渐的趋近于目标值,偏差趋于零)。
于是借助于其特性,我们假定当前值和目标值得偏差为ek=y-x,设函数
153507dtcdv9refd4esrvw.jpg


,就可以确定该用美工刀挖一刀或加点材料了。
153507yh0xgpxzxn3peveh.jpg


二次型性能修正
当然最小二乘法修正函数是较为原始的方法了,已不大适用于当前复杂的情况了。(我们一直假定的是偏差ek是一个一元函数,但假如偏差为二元甚至多元或多次函数呢?那函数曲线就不单单是一个U形曲线了。)例如若最终拟合的函数曲线为一个多段多凹曲线时,二次性能修正函数就可能陷入局部最优解(局部U形)。例如下图的曲线:
153507ttdjhcabne2hhhat.jpg


多凹段曲线
上图多凹段曲线(并不太严谨举例说明足够了)中,有多个U形凹坑,随时一不小心就会陷入一个局部凹坑,但其并不是整个偏差函数趋于零的最小值,可见二次性能修正还有局限性。
但对于一般情况,已经足够了,作为见识神经网络神奇的拟合能力还是可以的。相信AlphaGo的学习修正函数比这个高级的多。
---------------------------------------------分割线---------------------------------------------
接下来进入数学世界。。。有人在其中乐此不彼(例如《知无涯者》中的拉马努金),有人就只有使劲摆摆头了。我呢,处于中间阶段吧,愿意见到数学的神奇,但让我自己深入研究,那就太难为我了。
神经元是以生物研究及大脑的响应机制而建立的拓扑结构网络,模拟神经冲突的过程,多个树突的末端接受外部信号,并传输给神经元处理融合,最后通过轴突将神经传给其它神经元或效应器。神经元的拓扑结构如图:
153507e1h71wtb7qm2sb0n.jpg


神经元拓扑结构
对于第i个神经元,X1、X2、…、Xj为神经元的输入,输入常为对系统模型关键影响的自变量,W1、W2、…、Wj为连接权值调节各个输入量的占重比。将信号结合输入到神经元有多种方式,选取最便捷的线性加权求和可得neti神经元净输入。
153508ekjdnny4uny5or5s.jpg


式中θi为阀值,当信号强度达到强度θi时才激活。
在拓展构建成多层神经元,就成了神经网络模型。一般来说,神经网络由3种层构成:输入层、隐含层、输出层。
153508irn3gc7b033nt7gq.jpg


神经网络结构
输入的层数(Xi):
需要选取对系统对象影响较大的变量,例如 逼近函数
y(k)=sin(5x)+y(k-1)^2;
可以基本确定影响因素为:
输入样本1: Sin(5x)或x
输入样本2: y(k-1)
这需要一定的练习才能更好的掌握,也就是输入的是一些教师信号(由什么可以及应该得到什么),通过不断的调整各个权值来逐步的逼近这个函数规律。
输入(Wij)输出(Wjk)权值:
一般取[0,1]或[-1,1]区域内的随机值,C语言中使用(rand(srand(time(NULL))00)/1000.0以时间作种的随机数变换得到,具体为什么要取这之间的权值,还不太清楚,计算的方便可能是影响因素之一。
隐含层数Xj:
隐含层书上所说基本靠经验试凑确定,还有是输入层数+输出层数+值,一般我们取5层就可以满足要求,隐含层数的增加可以更加精准的逼近目标函数,提高网络的精度。
输出层数Xk:
所求对象的输出,需要想要得到的数值。 例如 y(k)=sin(5x)+y(k-1)^2;则对象输出为yn(k),后边根据理想教师信号的输出y(k)与网络计算的输出做误差运算来修正权值逼近理想输出。
隐含层神经元的输入为所有输入的加权之和:
153508mub7w33lk0a0utl0.jpg


即例如" X1j=W11*X1+W21*X2+W31*X3+...+Wi1*Xj "以此类推。
隐含层神经元输出Xj'采用S型函数激发Xj得:
153508tjnknct2v3jjnj25.jpg


隐含层的激活函数选择
常用的是S型的对数或正切激活函数以及线性函数,S型函数具有非线性放大系数功能,它可以把输入从负无穷大到正无穷大的信号变换成-1到1之间输出,对较大的输入信号,放大系数较小,而对较小的输入信号,放大系数则较大,所以采用S型激活函数可以处理和逼近非线性的输入、输出关系。假如在输出层采用S型函数,输出则被现在到一个很小的范围,若采用线性激活函数,则可使网络输出任何值。所以当网络的输出没有限制时在隐含层采用S型激活函数,而输出层采用线性激活函数。
输出层神经元为所有隐含层输出的加权之和:
153509s7idihi229zz2b7k.jpg


网络输出与理想输出误差为:
e(n)=XLk(n)-Xk(n) (理想输出-网络输出)
其中k为第几个输出神经元,n为计算值的第几次。
由最小二乘法思想,引入误差性能指标函数:
153509npvw5o7xfvxpwplr.jpg


反向传播:求导,或偏导,调整各层间的权值。隐含层到输出层连接权值修正值:
153509l4agdvkk6wartjot.jpg


输入层到隐含层连接权值修正值:
153509o6z3ll004ylf4xtl.jpg



式中p为学习速率,p一般取0~1之间的值稳定。(-1)是由梯度下降法得来的,导数>0时需反向控制,导数
分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

13580701915

新手猿

  • 主题

    13

  • 帖子

    13

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆