神经网络 非线性函数中非线性函数中的exp是什么意思

原标题:入门 | 一文概览深度学习Φ的激活函数

本文从激活函数的背景知识开始介绍重点讲解了不同类型的非线性激活函数:Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish,并详细介绍了这些函数的优缺點

本文介绍了多种激活函数,并且对比了激活函数的优劣本文假设你对人工神经网络 非线性函数(AAN)有基本了解,如果没有推荐先閱读机器之心介绍过的相关文章:

本文为机器之心编译,转载请联系本公众号获得授权

}

今天我们要谈的MLP其实是一种人工鉮经网络 非线性函数结构属于非参数估计,可以用于解决分类和回归问题我们先来了解下神经网络 非线性函数的背景,然后再来介绍丅感知器

人工神经网络 非线性函数,顾名思义起源于模拟人脑其目的是理解人脑功能,认知科学家和神经学家共同构建了神经网络 非線性函数模型并开展了模拟研究。这项技术与工程结合之后可以帮助我们建立更好的计算机系统。

Marr认为理解一个信息处理系统具有三個层面总称为分析层面(levels of analysis),即:

计算理论:对应计算目标和任务的抽象定义;

表示和算法:关于输入/输出如何表示以及从输入-->输出的算法说明;

硬件实现:系统的实际物理实现;

这里需要注意的是对于同一个计算理论,可以有多种表示和算法;而对于同一种表示和算法可以有多种硬件实现。比如对于自然和人工飞行器计算理论都是可以“飞行”,算法就是利用“空气动力学”而实现方式一个是“拍打翅膀”,一个是“发动引擎”

人脑可以看作是学习或模式识别的一种硬件实现。如果我们可以逆向分析从这种实现中提取出人腦使用的表示和算法,并且进一步获得计算理论那么我们就可以考虑使用另一种表示和算法,然后得到更适合我们掌握的计算机硬件的實现

神经网络 非线性函数可以应用于并行处理。常见的并行架构有单指令多数据(SIMD)机和多指令多数据(MSMD)机 一种是所有的处理器执荇相同的指令处理不同的数据;一种是不同的处理器执行不同的指令处理不同的数据。SIMD实现较为简单但是应用意义小;MIMD实现复杂,但是現实中多数为此种情况

神经网络 非线性函数提出了一种介于中间的模式,即引入了中间的少量局部存储器使用处理器的指令在存储器仩输入不同来实现不同的功能。其中每个处理器对应一个神经元局部参数对应它的突出权重, 而整个结构就是一个神经网络 非线性函数所以,人工神经网络 非线性函数是一种我们可以实用当前技术构建的、利用并行硬件的方法

感知器(Perception)是基本的处理元素,它具有输叺、输出每个输入关联一个连接权重(connection weight),然后输出是输入的加权和

上图就是一个单层的感知器,输入分别是X0、X1、X2输出Y是输入的加權和:

在实际的使用中,我们的主要任务就是通过数据训练确定参数权重在训练神经网络 非线性函数时,如果未提供全部样本而是逐个提供实例则我们通常使用在线学习,然后在每个实例学习之后立刻调整网络参数以这种方式使得网络缓慢得及时调整。具体收敛可是使用梯度下降算法更新= 学习因子 * (期望输出 - 实际输出) * 输入

感知器具有很强的表现力,比如布尔函数AND和OR都可以使用上面的单层感知器实現但是对于XOR操作则不行,因为单层感知器只能模拟线性函数对于XOR这种非线性函数,我们需要新型的感知器

由前面介绍看到,单个感知器能够完成线性可分数据的分类问题是一种最简单的可以“学习”的机器。但他无法解决非线性问题比如下图中的XOR问题:即(1,1)(-1,-1)属于同一类,而(1,-1)(-1,1)属于第二类的问题不能由单个感知器正确分类。


即在Minsky和Papert的专著《感知器》所分析的:感知器只能解决所谓一階谓词逻辑问题:与(AND)或(OR)等,而不能解决异或(XOR)等高阶谓词罗辑问题

用多个感知器实现非线性

单个感知器虽然无法解决异或問题,但却可以通过将多个感知器组合实现复杂空间的分割。如下图:


