1 神经网络的性能优化
在学习神经网络的过程中,性能学习是一种非常重要的学习规则,其目的在于调整网络参数以优化网络性能。优化过程可以分为两步,第一步是定义“性能”的标准,即找到一个衡量网络性能的定量标准,也就是性能指数;第二步是搜索减小性能指数的参数空间。假设最小化的性能指数是一个解析函数F(x),它的各级导数均存在。那么F(x)可表示某
∗
些指定点𝑥上的泰勒级数展开,如下式所示
神经网络作为一门新兴的学科,在短短的数十年内已经被运用于多种学科领域,大量的有关神经网络机理、模型以及算法分析等方面的文章如雨后春笋般涌现。MATLAB是一种强大的工程计算和仿真软件,其基本上可以实现神经网络的各种设计方法和算法。
牛顿法是求解优化问题最早使用的经典算法之一,其基本思想是用迭代点处的一阶导数和二阶导数对目标函数进行二次函数近似,然后把模型的极小点作为新的迭代点,并不断的重复这个过程,直至求得满足精度的近似极小点。
𝐹(𝑥)=𝐹(𝑥∗)+𝑑𝑥𝐹(𝑥)|
0 引言
𝑑
Abstract: Performance learning is one of important learning rules in neural network ,which aims to find an optimal point to improve the performance of neural network.Newton's method is a kind of algorithm which based on second-order Taylor series, the iteration step by step to achieve further minimization, and finally find the most advantage.In this paper,by using the matlab, Newton's method is easily to realize and it also gives a demonstration to analyse and calculation.
Key words: Newton’s method; MATLAB
𝑥=𝑥∗
+𝑛!
1𝑑𝑛𝑑𝑥
𝑛
𝐹(𝑥)|
𝑥=𝑥∗
(𝑥‒𝑥∗)𝑛+⋯ (1)
(𝑥‒𝑥∗)1𝑑2+𝐹(𝑥)|𝑥‒𝑥∗)2+⋯(∗𝑥=𝑥2𝑑𝑥2
Realise Newton’s Method by using Matlab
神经网络的性能指数并不仅仅是一个纯量x的函数,它是所有网络参数(各个权值和
偏置值)的函数,参数的数量也不是确定的。因此,需要将泰勒级数展开式扩展为多变量形式。假设有下列n元函数。
摘要:性能学习是神经网络中的一类很重要的学习规则,其旨在找到一个最优点来提高网络的性能。牛顿法是一种基于二阶泰勒级数的算法,逐步迭代来实现进一步的极小化,最后找到最优点。本文采用MATLAB编程来实现牛顿法,并通过具体的例子进行分析计算。关键字:牛顿法;MATLAB
𝐹(𝑥)=𝐹(𝑥1,𝑥2,⋯,𝑥𝑛)
把这个函数在点𝑥的泰勒级数展开,可以得到如下式子:
∂∂∗∗
𝐹(𝑥)=𝐹(𝑥∗)+𝐹(𝑥)|𝑥‒𝑥+𝐹(𝑥)|𝑥2‒𝑥2()()∗11∗𝑥=𝑥𝑥=𝑥∂𝑥1∂𝑥2
∗
+
1∂2
𝐹(𝑥)|2∂𝑥1∂𝑥2𝑥=𝑥∗
∗∗
)+⋯(𝑥1‒𝑥1)(𝑥2‒𝑥2
𝑥=𝑥∗
将这个表达式表示成矩阵的形式:
𝐹(𝑥)=𝐹(𝑥∗)+∇𝐹(𝑥)|
𝑥=𝑥∗
2
(𝑥‒𝑥∗)+1(𝑥‒𝑥∗)𝑇∇2𝐹(𝑥)|
]⋮
∂1∂2∗∗2
+⋯+𝐹(𝑥)|𝑥𝑛‒𝑥𝑛)+𝐹(𝑥)|𝑥1‒𝑥1(()∗∗𝑥=𝑥𝑥=𝑥∂𝑥𝑛2∂𝑥2
(𝑥‒𝑥∗)2+⋯
(4)
∇𝐹(𝑥)=
∇2𝐹(𝑥)为赫森矩阵,定义为
∇2𝐹(𝑥)=
通过限定泰勒级数展开式的数量,可以用泰勒级数近似估计性能指数。2 牛顿法
牛顿法是基于如下的二阶泰勒级数:
𝑇
𝐹(𝑥𝑘+1)=𝐹(𝑥𝑘+∆𝑥𝑘)≈𝐹(𝑥𝑘)+𝑔𝑇𝑘∆𝑥𝑘+2∆𝑥𝑘𝐴𝑘∆𝑥𝑘
1
[ [∂∂∂
()()𝐹𝑥𝐹𝑥⋯𝐹(𝑥)𝑇∂𝑥1∂𝑥2∂𝑥𝑛
其中
∇𝐹(𝑥)为梯度,定义为
∂2
∂𝑥21∂2
𝐹(𝑥)∂𝑥2∂𝑥1
2
𝐹(𝑥)∂2
𝐹(𝑥)∂𝑥1∂𝑥2∂2∂𝑥2
2
⋯⋯
∂2
𝐹(𝑥)∂𝑥1∂𝑥𝑛∂2
𝐹(𝑥)∂𝑥2∂𝑥𝑛∂
2
𝐹(𝑥)2⋮
⋮
∂
𝐹(𝑥)∂𝑥𝑛∂𝑥1∂
𝐹(𝑥)∂𝑥𝑛∂𝑥2
⋯
∂𝑥𝑛
𝐹(𝑥)2
]
牛顿法的原理是求F(x)的二次近似的驻点。用下式求这个二次函数对∆𝑥𝑘的梯度并设它
为零,
∇𝐹(𝑥)=𝐴𝑥+𝑑 (8)
则有
𝑔𝑘+𝐴𝑘∆𝑥𝑘=0
求解∆𝑥𝑘得
1
∆𝑥𝑘=‒𝐴‒𝑘𝑔𝑘
于是将牛顿法定义为
1∆𝑥𝑘+1=∆𝑥𝑘‒𝐴‒𝑘𝑔𝑘
其中𝐴𝑘为在𝑥𝑘的赫森矩阵
(3) (5)(6)(7)(9)(10)(11)
(2)
𝐴𝑘=∇2𝐹(𝑥)|
𝑥=𝑥∗
3 牛顿法的MATLAB实现
牛顿法的步骤如下:
①、给定终止误差值epson=1e-12,初始点𝑥0,令k=0。②、计算𝑔𝑘=∇𝐹(𝑥𝑘),若‖𝑔𝑘‖≤𝑒𝑝𝑠𝑜𝑛,停止运算,输出
2
𝐺∇𝐹(𝑥𝑘)𝑘=③、计算
④、令𝑥𝑘+1=𝑥𝑘+𝑝。k=k+1,转①。举一个例子,一个函数
2𝑥2(1‒𝑥1+2𝑥2+4)𝐹(𝑥)=𝑒
,以𝑥0=[1
∇𝐹(𝑥)=
赫森矩阵为
[]∂
𝐹(𝑥)∂𝑥1∂
𝐹(𝑥)∂𝑥2
=𝑒
2(𝑥21‒𝑥1+2𝑥2+4)
其进行一次迭代。
首先求梯度和赫森矩阵。梯度为
[(2𝑥1‒1)4𝑥2
‒2]𝑇为初始点,用牛顿法对
] ∂2∂𝑥212
(13)
∂2
𝐹(𝑥)∂𝑥1∂𝑥2∂2∂𝑥22
𝐹(𝑥)∇2𝐹(𝑥)=
[𝐹(𝑥)∂
𝐹(𝑥)∂𝑥2∂𝑥1
]]]因为牛顿法总是用一个二次函数逼近F(x),然后求其驻点。如果原函数为二次函数(有强极小点),它就能实现一步极小化。
牛顿法最突出的有点是收敛速度快,具有局部二阶收敛性。初始点要足够的“靠近”极小点。由于实际问题中的精确极小点一般不是知道的,因此初始点的选取要适当。
2𝑥2(1‒𝑥1+2𝑥2+4)=𝑒
[4𝑥21‒4𝑥1+3
(2𝑥1‒1)(4𝑥2)
(2𝑥1‒1)(4𝑥2)
16𝑥22+4
在初始点𝑥0,有
𝑔0=∇𝐹(𝑥)|𝑥=𝑥=
0
和
[0.163×106
‒1.302×106
‒0.130×107
1.107×107
] 7
0.049×10
𝐴0=∇𝐹(𝑥)|𝑥=𝑥=
0‒0.130×107
2
[所以牛顿法的第一次迭代为
1
𝑥1=𝑥0‒𝐴‒0𝑔0
7
10.049×10=‒2‒
‒0.130×107
[][‒0.130×1071.107×107
][‒1
0.163×106=0.971
‒1.886 ‒1.302×106
][F(x)的极小点即指数部分的极小点,即
(14)
(12)
](15)
(16)
(17)
0
𝑥∗=‒𝐴‒1𝑑=‒2
04
用MATLAB实现,源代码如下:
[][‒01]=[0.50]
‒1
4 结束语
参考文献
[1]马昌凤.最优化方法及其MATLAB程序设计.福建:福建师范大学,2009.
[2]傅荟璇.赵红.MATLAB神经网络应用设计.北京:机械工业出版社,2010.
[3]飞思科技产品研发中心.神经网络理论与MATLAB 7实现.北京:电子工业出版社,2005.[5]戴葵译.神经网络设计.北京:机械工业出版社,2002.
神经网络是一门很活跃的,应用范围特别广的学科。性能学习是最重要的神经网络学习规则之一。通过性能学习,网络参数能得到调节从而优化网络性能。牛顿法是一种基于二阶泰勒级数展开而导出的优化算法。对于二次函数,牛顿法能够一次迭代收敛到一个驻点。而对于复杂的函数,可以经过多次迭代,最后使其收敛到真正的极小点。
神经网络的机理、算法及模型可以应用到各个科学领域中去,众多的神经生理学家、心理学家、数理学家、计算机与信息工程学家及企业家等对其的进一步研究和应用,使神经网络日益成为当代高科技领域中方兴未艾的竞争热点。
通过运行可以知道,经过4次迭代。找到了该函数的绩效点𝑥𝑚。
牛顿法的收敛速度比较快,一次迭代过后基本上接近极小值,经过数次迭代之后,就可以进一步实现极小化。
𝑥𝑚=0.5000
0
[] syms x1 x2
f=exp(x1^2-x1+2*x2^2+4);v=[x1,x2];
df=jacobian(f,v); df=df.';
G=jacobian(df,v); epson=1e-12;xm=[0,0]';
g1=subs(df,{x1,x2},{xm(1,1),xm(2,1)});G1=subs(G,{x1,x2},{xm(1,1),xm(2,1)});k=0;
while(norm(g1)>epson) p=-G1\\g1; xm=xm+p;
g1=subs(df,{x1,x2},{xm(1,1),xm(2,1)}); G1=subs(G,{x1,x2},{xm(1,1),xm(2,1)}); k=k+1; endk xm
运行结果为:k =4
(18)
[6]云磊.牛顿迭代法的MATLAB实现.湖北:襄樊学院,2011.
因篇幅问题不能全部显示,请点此查看更多更全内容