神经网络学习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向MATLAB工具箱的神经网络理论与应用》
一个具有r个输入和一个隐含层的神经网络模型如图:
感知器和自适应线性元件的主要差别在激活函数上:前者是二值型的,后者是线性的。BP 网络具有一层或多层隐含层,BP网络的激活函数必须是处处可微的,BP网络经常使用的是S 型的对数或正切激活函数和线性函数。由于激活函数是连续可微的,它以严格利用梯度法进行推算,它的权值修正的解析式十分明确,其算法被称为反向传播法,也称BP算法。BP网络的S型激活函数如下:
因为S型函数具有非线性放大系数功能,它可以把输入从负无穷大到正无穷大的信号,变换成-1到1之间输出。在一般情况下,均是在隐含层采用S型函数,输出层采用线性激活函数。1BP网络的学习规则
BP网络的产生归功于BP算法的获得。BP算法是一种监督式的学习算法。其主要思想为:对于q个输入学习样本:P1,P2.....,已知与其对应的输出样本为T1,T2…。学习的目的是用网络的实际输出A1,A2…与目标矢量T1,T2…之间的误差来修改其权值。使A与期望的T尽量可能地接近;既使网络输出层的误差平方和达到最小。它是通过连续不断的在相对于误差函数斜率下降的方向上计算网络权值和偏差的变化而逐渐逼近目标。每一次权值和偏差的变化都与网络误差的影响成正比,并以反向传播的方式传递到每一层的。
BP算法由两部分组成:信息的正向传递与误差的反向传播。在正向传播过程中,输入信息从输入经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状态。如果在输出层没有得到期望的输出,则计算输出层的误差变化值,然后转向反向传播,通过网络将误差信号沿原来的连接通路反传回来修改各层神经元的权值直至达到期望目标。
1.1信息的正向传递
隐含层中第i个神经元的输出为:
输出层中第k个神经元的输出为
定义误差函数为:
1.2利用梯度下降法求权值变化及误差的反向传播1)输出层的权值变化
对从第i个输入到第k个输出的权值有:
其中
同理
2)隐含层权值变化
对从第j个输入到第i个输出的权值,有:
其中:
同理可得
Matlab工具箱中:
1)对于1.1中表示的隐含层输出,若采用对数S型激活函数,则用函数logsig.m;若采用双曲正切S型激活函数,则用函数tansig.m。
2)对于1.1中表示的输出层输出,若采用线性激活函数有purelin.m与之对应
3)对于1.1中的误差函数,可用函数sumsqr.m求之;
4)有learnbp.m函数专门求1.2中所表示的输出层以及隐含层中权值与偏差的变化量;5) 1.2中的误差变化可用函数deltalin.m、deltatan.m、deltalog.m来解决。它们分别用于线性层、双曲正切层和对数层。
误差反向传播的流程图与图形解释
2BP网络的训练过程
为了训练一个BP网络,需要计算网络加权输入矢量以及网络输出和误差矢量,然后求得误差平方和。当所训练矢量的误差平方和小于误差目标,训练则停止,否则在输出层计算误差变化。且采用反向传播学习规则来调整权值,并重复此过程。当网络完成训练后,对网络输入一个不是训练集合中的矢量,网络将以泛化方式给出输出结果。
首先需要根据输入矢量P与目标矢量T来选定设计的神经网络的结构,包括以下内容
1)网络的层数;2)每层的神经元数;3)每层的激活函数
训练步骤为:
1)用小的随机数对每一层的权值w和b初始化,以保证网络不被大的加权输入饱和;并进行以下参数的设定或初始化:a%期望误差最小值err_goal。b%最大循环次数max_epoch。c%修正权值的学习速率lr,一般情况下lr=0.01~0.07;d%从1开始的循环训练:for epoch=1:max_epoch;
2)计算网络各层输出矢量A1和A2以及网络误差E;
3)计算各层反转的误差变化D2和D1并计算各层权值的修正值以及新权值
4)再次计算权值修正后误差平方和:
5)检查SSE是否小于err_goal,若是,则训练结束;否则继续。
以上就是BP网络在MATLAB中的训练过程。这个训练过程可以使用trainbp.m来完成。它的使用同样只需要定义有关函数;显示间隔次数,最大循环次数,目标误差,以及学习速率。而调用后返回训练后权值,循环总数和最终误差。
函数右端的’F’为网络的激活函数名称。
3BP网络的设计准则
3.1网络的层数
理论上已经证明:具有偏差和至少一个S型隐含层加上一个线性输出层的网络能够逼近任何有理函数。这实际上已经给了我们一个基本的设计BP网络的准则。增加层数主要可以更进一步的降低误差,提高精度,但同时也使网络复杂化,从而增加了网络权值的训练时间。而误差精度的提高实际上也可以通过增加隐含层中的神经元数目来获得,其训练效果也比增加层数更加容易观察和调整。所以一般情况下,应优先考虑增加隐含层中的神经元数。
3.2隐含层的神经元数
网络训练精度的提高,可以通过采用一个隐含层,而增加其神经元数的方法来获得。而在这结构实现上,要比增加更多的隐含层要简单得多。选取多少个隐含层节点才合适在理论上并没有一个明确的规定。在具体设计时比较实际的做法是通过对不同神经元数进行训练对比,然后适当地加上一点余量。
评价一个网络设计的好坏;首先是它的精度,再一个就是训练时间。时间包含有两层:一个是循环次数,二是每一次循环中计算所花费的时间。
1)神经元太少时,网络不能很好的学习,需要训练的次数很多,精度也不高。
2)一般而言隐含层神经元数太多会导致训练时间增加,在进行函数逼近时可能导致不协调拟合。
3.3初始权值的选取
由于系统是非线性的,初始值对于学习是否达到局部最小、是否能够收敛以及训练时间的长短的关系很大。如果初始权值太大,使得加权后的输入和n落在了S型激活函数的饱和区导致其导数非常小,会使得调节过程几乎停顿下来。所以,一般总是希望经过初始加权后的每个神经元的输出值都接近于零,这样可以保证每个神经元的权值都能够在它们的S型激活函数变化最大处进行调节。Matlab中可采用函数nwlog.m或nwtan.m来初始化隐含层权值W1和B1。
3.4学习速率
学习速率决定每一次循环训练中所产生的权值变化量。大的学习速率可能导致系统的不稳定;但小的学习速率导致较长的训练时间,可能收敛很慢,不过不能保证网络的误差值不跳出误差表面的低谷而最终趋于最小误差值。一般情况下学习速率的选取范围在0.01~0.8之间。3.5期望误差的选取
在设计网络的训练过程中,期望误差值也应当通过对比训练后确定一个合适的值,这个所谓的“合适”,是相对于所需要的隐含层节点数来确定,因为较小的期望误差值时要靠增加隐含层的节点,以及训练时间来获得的。一般情况下,作为对比可同时对两个不同期望误差值的网络进行训练,最后通过综合因素的考虑来确定采用其中一个网络。
P152面处对字母识别的举例分析。
补充:W-H学习规则
采用W-H学习规则可以用来训练一层网络的权值和偏差使之线性地逼近一个函数式而进行模式联想。
定义一个线性网络的输出误差函数为:
从式中可以看出线性网络具有抛物线型误差函数所形成的误差表面,所只有一个误差最小值,通过W-H学习规则来计算权值和偏差的变化,并使网络误差的平方和最小。