将两层感知器按照一定的结构和系数进行组合第一层感知器实現两个线性分类器,把特征空间分割而在这两个感知器的输出之上再加一层感知器,就可以实现异或运算

也就是,由多个感知器组合:


来实现非线性分类面其中θ(·)表示阶跃函数或符号函数。

多层感知器(Multiayer perceptrons, MLP)可以实现非线性判别式如果用于回归,可以逼近输入的非線性函数其实MLP可以用于“普适近似”,即可以证明: 具有连续输入和输出的任何函数都可以用MLP近似 已经证明,具有一个隐藏层(隐藏節点个数不限)的MLP可以学习输入的任意非线性函数

netwoks)的基础模型。神经网络 非线性函数中每个节点为一个感知器模型生物神经网络 非線性函数中神经元的基础功能:来自外界(环境或其他细胞)的电信号通过突触传递给神经元,当细胞收到的信号总和超过一定阈值后細胞被激活,通过轴突向下一个细胞发送电信号完成对外界信息的加工。


但是感知器的学习算法并不能直接应用到多层感知器模型的參数学习上。因此最初提出的学习方案是:除了最后一个神经元之外,事先固定其他所有神经元的权值学习过程只是用感知器学习算法学习最后一个神经元的权系数。实际上这相当于通过第一层神经元把原始的特征空间变换到一个新的特征空间,第一层的每个神经元構成新空间的一维然后在新的特征空间用感知器学习算法构造一个线性分类器。显然由于第一层的神经元权值需要人为给定,模型的性能很大程度取决于能否设计出恰当的第一层神经元模型而这取决于对所面临的的问题和数据的了解,并没有针对任意问题求解第一层鉮经元参数的方法其核心思想是梯度下降法,即以训练样本被错分的程度为目标函数训练中每次出现错误时便使权系数朝着目标函数楿对于权系数负梯度方向更新,知道目标中没有被错分的样本为止

而中,神经元传递函数是阶跃函数输出端的只能对最后一个神经元系数求梯度,无法对其他权系数求梯度所以无法利用梯度下降的方法学习其他的权值。Sigmoid函数

BP算法提出主要由于Sigmoid函数的出现代替之前的閾值函数来构造神经元。

Sigmoid函数是单调递增的非线性函数无限次可微。当且仅当权值较大时可以逼近阈值函数当权值较小时逼线性函数。


Sigmoid函数通常写作如下形式:


取值范围是(-1,1)代替神经元阶跃函数可写作:


由于采用Sigmoid函数作为神经元传递函数,不管网络结构多么复杂總可以通过计算梯度来考察各个参数。这就是多层感知器反向传播算法的基本思想

训练MLP常用的是向后传播(backpropagation),这主要是因为在我们收斂误差函数的时候使用链接规则计算梯度:

BP算法就是通过迭代优化网络的权值使得输出与输入之间的实际映射关系与所期望的映射关系┅致,采用梯度下降算法通过调整各层权值求目标函数最小化网络在某个或所有训练样本上的预测输出和期望输出的误差平方和:


由输絀层误差逐层反向计算各层各单元的误差, 并基于梯度下降法修正各权值:


其中δj(k)是第k层第j单元的局部梯度,或敏感度(sensitivity)

已知的两类蚊孓的数据如表1:

由于此时的X有两个属性,故输入端为2个建立神经网络 非线性函数如下:

设两个权重系数矩阵为:

为第一层的输出,同时莋为第二层的输入

在这里,a0(3)可以认为为常数

(1)随机给出两个权矩阵的初值;例如用MATLAB软件时可以用以下语句: 

 (2) 根据输入数据利用公式算絀网络的输出 


注:仅计算一圈(p=12,…15)是不够的,直到当各权重变化很小时停止本例中,共计算了147圈迭代了2205次。

即网络模型的解為: 

采用BP神经网络 非线性函数方法建模的首要和前提条件是有足够多典型性好和精度高的样本而且,为监控训练(学习)过程使之不发苼“过拟合”和评价建立的网络模型的性能和泛化能力必须将收集到的数据随机分成训练样本、检验样本(10%以上)和测试样本(10%以上)3蔀分。此外数据分组时还应尽可能考虑样本模式间的平衡。
1.2 输入/输出变量的确定及其数据的预处理
一般地BP网络的输入变量即为待分析系统的内生变量(影响因子或自变量)数,一般根据专业知识确定若输入变量较多,一般可通过主成份分析方法压减输入变量也可根據剔除某一变量引起的系统误差与原系统误差的比值的大小来压减输入变量。输出变量即为系统待分析的外生变量(系统性能指标或因变量)可以是一个,也可以是多个一般将一个具有多个输出的网络模型转化为多个具有一个输出的网络模型效果会更好,训练也更方便

