基于神经网络的学习练习题某BP 神经网络如下图。
其中输入为⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡3121x x ; 期望输出为⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡05.095.021d d ;第一层权值矩阵为⎢⎣⎡−=211W ⎥⎦⎤02;第一层阈值⎥⎦⎤⎢⎣⎡−=13θ 第二层权值矩阵为⎢⎣⎡=012W ⎥⎦⎤−21;第二层阈值⎥⎦⎤⎢⎣⎡=32r传输函数均为Sigmoid 函数,试训练该网络。
1 用最基本的BP 算法训练网络1.1 只改变学习率,比较学习率的改变对最后训练结果的影响 步骤:1)程序设计:第一步:定义输入向量和目标向量 p=[1 3]';t=[0.95 0.05]';第二步:创建BP 网络,设置训练函数为最速下降BP 算法 netbp=newff([-1 1;-1 1],[2 2],{'logsig' 'logsig'},'traingd');第三步:初始化权值阈值 netbp.IW{1}=[1 2;-2 0]; netbp.LW{2}=[1 1;0 -2]; netbp.b{1}=[-3 1]'; netbp.b{2}=[2 3]';第四步:设置训练函数参数netbp.trainParam.lr=1; //设置学习率netbp.trainParam.goal=0.0001; //设置最后达到的均方误差为0.0001 netbp.trainParam.epochs=5000; //设置最大训练步长d1d2第五步:训练神经网络 [netbp,tr]=train(netbp,p,t);程序运行的结果如下:经过346步运算达到设定的均方误差范围内。
最后输出⎥⎦⎤⎢⎣⎡=0.05140.9640Out训练后权值⎢⎣⎡= 1.5291-1.01071W ⎥⎦⎤1.41282.0322 ⎢⎣⎡= 1.4789-0.77132W ⎥⎦⎤2.9992-0.77392)分别改变学习率为1.5和0.5,观察结果 学习率5.1=α 5.0=α训练步长 263 786输出⎥⎦⎤⎢⎣⎡=0.05160.9640Out⎥⎦⎤⎢⎣⎡=0.05160.9640Out第一层权值 ⎢⎣⎡= 1.6030-1.01301W ⎥⎦⎤1.19092.0391⎢⎣⎡= 1.6078-1.01351W ⎥⎦⎤1.17662.0405第二层权值 ⎢⎣⎡= 1.4443-0.7744 2W ⎥⎦⎤3.1252-0.7806 ⎢⎣⎡= 1.4343-0.77512W ⎥⎦⎤3.1505-0.7816误差性能曲线结论1:学习率增大,所需的训练步长变短,即误差收敛速度快。
3)不断改变学习率,观察误差收敛速度。
学习率为5时 需要80步长学习率为30 需要14步长⎥⎦⎤⎢⎣⎡=0.05140.9641 Out⎥⎦⎤⎢⎣⎡=0.0489 0.9636Out学习率为60,需要202步长⎥⎦⎤⎢⎣⎡=0.03890.9496Out学习率为150 达不到误差范围内⎥⎦⎤⎢⎣⎡=0.00000.9500Out结论2:由上述4例可以发现,学习率不可以无限制地增大,增大到一定程度后,误差收敛速度将减慢,甚至有可能出现最后一图中的现象,即达不到误差范围内,进入局部稳定状态。
1.2 学习率为1,改变均方误差的设置,比较均方误差的改变对最后训练结果的影响 初始误差 0001.0=MSE001.0=MSE训练步长 346 58输出⎥⎦⎤⎢⎣⎡=0.05140.9640Out ⎥⎦⎤⎢⎣⎡=0.08340.9791Out 第一层权值⎢⎣⎡= 1.5291-1.01071W ⎥⎦⎤1.41282.0322 ⎢⎣⎡= 1.6182- 1.01231W ⎥⎦⎤1.14532.0369第二层权值 ⎢⎣⎡= 1.4789-0.77132W ⎥⎦⎤3.1252-0.7806⎢⎣⎡= 1.2695- 0.96662W ⎥⎦⎤2.9717-0.9691误差性能曲线结论3:在其他条件一样的前提下,将最后要达到的均方误差值设置较大时,网络训练时间就变长,误差收敛速度慢些,但是最后的输出结果较为精确些。
1.3 学习率为1,改变初始权值的设置,比较初始权值的改变对最后训练结果的影响 初始 权值 ⎢⎣⎡−=211W⎥⎦⎤02,⎢⎣⎡=012W ⎥⎦⎤−21 ⎢⎣⎡−=5.111W ⎥⎦⎤12,⎢⎣⎡−=17.02W ⎥⎦⎤−37.0 训练步长 346146输出⎥⎦⎤⎢⎣⎡=0.05140.9640Out⎥⎦⎤⎢⎣⎡=0.06010.9598 Out第一层权值 ⎢⎣⎡= 1.5291-1.01071W ⎥⎦⎤1.41282.0322 ⎢⎣⎡= 1.4088-1.01311W ⎥⎦⎤1.27352.0392 第二层权值 ⎢⎣⎡= 1.4789-0.77132W ⎥⎦⎤3.1252-0.7806 ⎢⎣⎡= 1.6298-0.63372W ⎥⎦⎤3.6105-0.6349误差性能曲线结论4:由上表可以看出,后者的初始权值比较合适些,因此训练的时间变短,误差收敛速度明显快些。
因此初始权值的选取对于一个网络的训练是很重要的。
1.4 学习率为1,改变初始阈值的设置,比较初始阈值的改变对最后训练结果的影响 初始 阈值 ⎥⎦⎤⎢⎣⎡−=13θ, ⎥⎦⎤⎢⎣⎡=32r⎥⎦⎤⎢⎣⎡−=02θ, ⎥⎦⎤⎢⎣⎡=41r训练步长 346 137输出⎥⎦⎤⎢⎣⎡=0.05140.9640Out ⎥⎦⎤⎢⎣⎡=0.06370.9534Out 第一层权值 ⎢⎣⎡= 1.5291-1.01071W ⎥⎦⎤1.41282.0322⎢⎣⎡= 1.5021- 1.00991W ⎥⎦⎤1.49382.0297第二层权值 ⎢⎣⎡= 1.4789-0.77132W ⎥⎦⎤3.1252-0.7806⎢⎣⎡= 1.7774-1.03302W ⎥⎦⎤3.2294-0.9883误差性能曲线结论5:由上表可以看出,后者的初始阈值比较合适些,因此训练的时间变短,误差收敛速度明显快些。
因此初始阈值的选取对于一个网络的训练也是很重要的。
小结:由1.1到1.4,用最基本的BP 算法来训练BP 神经网络时,学习率、均方误差、权值、阈值的设置都对网络的训练均有影响。
综合选取合理的值,将有利于网络的训练。
在最基本的BP 算法中,学习率在整个训练过程是保持不变的,学习率过大,算法可能振荡而不稳定;学习率过小,则收敛速度慢,训练时间长。
而要在训练之前选择最佳的学习率是不现实的。
因此学习率可变的BP 算法(variable learning rate backpropagation ,VLBP)应运而生。
下一结介绍用VLBP 来训练该网络的情况。
2 用VLBP 算法训练网络。
2.1 算法简单介绍⎩⎨⎧=+)()()1(k k k k k decinc ααα )()1()()1(k E k E k E k E <+<+ (1))()()1()()1(k x k E k x k x ∂∂−+Δ=+Δηαη (2))1()()1(+Δ+=+k x k x k x (3)当误差以减少的方式趋于目标时,说明修正方向正确,可以使步长增加,因此学习率乘以增量因子inc k ,使学习率增加;而修正过头时,应减少步长,可以乘以减量因子dec k ,使学习率减小。
2.2 具体实现与第一部分的程序设计差不多,初始学习率为1,最后要达到的均方误差值设为0.0001,以下部分做些改动。
netbp3=newff([-1 1;-1 1],[2 2],{'logsig' 'logsig'},'traingdx');//将训练函数改为“traingdx ” netbp3.trainParam.lr_inc=1.1; //将学习率增量因子设置为1.1 netbp3.trainParam.lr_dec=0.65; //将学习率减量因子设置为0.65 最后结果比较 算法 最基本的BP 算法学习率可变的BP 算法初始学习率1=α65.01.111===dec inc k k α 训练 步长 346 50输出⎥⎦⎤⎢⎣⎡=0.05140.9640Out⎥⎦⎤⎢⎣⎡=0.05000.9638 Out第一层权值 ⎢⎣⎡= 1.5291-1.01071W ⎥⎦⎤1.41282.0322 ⎢⎣⎡= 1.4084-1.00451W ⎥⎦⎤1.77482.0135 第二层权值 ⎢⎣⎡= 1.4789-0.77132W ⎥⎦⎤3.1252-0.7806⎢⎣⎡= 1.5447-0.7669 2W ⎥⎦⎤2.8650-0.7683误差性能曲线小结:采用学习率可变的BP 算法的收敛速度明显比学习率不变的算法提高很多。
以上两种算法都是沿着梯度最陡下降方向修正权值,误差减小的速度是最快,但收敛速度不一定是最快的。
针对收敛速度提出了变梯度算法。
下一结介绍变梯度算法(conjugate gradient backpropagation,CGBP)对网络训练的情况。
3 用CGBP 算法训练网络3.1 算法简单介绍)()()1(k p k x k x α+=+ (1) )1()()()(−+−=k p k k g k p β (2) )1()1()()()(−−=k g k g k g k g k T T β (3)该算法中,沿着变化的方向进行搜索,使其收敛速度比最陡下降梯度方向的收敛速度更快。
3.2 具体实现其他部分程序设计均与基本BP 算法相同,不要设置学习率,误差也设为0.0001。
就在创建网络时由下面一条语句完成。
netbp4=newff([-1 1;-1 1],[2 2],{'logsig' 'logsig'},'traincgf'); 算法 最基本的BP 算法 CGBP 算法训练 步长 346 3输出⎥⎦⎤⎢⎣⎡=0.05140.9640Out⎥⎦⎤⎢⎣⎡=0.04980.9448Out第一层权值 ⎢⎣⎡= 1.5291-1.01071W ⎥⎦⎤1.41282.0322⎢⎣⎡= 0.7320- 0.92651W ⎥⎦⎤3.80391.7794第二层权值 ⎢⎣⎡= 1.4789-0.77132W ⎥⎦⎤3.1252-0.7806 ⎢⎣⎡= 2.1081-0.62012W ⎥⎦⎤1.7789-0.6305误差性能曲线小结:变梯度算法只要3步就能到达设定的误差范围内,其收敛速度的确是以上介绍的几种算法中最快的一种。
但是它所需要的存储空间也比普通算法要多一些。
在这个简单的网络中,它比普通算法多1000多个字节的存储空间。