《人工神经网络及其应用实例—-毕业论文设计.docx》由会员分享,可在线阅读,更多相关《人工神经网络及其应用实例—-毕业论文设计.docx(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、人工神经网络及其应用实例-毕业论文设计 人工神经网络及其应用实例人工神经网络是在现代神经科学研究成果基础上提出的一种抽 象数学模型,它以某种简化、抽象和模拟的方式,反映了大脑功能的 若干基本特征,但并非其逼真的描写。 人工神经网络可概括定义为:由大量简单元件广泛互连而成的复 杂网络系统。所谓简单元件,即人工神经元,是指它可用电子元件、 光学元件等模拟,仅起简单的输入输出变换y = (x)的作用。下图是 3 中常用的元件类型: 线性元件:y = 0.3x,可用线性代数法分析,但是功能有限,现在已不太常用。 2 1.5 1 0.5 -0.5 -1 -1.5 -2 -6 -4 -2 0 2 4 6
2、连续型非线性元件:y = tanh(x),便于解析性计算及器件模拟,是当前研究的主要元件之一。 离散型非线性元件: y = ? 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -6 -4 -2 2 4 6 ?1, x 0 ?-1, x 0 ,便于理论分析及阈值逻辑器件 实现,也是当前研究的主要元件之一。 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -6 -4 -2 2 4 6 每一神经元有许多输入、输出键,各神经元之间以连接键(又称 突触)相连,它决定神经元之间的连接强度(突触强度)和性质(兴 奋或抑制),即决定神经元间相互作用的强弱和正负,共有三种类型: 兴奋型连
3、接、抑制型连接、无连接。这样,N个神经元(一般N很大)构成一个相互影响的复杂网络系统,通过调整网络参数,可使人工神 经网络具有所需要的特定功能,即学习、训练或自组织过程。一个简 单的人工神经网络结构图如下所示: 上图中,左侧为输入层(输入层的神经元个数由输入的维度决定),右侧为输出层(输出层的神经元个数由输出的维度决定),输入层与 输出层之间即为隐层。 输入层节点上的神经元接收外部环境的输入模式,并由它传递给 相连隐层上的各个神经元。隐层是神经元网络的内部处理层,这些神 经元在网络内部构成中间层,不直接与外部输入、输出打交道。人工 神经网络所具有的模式变换能力主要体现在隐层的神经元上。输出层
4、用于产生神经网络的输出模式。 多层神经网络结构中有代表性的有前向网络(BP网络)模型、 多层侧抑制神经网络模型和带有反馈的多层神经网络模型等。本文主 要探讨前向网络模型。 多层前向神经网络不具有侧抑制和反馈的连接方式,即不具有本 层之间或指向前一层的连接弧,只有指向下一层的连接弧。代表是 BP 神经网络:输入模式由输入层进入网络,经中间各隐层的顺序变 换,最后由输出层产生一个输出模式,如下图所示: 输入层 隐层 输出层 多层前向神经网络由隐层神经元的非线性处理衍生它的能力,这 个任务的关键在于将神经元的加权输入非线性转换成一个输出的非 线性激励函数。下图给出了一个接收 n 个输入 x 1, x
5、 2 , , x n 的神经元: b x 1 x 2 y x n y = ( w j j + b ) 神经元的输出由下式给出: n x j =1 这里输入的加权和(括号内部分)由一个非线性函数传递, b 表 示与偏差输入相关的权值, w j 表示与第 j 个输入相关的权值。 使用最广泛的函数是 S 形函数,其曲线家族包括对数函数和双曲 正切函数,这些都可用来对人口动态系统、经济学系统等建模。另外 所用的其他函数有高斯函数、正弦函数、反正切函数,在此不一一展 开介绍,本文主要使用的激励函数是对数函数,函数表达式为: y = L (u ) = 函数曲线如下图所示: 1 0.8 0.6 0.4 0.
6、2 1 1 + e -u -0.2 -10 -8 -6 -4 -2 2 4 6 8 10 对于有限输入量,对数函数输出范围为 y (0,1)。在输入为 u = 0 时, 输出值为中间值 y = 0.5。输出在 u = 0 附近随着输入的增加以相对快的 = t - 1 + e ? ?u e -u ? ?u e -u ?w = - ? = ? E ? ? x ?b = - ? = ? E ? 速率增加并非常慢地到达上限。对于 u 0 ,输出起初减少得很快,然 后随着下限的接近将会变慢。 训练神经元的规则有很多种,这里首先介绍利用 delta 规则的学 习,神经元选择为一个单输入单输出的简单情形,数
7、学描述如下: u = wx + b , y = 1 1 + e -u 该神经元具有一个输入 x ,权重为 w ,偏差输入为 b ,目标输出 为 t ,预报输出为 y 。则预报误差为: E = t - y = t - 1 1 1 + e -u 1 + e - wx -b 为消除当误差在整个输入模式上求和时引起的误差符号问题,在 delta 规则里使用的误差指示是平方误差,定义为: 1 1 2 2 1 - wx -b )2 根据 delta 规则,最优权值(使平方误差最小)可以在训练过程 中从初始权值出发,沿负梯度方向下降得到。将平方误差对 w , b (神 经元的可调整参数)进行微分,得: ?
8、?u = -E ? e -u -u 2 ? ?w ? ?b = ? = - E ? ? x ?u ?w (1 + e -u )2 = ? = - E ? ?u ?b (1 + e -u )2 根据 delta 原则,权值改变应与误差梯度的负值成比例,引入学 习率 ,每次迭代中的权值改变可表示为: ? e -u ?w (1 + e -u )2 ? ?b e -u (1 + e -u )2 w ij ji + ? E ? = w 学习率 决定了沿梯度方向的移动速度,以确定新的权值。大的 值会加快权值的改变,小的 值则减缓了权值的改变。第 i 次迭代 后的新权值可表示为: w i +1 = w i
9、+ ? E ? e -u (1 + e -u )2 ? x b i +1 = b i + ? E ? e -u (1 + e -u )2 如果将偏差输入 b 视为输入 x 的一部分,令 x 0 = 1, w 0 = b ,可以得到 对于多输入神经元的权值修正式: +1 e -u (1 + e -u )2 ? x j , j = 0,1, 2, , n 总之,利用 delta 规则的有监督的学习可以按如下方法来实现: 一个输入模式( x 0 , x 1, x 2 , , x n )通过连接被传递,它的初始权值被设置 为任意值。对加权的输入求和,产生输出 y ,然后 y 与给定的目标输 出 t 做
10、比较决定此模式的平方误差 。输入和目标输出不断地被提出, 在每一次迭代或每一个训练时间后利用 delta 规则进行权值调整直到 得到可能的最小平方误差。 delta 规则在每一步中通过导数寻找在误差平面中某个特定点局 部区域的斜率,它总是应用这个斜率从而试图减小局部误差,因此, delta 规则不能区分误差空间中的全局最小点和局部最小点,它本身 不能克服单层神经网络的局限,无法直接应用到多层神经网络(易陷 入局部最小点),但它的一般形式是多层神经网络中的学习算法 反传算法的核心。 在多层前向神经网络的训练过程中,误差导数或关于权值的误差 , u i = a ji j , i = 1, 2, z
11、 = v , v = b i i y 表面的斜率对权值的调整是至关重要的,在网络训练期间,所有的输 出神经元和隐含神经元权值必须同时调整,因此,有必要找出关于所 有权值的误差导数。由于网络层数增多,平方误差 与权值的连接没 有之前单个神经元时那么直接,故可以使用链式规则的概念来找到导 数。 下面对一个含有一层隐含神经元的 BP 网络进行讨论,网络结构 如下图所示: x x x x 各个神经元的输入输出关系为: y i = 1 1 + e -u i n j =0 x , m m i =0 设目标输出为 t ,则平方误差 定义为: = ? y i , i = 0,1, 2, = ? b i , i
12、 = 1, 2, ? ?u i ? ?u i ?a ji ?u i = -(t - z ) ? b i ? ? x j , i = 1, 2, 1 2 使用链式法则,分别列出平方误差 对所有网络参数的导数: ? ?v = -(t - z ) ? ?b i ? ?v , m ? ?y i ? ?v , m = ? = ? ?u i ?y i ?u i ?y i (1+ e -u i )2 , i = 1, 2, , m ? ?a ji = ? = ? x j , i = 1, 2, , m , j = 0,1, 2, , n 在实际的编程过程中,我们需要的是 ? ?b i 和 ? ?a ji ,
13、所以如果有需要, 也可以直接采用以下整理之后的形式: ? ?b i = -(t - z ) ? y i , i = 0,1, 2, , m ? ?a ji e -u i (1 + e -u i )2 , m , j = 0,1, 2, , n 研究表明,两层网络在其隐层中使用 S 形激励函数,在输出层中 使用线性传输函数,就几乎可以以任意精度逼近任意感兴趣的函数, 只要隐层中有足够的单元可用。 问题 1: 试使用 BP 神经网络去逼近正弦函数的正半周,如下: t = sin(x ), x 0, 由于输入量 x 仅有一维,故 BP 神经网络结构可以设计为: , u i = a ji j , i
14、= 1, 2 z = v , v = b i i y = -(t - z ) ? b i ? ? x j , i = 1, 2, j = 0,1 b i i b k - ? = = b i + ? (t - z ) ? y i , i = 0,1, 2 = a - ? = a ji + ? (t - z ) ? b i ? ? x j , i = 1, 2, j = 0,1 ?a j i (1 + 各个神经元的输入输出关系为: y i = 1 1 + e -u i 1 j =0 x 2 i =0 根据之前的推导,平方误差 对所有网络参数的导数为: ? ?b i = -(t - z ) ? y
15、i , i = 0,1, 2 ? ?a ji e -u i (1 + e -u i )2 网络参数修正方程为: k +1 ? ?b i k a k +1 ji ji k ? k 为加快寻找最优权值的速度,可以使用动量法。之前的方法中, 收敛到最优权值的速度取决于学习率的大小,但是过大的学习率会导 致来回震荡,不能稳定到最优权值点。动量法的引入,使得较大的学 习率也可以具有较好的稳定性,即提供了在学习期间到达最优权值时 的稳定性。这种方法基本上是将过去权值变化的平均值附加到每一次权值变化的新权值增量,从而使网络权值的变化更平滑。数学表示如下: ?w k +1 = ? ?w k + (1- ) ?
16、 ? (- ? ?w ) 式中, 是一个在0和1之间的动量参数, ?w k是在前一个训练时间里的权值变化。使用动量法的实际效果是:基本上,如果以前积累的变化与之前方向所暗示的是同一个方向时,动量部分就会加速当前权值改变;如果当前积累的变化是相反的方向,动量将阻止当前的变化。 据此编写MATLAB程序,源代码如下: beta = 0.1; miu = 0.8; for i = 1 : 1 : 101; x1(1, i) = (i - 1) * pi / 100; t(1, i) = sin(x1(1, i); end x0 = 1; y0 = 1; a01 = rand(); a02 = rand(); a11 = rand(); a12 = rand(); b0 = rand(); b1 = rand(); b2 = rand(); delta_a01 = 0; delta_a02 = 0; delta_a11 = 0; delta_a12 = 0; delta_b0 = 0; delta_b1 = 0; delta_b2 = 0; k = 1; total_error = 0;