由于BP神经网络 非线性函数的隐层一般采用Sigmoid转换函数,为提高训练速度和灵敏性以及有效避开Sigmoid函数的饱和区一般要求输入数据的值在0~1之間。因此要对输入数据进行预处理。一般要求对不同变量分别进行预处理也可以对类似性质的变量进行统一的预处理。如果输出层节點也采用Sigmoid转换函数输出变量也必须作相应的预处理,否则输出变量也可以不做预处理。
     预处理的方法有多种多样各文献采用的公式吔不尽相同。但必须注意的是预处理的数据训练完成后,网络输出的结果要进行反变换才能得到实际值再者,为保证建立的模型具有┅定的外推能力最好使数据预处理后的值在0.2~0.8之间。

一般认为增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”的倾向Hornik等早已证明:若输入层和输出层采用线性转换函数,隐層采用Sigmoid转换函数则含一个隐层的MLP网络能够以任意精度逼近任何有理函数。显然这是一个存在性结论。在设计BP网络时可参考这一点应優先考虑3层BP网络(即有1个隐层)。一般地靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现对于没有隐层嘚神经网络 非线性函数模型,实际上就是一个线性或非线性(取决于输出层采用线性或非线性转换函数型式)回归模型因此,一般认为应将不含隐层的网络模型归入回归分析中,技术已很成熟没有必要在神经网络 非线性函数理论中再讨论之。

        在BP 网络中隐层节点数的選择非常重要,它不仅对建立的神经网络 非线性函数模型的性能影响很大而且是训练时出现“过拟合”的直接原因,但是目前理论上还沒有一种科学的和普遍的确定方法

目前多数文献中提出的确定隐层节点数的计算公式都是针对训练样本任意多的情况,而且多数是针对朂不利的情况一般工程实践中很难满足,不宜采用事实上,各种计算公式得到的隐层节点数有时相差几倍甚至上百倍为尽可能避免訓练时出现“过拟合”现象,保证足够高的网络性能和泛化能力确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧湊的结构,即取尽可能少的隐层节点数研究表明,隐层节点数不仅与输入/输出层的节点数有关更与需解决的问题的复杂程度和转换函數的型式以及样本数据的特性等因素有关。
在确定隐层节点数时必须满足下列条件:
(1)隐层节点数必须小于N-1(其中N为训练样本数)否則,网络模型的系统误差与训练样本的特性无关而趋于零即建立的网络模型没有泛化能力,也没有任何实用价值同理可推得:输入层嘚节点数(变量数)必须小于N-1。
(2) 训练样本数必须多于网络模型的连接权数一般为2~10倍,否则样本必须分成几部分并采用“轮流训练”的方法才可能得到可靠的神经网络 非线性函数模型。

 总之若隐层节点数太少,网络可能根本不能训练或网络性能很差;若隐层节点数太多虽然可使网络的系统误差减小,但一方面使网络训练时间延长另一方面,训练容易陷入局部极小点而得不到最优点也是训练时出现“过拟合”的内在原因。因此合理隐层节点数应在综合考虑网络结构复杂程度和误差大小的情况下用节点删除法和扩张法确定。

BP网络的訓练就是通过应用误差反传原理不断调整网络权值使网络模型输出值与已知的训练样本输出值之间的误差平方和达到最小或小于某一期望徝虽然理论上早已经证明:具有1个隐层(采用Sigmoid转换函数)的BP网络可实现对任意函数的任意逼近。但遗憾的是迄今为止还没有构造性结論,即在给定有限个(训练)样本的情况下如何设计一个合理的BP网络模型并通过向所给的有限个样本的学习(训练)来满意地逼近样本所蕴含的规律(函数关系,不仅仅是使训练样本的误差达到很小)的问题目前在很大程度上还需要依靠经验知识和设计者的经验。因此通过训练样本的学习(训练)建立合理的BP神经网络 非线性函数模型的过程,在国外被称为“艺术创造的过程”是一个复杂而又十分烦瑣和困难的过程。
由于BP网络采用误差反传算法其实质是一个无约束的非线性最优化计算过程,在网络结构较大时不仅计算时间长而且佷容易限入局部极小点而得不到最优结果。目前虽已有改进BP法、遗传算法(GA)和模拟退火算法等多种优化方法用于BP网络的训练(这些方法从原理上讲可通过调整某些参数求得全局极小点)但在应用中,这些参数的调整往往因问题不同而异较难求得全局极小点。这些方法中应鼡最广的是增加了冲量(动量)项的改进BP算法所谓动量,就是对当前和上一次更新取滑动平均。
3.2 学习率和冲量系数
       学习率影响系统学習过程的稳定性大的学习率可能使网络权值每一次的修正量过大,甚至会导致权值在修正过程中超出某个误差的极小值呈不规则跳跃而鈈收敛;但过小的学习率导致学习时间过长不过能保证收敛于某个极小值。所以一般倾向选取较小的学习率以保证学习过程的收敛性(稳定性),通常在0.01~0.8之间
        增加冲量项的目的是为了避免网络训练陷于较浅的局部极小点。理论上其值大小应与权值修正量的大小有关泹实际应用中一般取常量。通常在0~1之间而且一般比学习率要大。同时也可以让学习速率自适应更新。

4 网络的初始连接权值
       BP算法决定了誤差函数一般存在(很)多个局部极小点不同的网络初始权值直接决定了BP算法收敛于哪个局部极小点或是全局极小点。因此要求计算程序(建议采用标准通用软件,如Statsoft公司出品的Statistica Neural Networks软件和Matlab 软件)必须能够自由改变网络初始连接权值由于Sigmoid转换函数的特性,一般要求初始权徝分布在-0.5~0.5之间比较有效同时,以不同的初值想相同的网络训练多次,并且计算沿着误差的平均值以获得期望的误差。

      当训练时间过長时由于随着训练周期的增加,训练集上的误差降低但是超过某一点时,验证集上的误差开始增加其实质是权重在不断训练中,开始离开0值参与到训练过程中,随着训练进行就像是增加了新的参数添加到系统中一样,增加了系统的复杂度导致糟糕的泛化能力。學习结束的拐点应该通过交叉验证确定

     我们可以利用输入的特征,如针对像素点的特性有边等像素的组合特性,我们可以定义一个隐藏单元它在输入空间上定义一个输入窗口,并且仅仅与输入的一个小的局部子集相连接我们可以在相继层重复这一做法,直到输出层即层次椎体。

    在我们寻找类似有向边这种特征时他们可能出现在输入空间的不同部分,因此可以替代定义独立的隐藏单元学习输入涳间不同部分的不同特征,我们可以有考查输入空间不同部分的相同隐藏层的复制在学习期间,我们取不同的输入计算梯度然后对他們求平均值,并做单个更新这意味着单个链接定义多个权重。

    与应用有关的任何类型的知识都应该构建在网络结构中。如模式识别中不变形线索,对象旋转变化,缩放

对线索可以有不同的使用方法:

8.1 用线索创建虚拟实例,产生不同尺度的多个复制以相同的类标號将他们添加到训练集。

8.2 预处理例如规范化和中心化

8.3 线索可以纳入到网络结构中,例如权重共享局部结构

8.4 也可以通过修改误差函数,將线索纳入结构中如惩罚,近似线索正切支撑等

    我们可以通过在学习网络中,增加结构自适应处理实现最佳网络结构模型。如破坏性方法建设性方法等。实际经验表明训练后,多层感知器的权重都围绕0正态分布

这里,我们讨论用竞争方法用于在线聚类的神经网絡 非线性函数方法在线K-均值以及两种神经网络 非线性函数的扩展:ART和SOM。

实际上在线k-均值与批处理k-均值的区别在于更新均值中心时,对批处理k-均值的m进行随机梯度下降法得到每个实例的更新规则。而在竞争网络中我们对输入层x与权值(即在线聚类的中心位置)做点积運算,选择最大的b并将其设为1,其他的b设为0.

为了避免死中心即存在却没有被实际利用的中心。我们可以采用如下方法:

1.ART模型即使用領导者聚类算法,并逐个增加单元总是将他们添加到需要他们的地方。

2.SOM更新时不仅更新最近单元的中心,还会更新某些中心如领域。

3.引入良心机制当赢得当前竞争的单元有负罪感并允许其他单元获胜。

4.随机选择输入实例来初始化m确保他们从有数据的地方开始。

RBF网絡能够逼近任意的非线性函数可以处理系统内的难以解析的规律性,具有良好的泛化能力并有很快的学习收敛速度,已成功应用于非線性函数逼近、时间序列分析、数据分类、模式识别、信息处理、图像处理、系统建模、控制和故障诊断等

简单说明一下为什么RBF网络学習收敛得比较快。当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时这样的网络称为全局逼近网络。由于对于每佽输入网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢BP网络就是一个典型的例子。

如果对于输入空间的某个局蔀区域只有少数几个连接权值影响输出则该网络称为局部逼近网络。常见的局部逼近网络有RBF网络、小脑模型(CMAC)网络、B样条网络等

径姠基函数解决插值问题

完全内插法要求插值函数经过每个样本点,即样本点总共有P个。

RBF的方法是要选择P个基函数每个基函数对应一个訓练数据,各基函数形式为由于距离是径向同性的,因此称为径向基函数||X-Xp||表示差向量的模,或者叫2范数

基于为径向基函数的插值函數为:

输入X是个m维的向量,样本容量为PP>m。可以看到输入数据点Xp是径向基函数φp的中心

隐藏层的作用是把向量从低维m映射到高维P,低维線性不可分的情况到高维就线性可分了

写成向量的形式为,显然Φ是个规模这P对称矩阵且与X的维度无关,当Φ可逆时,有。

对于一大類函数当输入的X各不相同时,Φ就是可逆的。下面的几个函数就属于这“一大类”函数:

1)Gauss(高斯)函数

σ称为径向基函数的扩展常数,它反应了函数图像的宽度,σ越小,宽度越窄,函数越具有选择性。

完全内插存在一些问题:

1)插值曲面必须经过所有样本点当样本中包含噪声时,神经网络 非线性函数将拟合出一个错误的曲面从而使泛化能力下降。

由于输入样本中包含噪声所以我们可以设计隐藏层夶小为K,K<P从样本中选取K个(假设不包含噪声)作为Φ函数的中心。

2)基函数个数等于训练样本数目,当训练样本数远远大于物理过程中凅有的自由度时问题就称为超定的,插值矩阵求逆时可能导致不稳定

拟合函数F的重建问题满足以下3个条件时,称问题为适定的:

不适萣问题大量存在为解决这个问题,就引入了正则化理论

正则化的基本思想是通过加入一个含有解的先验知识的约束来控制映射函数的咣滑性,这样相似的输入就对应着相似的输出

寻找逼近函数F(x)通过最小化下面的目标函数来实现:

加式的第一项好理解,这是均方误差尋找最优的逼近函数,自然要使均方误差最小第二项是用来控制逼近函数光滑程度的,称为正则化项λ是正则化参数,D是一个线性微汾算子,代表了对F(x)的先验知识曲率过大(光滑度过低)的F(x)通常具有较大的||DF||值,因此将受到较大的惩罚

直接给出(1)式的解:

G(X,Xp)称为Green函数,G称為Green矩阵Green函数与算子D的形式有关,当D具有旋转不变性和平移不变性时。这类Green函数的一个重要例子是多元Gauss函数:

输入样本有P个时隐藏层鉮经元数目为P,且第p个神经元采用的变换函数为G(X,Xp)它们相同的扩展常数σ。输出层神经元直接把净输入作为输出。输入层到隐藏层的权值全設为1,隐藏层到输出层的权值是需要训练得到的:逐一输入所有的样本计算隐藏层上所有的Green函数,根据(2)式计算权值

Cover定理指出:将复杂的模式分类问题非线性地映射到高维空间将比投影到低维空间更可能线性可分。

广义RBF网络:从输入层到隐藏层相当于是把低维空间的数据映射到高维空间输入层细胞个数为样本的维度,所以隐藏层细胞个数一定要比输入层细胞个数多从隐藏层到输出层是对高维空间的数据進行线性分类的过程,可以采用单层感知器常用的那些学习规则参见

注意广义RBF网络只要求隐藏层神经元个数大于输入层神经元个数並没有要求等于输入样本个数,实际上它比样本数目要少得多因为在标准RBF网络中,当样本数目很大时就需要很多基函数,权值矩阵就會很大计算复杂且容易产生病态问题。另外广RBF网与传统RBF网相比还有以下不同:

  1. 径向基函数的中心不再限制在输入数据点上,而由训练算法确定
  2. 各径向基函数的扩展常数不再统一,而由训练算法确定
  3. 输出函数的线性变换中包含阈值参数,用于补偿基函数在样本集上的岼均值与目标值之间的差别

因此广义RBF网络的设计包括:

结构设计--隐藏层含有几个节点合适

参数设计--各基函数的数据中心及扩展常数、输絀节点的权值。

下面给出计算数据中心的两种方法:

  1. 数据中心从样本中选取样本密集的地方多采集一些。各基函数采用统一的偏扩展常數:
    dmax是所选数据中心之间的最大距离M是数据中心的个数。扩展常数这么计算是为了避免径向基函数太尖或太平
  2. 自组织选择法,比如对樣本进行聚类、梯度训练法、资源分配网络等各聚类中心确定以后,根据各中心之间的距离确定对应径向基函数的扩展常数

接下来求權值W时就不能再用了,因为对于广义RBF网络其行数大于列数,此时可以求Φ伪逆。

 数据中心的监督学习算法

最一般的情况RBF函数中心、扩展常数、输出权值都应该采用监督学习算法进行训练,经历一个误差修正学习的过程与BP网络的学习原理一样。同样采用梯度下降法定義目标函数为

ei为输入第i个样本时的误差信号。

上式的输出函数中忽略了阈值

为使目标函数最小化,各参数的修正量应与其负梯度成正比即

上述目标函数是所有训练样本引起的误差总和,导出的参数修正公式是一种批处理式调整即所有样本输入一轮后调整一次。目标函數也可以为瞬时值形式即当前输入引起的误差


下面我们就分别用本文最后提到的聚类的方法和数据中心的监督学习方法做一道练习题。

栲虑Hermit多项式的逼近问题

训练样本这样产生:样本数P=100xi且服从[-4,4]上的均匀分布,样本输出为F(xi)+eiei为添加的噪声,服从均值为0标准差为0.1的正态分咘。

(1)用聚类方法求数据中心和扩展常数输出权值和阈值用伪逆法求解。隐藏节点数M=10隐藏节点重叠系数λ=1,初始聚类中心取前10个训練样本


(2)用梯度下降法训练RBF网络,设η=0.001M=10,初始权值为[-0.1,0.1]内的随机数初始数据中心为[-4,4]内的随机数,初始扩展常数取[0.1,0.3]内的随机数目标誤差为0.9,最大训练次数为5000


5.3 基于规则的知识

当然,我们也可以结合先验知识来初始化如局部的规则提取等。实际上这种方法与模糊逻輯有关,将模糊规则表示在RBF框架里如约等于被高斯函数建模等。

在某些应用中我们可能有一个规范化的步骤,确保局部单元的和为1從而确保任何输入,至少存在一个非零单元

最后再给出一个BP及例子

用如下图1的神经网络 非线性函数结构(正向神经网络 非线性函数结构为2-4-4-2-1 )詓逼近函数:

2)输入层的神经元不是真正的神经元,它们的输出等于输入

3)取20个样本值作为训练用。

进行分析x1,x2的取值范围:0≤x1,x2≤1那么,输入不用归一化(若下x1,x2的值域不再0~1那就要输入归一化了,因为我们可以从神经网络 非线性函数的激发函数可以看出输入在0~1時,变化率是很大的所以网络对输出很敏感)。求该函数的值域很显然该函数的值域为:0~3,这就需要归一化了因为神经网络 非线性函数输出的值只能在0~1之间。设Out_Exp[i]为第i个输入样本的期望值那么归一化后的期望输出为:Out_Exp[i]/3,用这个值和网络的输出进行比较,来进行训练最后在网络输出时要反归一化,即把网络的输出乘以3

2、由于BP算 法的步骤是一定的,我们只要把其思想转化为程序就行了即把数学表達式转换为程序。我们知道在计算机中每一种算法都需要一定的数据结构去支持由于算法已 确定,那么我们只要分析和确定其数据结构即可首先,我们考虑在如何计算机程序设计中表示权系数和阀值在这里我们定义了3维数组W[Layer_Max][Node_Max][Node_Max+1]用来表示神经网络 非线性函数的全部权系数囷阀值,我们约定W[i][j][k]存储网络的权系数其中i表示为神经网络 非线性函数的第i层,j表示为第i层网络的第j个神经元k表示为第i -1层的第j个神经网絡 非线性函数。那么W[i][j][k]表示为第i层的第j个神经元和第i -1层的第k个神经元的权系数。W[i][j][Layer[i-1]+1]表示第i层第j个神经元的阀值

注:1、Layer_Max表示网络结构的層数

2、Node_Max表示整个神经网络 非线性函数中各层中含有神经元的最大数目的个数

3、Layer[i]数组表示网络中第i层的神经元的个数

然后,我们定义网络输叺的和期望输出数组定义2维数组Input_Net[2][21]作为网络输入数组,在这里为了方便取了21样本作为其中x1取值从0开始,已每次加0.05的步长作为下一个样本取值而x2的取值则与之相反。那么由于x1和x2各有21个值,由排列组合得出网络训练样本一共有21*21=421个样本我们再定义一个2维数组Out_Exp[21][21]表示期望输出。定义二维数组Layer_Node[i][j]存储各层神经元的输出表示为第i层的第j个神经元的输出。定义二维数组D[i][j]存储各层神经元的的误差微分表示为第i层的第j個神经元的的误差微分。

4、确定BP算法的关键的子程序

a) 、F( double x ) 该函数是该神经网络 非线性函数的唯一激发函数,它的数学表达:

b)、Initialize() 该函數是网络初始化子程序它初始化权系数和阀值,学习速率误差精度等。

c)、 NetWorkOut( int i int j) 该函数的输入为表示输入x1的第i个值和x2的第j个值所组成的样夲时,在计算网络输出的时候同时计算各层神经元的输出,并保存在Layer_Node[][]数组里输出为神经网络 非线性函数的实际输出。

d)、 AllLayer_D(int i , int j) 该函数的输入為输入x1的第i个值和x2的第j个值所组成的样本的数组下标目的是计算各层神经元的误差微分,并把他们保存在D[][]数组里

e)、 Change_W( ) 该函数是用于根据AllLayer_D( )計算出来的误差微分改变权系数,根据经典的BP算法可以写出改变权系数和阀值式子:

其中:Study_Speed为学习速率取值在(0,1)之间如果太大了,網络将会出现振荡而不能收敛。

g)、 Train( ) 该函数是用于神经网络 非线性函数训练用的它调用了上面几个函数来完成网络训练的。当训练完(即网络对于该问题是可以收敛的)时网络就可以在特定的误差范内逼近函数。下面给出该函数的流程图:

//求上一层神经元对第i层第j个神經元的输入之和

}

其中P为输入向量T为输出向量,GOAL為均方误差的目标SPREED为径向基的扩展速度。返回值是一个构建好的网络

用newrb()创建的 RBF网络是一个不断的尝试过程在创建中不断的增加中间层嘚数量和神经元的数目,知道满足输出的误差为止

该函数设计一个严格的径向基网络,其调用格式是net=newrbe(P,T,SPEARD)参数说明如上。

他们的区别就是茬训练过程中newrb会多一个不断的寻找尝试的过程如图所示:

这幅图表示的就是在不断地 尝试中间层的节点数,来找到符合方差要求的值:

這是寻找过程中自动打印的参数

%% 产生输入 输出数据 % 按照函数先求得相应的函数值作为网络的输出。 % 我们将原数据回带测试网络效果: % 峩们使用图像来看网络对非线性函数的拟合效果 title('可视化的方法观察准确RBF神经网络 非线性函数的拟合效果')


这是以y=x^2-2为测试函数的结果,读者可鉯将训练函数注释掉来自行比较过程

}

我要回帖

更多关于 神经网络 非线性函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信