Matlab问题--如何用遗传算法优化BP神经网络?这篇文献(中文)是如何做的?

Matlab问题--如何用遗传算法优化BP神经网络?这篇文献(中文)是如何做的?,第1张

我上次发给你的程序,只要你从网上下一个matcom45就行了,直接装在c盘就可以了,你发给我的论文变量太多用一般的遗传算法不行,我从网上发现了一个PID神经网络,相当好用,不用计算隐层数目,很适合用遗传算法进行优化,我编了一个例程回来发给你。

我真的不会用matlab的工具箱,如果一定要用matlab来做优化,恐怕我帮不了你了。

为什么一定要用matlab,用C++自己编写不也很好吗?

源码地址: https://githubcom/Grootzz/GA-BP

介绍:

利用遗传算法并行地优化BP网络的权值和阈值,从而避免了BP网络在优化权值和阈值时陷入局部最优的缺点

背景:

这个项目的背景为客运量和货运量的预测

文件介绍:

因为项目中用到了GAOT工具包中的函数,所以需要将GAOT工具包加入路径。

*** 作步骤为:点击GAOT文件--->添加到路径--->选定文件夹和子文件夹

这样,工程中就可以调用GAOT工具包中的函数了

源码地址: https://githubcom/Grootzz/GA-BP

  摘 要 文章从高校财务工作绩效的内涵出发,构建了高校财务工作绩效评价指标体系,并运用BP神经网络的方法,对江苏省所属10所高校财务工作的实际效果进行了实证分析,发现了一些共性、根本性问题,提出了相关对策建议。

关键词 高校; 财务工作绩效; BP神经网络

财务工作绩效是衡量一所高校内部工作绩效的重要尺度,也是决定一所高校教育事业能否持续健康发展的标志。客观、科学地评价一所高校的财务工作绩效,对于促进高校引入效益概念,合理配置教育资源,提高资源利用效率,实现学校长期可持续发展具有十分重要的意义。

一、高校财务工作绩效内涵

“绩效”(performance)一词源自管理学,有业绩、成果等方面的丰富内涵。从经济管理活动的角度来看,绩效是一个多维概念,包括组织或者团体绩效、员工个人绩效两个方面,是指一个组织、团体或者个人在一定时期内为达到某个目标或完成某项任务所进行的一种投入产出活动,它强调活动的结果和成效。高校作为一个非营利性机构,高校财务工作绩效显然是一种组织层面的绩效,它是运用“绩效”来衡量高校财务活动所取得的业绩和成果,反映学校在一定时期内的财务工作效果、财务工作效率和财务工作效益,是高校经济效益和社会效益的统一。其中财务工作效果是指高校各项财务活动所取的最具正面影响的成果数量和质量的总和,如教学成果、科研成果等;财务工作效率是指高校投入与产出之间的比例,如资产负债率、师生比等;财务工作效益反映高校各种直接的经济效益与社会效益的实现情况,如毕业生就业率、校办产业经济效益等。

二、高校财务工作绩效评价指标体系构建

高校财务工作绩效评价是指以特定的评价指标体系为基础,运用科学的评价方法,对照统一、合理的评价标准,对高校财务工作的行为过程及结果进行客观、科学的衡量、比较与评价,并将评价结果作为对高校财务工作的考核标准。从上述高校财务工作绩效的内涵和高校财务工作的特殊性与复杂性可以看出,高校财务工作绩效评价指标体系的设计是一个复杂的、多目标的决策过程,既要考虑不同规模、不同类别高校财务工作的共性特征,也要考虑个性特征。为此,我们在遵循科学性、可比性、通用性等原则的基础上,着重从高校财务工作组织绩效、财务工作效果、财务工作效率和财务工作效益等四个方面,构建一个行为与结果相结合,定量与定性相结合的高校财务工作绩效评价指标体系,如表1所示。其中:财务工作组织绩效主要反映高校为有效实施财务管理,提高财务工作效能而在财务管理体制、财务管理制度、财务队伍建设等方面的潜在资源总和;财务工作效果主要反映高校在人才培养、教学成果、科研成果等产出方面获取收益的能力;财务工作效率指高校有关教育科研资源的使用效率,综合反映了高校资金潜力的发挥程度;财务工作效益则主要指高校资金投入后预定目标所产生的经济效益与社会效益的实现程度。

三、BP人工神经网络评价模型

BP人工神经网络通常由输入层、隐含层和输出层构成,每层由若干个神经元组成。研究证明,一个三层的BP神经网络结构可以映射任意连续函数。为此,本文采用一个多输入、单输出的3层结构BP神经网络模型对高校财务管理绩效进行评价。

1BP人工神经网络基本原理

BP人工神经网络模型通常采用误差反向传播算法,首先,当给定一个输入模式时,它从输入层节点传输到隐含层节点再传输至输出层节点,经输出层节点处理后,产生一个输出模式;如果没有得到预期的结果,则转入反向传播过程,循环往复交替训练,直到输出结果的误差减小到人们所期望的范围时,网络的学习过程就结束。此时将新样本输入到已经训练好的网络,就可以得到所需要的输出值。

2输入层、隐含层及输出层节点数的选取

研究中把影响高校财务管理绩效的18项指标作为BP神经网络的输入向量,把高校财务管理绩效的总因子值作为输出向量,这样就确定了输入层节点数为18,输出层节点数为1。Kolmogrov理论已经证明:对于任意给定的连续函数§,U→V,U∈Vn,U∈[0,1]n,§可以精确地由一层隐含层来构建网络。在本文中,我们根据分别组建了隐含层节点数从1—35的BP网络,经过大量测算,最后根据试报效果,确定了较为理想的隐含层节点数为6。

3三层BP神经网络学习步骤

三层前馈神经网络的学习步骤为:首先,进行归一化处理,将样本向量数据处理为(0,1)之间的数据;其次,计算隐含层和输出层各节点的输入和相应的输出,Gj=■UjiVi+Tj,Ss=∑K(mn)hn+Js;再次,计算输出层误差和隐含层误差,啄m=(Hm-Km)(1-fs);最后,利用误差系数值对各层权值和阈值进行调整,并选用另一个学习样本向量,返回第二步,直到全局误差§小于预先设定值,则学习结束。

4模型结构确定

根据上面的分析,本文高校财务工作绩效评价的神经网络模型设计为18-6-1;即输入层节点数为18,隐含层节点数为6,输出层节点数为1,网络层数为3。

四、高校财务工作绩效评价的实证分析

2011年上半年,我们通过发放统计报表、发放问卷等方式,对江苏省10所高校2010年度的财务工作情况进行了调查分析。此次调查共发放统计报表10份,发放教职工、学生问卷3 830份,回收率分别为100%、98%。

1采集样本数据

限于篇幅,具体样本数据略,经归一化处理后的样本数据值如表2所示。

2评价标准的设计

本文将评价标准集V设定为:V=[高,较高,一般,较低,低]=[08,06,

05,04,02]五个等级。

3网络的训练及结果

按照选定的网络结构模型,即输入层节点数为18,隐含层节点数为6,输出层节点数为1,利用前10所高校进行训练,确定权值与阈值。训练时训练参数最高迭代次数为6 595次,预期误差为1e-4,训练函数为traincgb,网络学习率为0068。当程序迭代0次时,误差为668531e-005;当程序迭代50次后,误差达到539561e-005;当程序迭代60次时,误差达到868052e-006,说明训练达到预期目标。

训练集  ( Training set )

       作用是用来拟合模型,通过设置分类器的参数,训练分类模型。后续结合验证集作用时,会选出同一参数的不同取值,拟合出多个分类器。

验证集  ( Dev set )

       作用是当通过训练集训练出多个模型后,为了能找出效果最佳的模型,使用各个模型对验证集数据进行预测,并记录模型准确率。选出效果最佳的模型所对应的参数,即用来调整模型参数。如svm中的参数c和核函数等。

测试集 ( Test set )

       通过训练集和验证集得出最优模型后,使用测试集进行模型预测。用来衡量该最优模型的性能和分类能力。即可以把测试集当做从来不存在的数据集,当已经确定模型参数后,使用测试集进行模型性能评价。

一个有助于理解的形象比喻:

        训练集 ——  课本,学生根据课本里的内容来掌握知识。

        验证集 —— 作业,通过作业可以知道 不同学生学习情况、进步的速度快慢。

        测试集 ——  考试,考的题是平常都没有见过,考察学生举一反三的能力。

        训练集  直接参与了模型调参的过程,显然不能用来反映模型真实的能力(防止课本死记硬背的学生拥有最好的成绩,即防止 过拟合 ) 。

        验证集  参与了人工调参(超参数)的过程,也不能用来最终评判一个模型(刷题库的学生不代表其学习能力强)。

       所以要通过最终的考试 (测试集) 来考察一个学生(模型)真正的能力。

       如何将只有一个包含m个样例的数据集D,产生出训练集S和测试集T(验证集可以省略)?主要有以下三种方法:

自助法 ( bootstrapping )

       给定m个样本的数据集D,我们对它进行采样产生数据集D',每次随机从D中挑选一个样本,将其拷贝入D',然后再将样本放回原始数据集D。显然,该样本在下次采样时任然有可能被采到。这个过程重复m次后,我们就得到了含有m个样本的数据集D',这就是自助采样的结果。         样本有重复采样,也有一次也没有被采到的。从未采到的结果是 ,取极限得到

                                           

因此,使用自助法约有1/3的数据集没有被选中过,它们用于测试,这种方式叫“外包估计”。

       自助法在数据集小,难以划分训练集、测试集的时候有很大的效果,如果数据集足够大的时候,留出法和交叉验证是更好的选择。

留出法 ( hold-out )

       将整个数据集D划分为两个互斥的集合,其中一个作为训练集S,另一个作为测试集T。即,D=S∪T,S∩T=∅。在S上训练出模型,T作为测试集,来评估模型效果。

       当样本数据量较小(10000条左右及以下)时,通常取其中70%作为训练集,30%作为测试集;或60%作为训练集,验证集和测试集各20%。

交叉验证法 ( cross validation )

       如图所示,交叉验证法的实现流程大致如下:

       (1) 将整个数据集分成k个大小相似的子集,即D=D1∪D2∪∪Dk,Di∩Dj=∅(故又称k折交叉验证法,通常取k=10 )。

       (2) 对于每一个模型Mi,算法执行k次,每次选择一个Sj(1≤j≤k)作为测试集,其它作为训练集来训练模型Mi,把训练得到的模型在Sj上进行测试,这样一来,每次都会得到一个误差E,最后对k次得到的误差求平均,就可以得到模型Mi的泛化误差。

       (3) 算法选择具有最小泛化误差的模型作为最终模型,并且在整个训练集上再次训练该模型,从而得到最终的模型。

       交叉验证的主要的目的是 为了选择不同的模型类型(比如一次线性模型、非线性模型) ,而 不是为了选择具体模型的具体参数 。比如在BP神经网络中,其目的主要为了选择模型的层数、神经元的激活函数、每层模型的神经元个数(即所谓的超参数),每一层网络神经元连接的最终权重是在模型选择(即K折交叉验证)之后,由全部的训练数据重新训练。

       假设这就是数据集,显然用简单分类器(如逻辑回归)并不能很好地拟合上述数据。这种情况称为  欠拟合  。

       相反地,如果采用一个非常复杂的分类器(如深度神经网络或含有隐藏单元的神经网络),拟合效果会非常好。但与此同时,模型的复杂度也会过高,这种称为 过拟合  。

       在两者之间,可能会存在一些复杂程度适中、数据拟合适度的分类器,拟合结果较为合理,称为 适度拟合 。

       如上图所示,训练集误差和验证集误差均较高时为 高偏差(欠拟合)  情况;训练集误差较高,验证集误差较高低时为  高方差(过拟合)  情况。

(1) 如何减小偏差(防止欠拟合)

       ① 增大神经网络规模。

(2) 如何减小方差(防止过拟合)

       ① 增加数据集样本数量;

       ② 正则化。

        参数   是指神经网络中由数据驱动并进行调整的变量,如𝑊和𝑏。

        超参数   是指无需数据驱动,而是在训练前或者训练中人为进行调整的变量。例如算法中的learning rate 𝑎(学习率)、iterations(梯度下降法循环的数量)、𝐿(隐藏层数目)、𝑛[𝑙](隐藏层单元数目)、choice of activation function(激活函数的选择)等都需要人为设置,这些数字实际上控制了最后的参数𝑊和𝑏的值,所以它们被称作超参数。

       神经网络中的超参数主要分为三类:网络参数、优化参数、正则化参数。

​网络参数

       可指网络层与层之间的交互方式(相加、相乘或者串接等)、卷积核数量和卷积核尺寸、网络层数(也称深度)和激活函数等。

优化参数

       一般指学习率(learning rate)、批样本数量(batch size)、不同优化器的参数以及部分损失函数的可调参数等。

正则化参数

       权重衰减系数,随机失活比率(dropout)等。

       正则化有利于减小训练集和验证集准确率的方差,防止过拟合。在无法增加样本数量或增加样本数量的成本过高时,正则化是一种行之有效的方法。

        一般将任意 维向量  的 - 范数定义为

                                                              

       根据定义:

       当 时, 的 范数为 ,表示向量 中非0元素的个数。

       当 时, 的 范数为 ,等于向量 中所有元素的绝对值之和。

        当 时, 的 范数为 ,等于向量 中所有元素的平方和开根号。

       正则化(Regularization) 的主要目的是控制模型复杂度,减小过拟合。最基本的正则化方法是在原目标(代价)函数 中添加惩罚项,对复杂度高的模型进行“惩罚”。

       对于神经网络模型, 正则化即在其代价函数中添加 正则项:

                                  

其中, 。之后再求解优化问题 即可。

       假设某三层神经网络存在过拟合问题,采用dropout正则化会遍历网络的每一层,并设置消除该层中每一个节点的概率(比如05),最后得到一个节点更少、规模更小的网络,然后再用反向传播方法进行训练,就能有效防止过拟合。

       最常用的方法是 inverted dropout(反向随机失活) 。对于一个三层神经网络( ),以第三层为例,实施dropout的步骤如下:

① 定义一个三层dropout矩阵d3:

                                     d3=numpyrandomrand(a3shape[0],a3shape[1])

其中,a3表示神经网络第三层的激活函数矩阵。

② 设置 ( )的大小。 表示保留某个隐藏单元的概率。将第①步产生的随机矩阵d3的每个元素与 进行比较,小于置1,大于置0,得到新的d3矩阵(1表示保留该节点,0表示删除该节点)。

③ 将a3与新的d3矩阵相乘(矩阵对应元素相乘),得到新的激活函数矩阵:

                                                       a3 =npmultiply(a3,d3)

④ 将新的a3矩阵除以keep-prob:

                                                              a3 /= keep_prob

目的是保证a3的期望值(均值)不变,从而保证第三层的输出不变。

① 使用dropout可以使得部分节点失活,可以起到简化神经网络结构的作用,从而起到正则化的作用。

② 因为dropout是使得神经网络的节点随机失活,这样会让神经网络在训练的时候不会使得某一个节点权重过大。因为该节点输入的特征可能会被清除,所以神经网络的节点不能依赖任何输入的特征。dropout最终会产生收缩权重的平方范数的效果,来压缩权重,达到类似于 正则化的效果。

① dropout在测试阶段不需要使用,因为如果在测试阶段使用dropout可能会导致预测值产生随机变化(因为dropout使节点随机失活)。而且,在训练阶段已经将权重参数除以keep-prob来保证输出的期望值不变,所以在测试阶段没必要再使用dropout。

② 神经网络的不同层在使用dropout的时候,keep-prob可以不同。因为可能有的层参数比较多,比较复杂,keep-prob可以小一些,而对于结构比较简单的层,keep-prob的值可以大一些甚至为1,keep-prob等于1表示不使用dropout,即该层的所有节点都保留。

      加快训练速度。

       对于一个神经网络模型,考虑其代价函数:

                                               

       如果未归一化输入,其代价函数的形状会较为细长狭窄。在这样的代价函数的限制下,为避免陷入局部最优解,梯度下降法的学习率必须设置得非常小。

       如果归一化输入,代价函数便呈现球形轮廓。这种情况下,不论从哪个位置开始梯度下降法,都能使用较大的学习率,从而更快速、直接地找到全局最优解。

      对于包含n个特征的m个样本的数据集,其输入归一化的过程主要分为两步:

① 零均值化

                                                             

                                                            

② 归一化方差

                                                           

                                                              

其中, 代表第 个样本的特征矩阵。

       训练集、验证集、测试集特征矩阵的平均值 和标准差 要保持一致,确保它们归一化后符合同一分布。

   摘 要:本文将BP(Back Propagation)神经网络应用到题库试题分值的确定中,以解决目前智能组卷研究中题库试题分值确定的不合理性。在训练网络时,对标准BP算法作了相应改进,以适应该智能模型的建立。通过案例试验,验证了确定试题分值的智能模型的精度是符合实际要求的,在一定程度上为智能化组卷奠定了基础。

关键词:BP算法 题库 试题分值

引言

题库是保证考试题目具有较高质量、更好地达到教育测量目标的重要手段。随着计算机及网络技术,特别是人工智能技术在现代教育中的推广及应用,教育领域对电子测评有了很大的重视,更多地关注题库建设及智能组卷的研发。

目前,市面上已出现了各种各样的题库系统。实际上题库建设仍缺乏科学理论指导,尤其是在试题参数确定上,主观因素影响很大,使题库系统不能很好地实现预期的目标。例如,试题分值的确定一直没有一个很好的解决方案。传统的做法是采用难度赋分法和时间赋分法[1],而没有考虑其它因素的影响,如知识点数、知识点的重要程度等。考虑到试题分值与影响试题分值的参数之间的高度非线性关系,本文利用BP神经网络所具备的模拟人的思维、非线性变换和自学等功能来构建试题分值智能确定模型,以克服传统做法中各种随机性和主观性对分值的影响。

1 基本原理和方法

利用已知样本对BP网络进行训练,使其获得专家经验和对确定试题分值的认识,当对新的样本进行处理时,该网络模拟人的思维并再现专家知识经验,达到客观地确定试题分值的目的,具体步骤是:

① 提取确定试题分值的参数,量化处理为(0,1)内的精确值作为网络输入。

② 利用已有的专家知识库(样本库),通过BP算法对网络进行训练,通过对网络参数及算法参数的调整得到稳定的网络参数――分数确定模型。为了能在实际应用中保证可接受的计算精度,我们在训练网络时,使它在更高的精度下收敛。

③ 输入需要确定分值的相关试题参数,网络根据自学获得的专家知识经验对输入值进行处理,然后输出(0,1)的值作为最终结果(该试题的分值)。

2 分值确定的BP神经网络结构

本文分析总结出影响题库试题分值得7个参数(BP网络的输入向量),作为对该领域问题的首次研究,为了获得足够多的有代表性的训练样本,本文限制参数“题型”的取值为:1、2、3和4,分别代表单选题、多选题、判断改错题和填空题。根据考试理论、命题设计理论,属于这几类题型的每道试题所考察的知识点一般不超过3个,而且最适合考查识记、理解和应用三个认知水平。所以本文亦限制参数“知识点数”取[1,3]之间的整数,同时限制参数“认知层次”的取值为:1、2和3,分别代表识记、理解和应用。从而缩小了样本空间。7个参数的取值见表1。

在神经网络的应用中,网络结构的选择很重要,好的网络结构可以减少网络训练次数,提高网络学习精度。[2]隐含层数越多,神经网络学习速度就越慢,根据Kosmogorov定理,在合理的结构和恰当的权值条件下,3层BP神经网络可以逼近任意的连续函数,因此,我们选取了3层BP网络结构,如图1所示。

图1

其中,输入层节点数目n由影响试题分值参数个数确定,这里n=7,由于输出结果为一个试题分值,故输出节点数为m=1;在总结大量网络结构的基础上,得出隐含层神经元数目的经验公式为

由此本文初步确定隐含层的神经元数目为s=5。在实验仿真时,我们将动态调整隐含层的神经元数目,以获得网络

3 调整BP算法

31 动态调整隐含层单元数目和学习步长

如上所述,初步确定隐含层神经元数目为5,然后,通过人机交互,增加或减少隐含层神经元数目,分析比较全局误差的震荡程度、误差递减程度、误差稳定后的网络精确程度及网络的收敛性能,从而确定隐含层神经元数目。本文训练网络时既没有采用固定步长,也没有采用自适应调整步长的方法,而是采用人机交互动态调整的方法,笔者认为这样虽然麻烦,但对步长的调整是更智能的。

32 选择模式对的方法及全局误差的计算

本文将所有的样本都存储在数据库中,并把2/3的样本作为训练样本,在选择模式对时,从训练样本的第一条记录开始一直到最后一条,如此循环。经过反复实验,验证了这种方法比随机选择的方法更加有效,表现为网络误差递减明显,基本不存在震荡。通过分析,笔者认为,在随机选择方法中,由于随机性,不能保证所有的代表性样本都被选中,使得样本不再代表整体,失去了样本的意义,致使误差递减缓慢,震荡明显,训练不得收敛。采用下式计算全局误差:

其中,fp是输出层的实际输出,y是期望输出,M为训练样本总数,E是全局误差,N为正整数,该值的选择要合理,否则会使网络进入局部极小值,或者误差递减缓慢,震荡明显,训练难于收敛。

4 题库试题分值确定实例及分析

41 样本的选取

样本应很好地代表整体,这就要求必须有足够训练样本,否则样本只能代表整体中的某一部分,这样即使网络训练到了很高的精度,当实际应用时会发现网络误差有时变得很大,根本无法使用。根据这一原则及确定试题分值得参数个数和每一参数的取值,我们至少需要22500个训练样本。考虑到获取样本的难度及分值确定所需要的实际精度,本文从我们正在研发的《计算机文化基础》课程的智能题库中提取了具有高度代表性800个训练样本和400个试验样本,由于题库中的试题的难度、区分度等参数是经过测试得到的,所以是比较可信的,答题时间及分值根据经验人为估算而得。为了提高网络精度,我们又组织了一个专门小组(三位相关专业的教授和7位信息技术教学论专业的硕士研究生)对1200个样本的估计答题时间及分值进行了比较严密的估算,估算值精确到01。估算方法是十位小组成员分别对每个样本的答题时间及分值估算,然后去掉一个最高分和一个最低分,把剩下的八个估算值计算加权平均值,所得的值即为最后的答题时间或分值。

42 样本归一化处理

为了使归一化处理的结果尽可能均匀分布在[0,1]之间,本文采用了如下式所示的归一化方法:

43 确定训练网络的精度

在实际中,我们通常以05的整数倍作为某一试题的分值,所以如果得到的BP网络模型能精确到01就可以了,然后根据类四舍五入的方法把它处理为05的整数倍的一个值。当结果的小数部分小于025时,则舍掉,当介于[025,075],则处理为05,大于等于075,则向整数进1。这是符合实际要求的。然而,经训练达到某一精度的网络在实际应用时,其误差总是围绕某固定值上下波动。特别是当样本的代表性较差时,更是如此。为此,我们在训练样本时,将网络的全局误差设置得比实际要求的更小。本研究将其设为10-5。

44 网络训练过程

本研究在网络训练时,隐含层单元数动态调整,以得到更合适的隐含层单元数目。没有采用动量项(经试验,没有动量项效果更好),步长动态调整,将其初值设为1,然后根据误差递减情况以005的幅度在[0,1]之间调整。循环选择800个训练样本对网络进行训练,每循环m次计算一次全局误差,每循环n(n为m的整数倍)次观察记录一次误差变化情况,通过分析比较决定步长调整方向。训练网络的主要程序代码(c#)如下:

button3_Click(object sender,EventArgs e)

本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 {h_num= intParse(textBox1TextToString());

//动态指定隐含层单元数

wj=new double[h_num];//输出-隐含权值

wij=new double[7,h_num];//隐含-输入权值

hvj=new double[h_num];//隐含层阈值

int i,j;

netj=new double[h_num];//隐含层输入向量

xi=new double[7];//输入层输入向量

comm2=conn1CreateCommand();

hoj=new double[h_num];//隐含层输出向量

ej=new double[h_num];//隐含层的一般误差

//初始化权值、阈值、步长及动量系数

a=doubleParse(textBox2TextToString());

//初始化输出节点阈值

double e1=000001,E1=e1+1,E2=0;

int count=0,count1=0;

for(i=0;i=yb_count+1) ybbh=1;

ybbh=randNext(1,yb_count+1);

comm2CommandText = "select from gyhVIEW

where 样本编号="+ " ’" + ybbh + " ’" ;

dr1 = comm2ExecuteReader();

if (dr1Read())

{for (i = 0;i = 3yb_count)

{ E1 = E2 /3yb_count;count = 0;count1 += 1;

if (count1 >= 1000)

{if (MessageBoxShow(E1ToString() + " a="+ aToString() + "减小步长?","提示信息",

MessageBoxButtonsOKCancel,

MessageBoxIconQuestion) == DialogResultOK)

{ a -= 005;}

if (MessageBoxShow(E1ToString() + "增加步长?","提示信息",

MessageBoxButtonsOKCancel,

MessageBoxIconQuestion) == DialogResultOK)

{ a += 005;} count1 = 0;}}}

通过反复训练和比较分析,最后将网络隐含层单元数目确定为6,每循环3次计算一次全局误差,次每循环3000次观察记录一次误差变化情况,学习步长从1调整到065,最后在065时收敛。共训练了1128万次。模型稳定后,输入层与隐含层的连接权值如图3所示(其中i表示输入层单元序号,wij表示输入层单元i与隐含层单元j的连接权值),隐含层与输出层的连接权值及隐含层阈值如图4所示(其中j表示隐含层单元序号),输出层阈值为-3305475。

观察分析网络模型的测试误差,基本都小于0005,最小值为00001399517,最大值为001044011,完全满足题库试题分值确定所要求的精度(01),符合实际用需求。

结束语

本文将BP神经网络应用到题库试题分值的确定中,为题库试题分值得确定提供了一种可行的方法。在应用BP算法时,动态调整隐含层单元数目,动态调整学习步长,采用循环选择训练样本的模式对选择方法,经过特定次数的循环训练后计算一次全局误差。所有这些均源于本模型的准确建构。另外,如果训练样本能够很好地代表整体,用这种方法将能建立精度更高的确定试题分值的智能模型。

参考文献:

[1]胡中锋,李方教育测量与评价[M]广东高等教育出版社,20037

[2]Hadi,MuhammadNSNeuralnetworks applications in concrete structures Computers and Structures Volume:81,Issue:6,March,2003,pp373-381

[3]姜华,赵洁基于BP神经网络的学习行为评价模型及实现[J]计算机应用与软件,200522,(8):89-91

[4]戴永伟,雷志勇BP网络学习算法研究及其图像识别应用[J]计算机与现代化,200611:68-70

[5]宋乃华,邢清华一种新的基于粒群优化的BP网络学习算法[J]计算机工程,200614:181-183

基金项目:全国教育科学“十一五”规划教育考试学研究重点课题项目(2006JKS3017);山西省教育科学“十一五”规划课题(GH-06106)。

注:“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”

本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

通过优化的标准神经网络训练(从概率的角度来看)等同于权重的最大似然估计(MLE)。由于许多原因,这往往是不能令人满意的 —— 使用 MLE 会忽略在适当的权重值中可能存在的任何不确定性,即无法正确评估训练数据中的不确定性,从实际的角度来看,这种类型的训练容易出现过拟合现象。

对此的一个解决方案是引入正则化(从贝叶斯的角度来看,这相当于在权重上引入先验)。如果我们可以通过规范模型来解决过度自信决策和防止模型过度拟合的问题,那为什么我们需要贝叶斯神经网络?答案是: 当前神经网络架构中缺少预测中的不确定性度量,但贝叶斯神经网络将其纳入其中 。BNN 在特定环境中很重要,特别是当我们非常关心不确定性时,贝叶斯方法自然地解释了参数估计中的不确定性,并且可以将这种不确定性传播到预测中。

深度神经网络已成功应用于许多领域,包括非常敏感的领域,如医疗保健,安全性,欺诈性交易等等。这些领域在很大程度上依赖于模型的预测准确性,甚至一个过度自信的决策也可能导致一个大问题。此外,这些领域具有非常不平衡的数据集(百万个交易中的一个是欺诈性交易,百分之五的癌症检测结果是阳性,不到百分之一的电子邮件是垃圾邮件),容易导致该模型过度拟合。

从概率论的角度来看,使用单点估计权重以进行分类是不合理的。而贝叶斯神经网络对于过拟合更加鲁棒,并且可以从小数据集中轻松学习。 贝叶斯方法将其参数以概率分布的形式表示以提供不确定性估计;同时,通过使用先验概率分布的形式来表示参数,训练期间在许多模型上计算平均值,这给网络提供了正则化效果,从而防止过度拟合

在标准神经网络中,权重由单个点表示。 而贝叶斯神经网络以分布形式表示权重,如下图所示:

即使使用少量参数,在贝叶斯神经网络中推断后验模型也是一项艰巨的任务,因此通常使用后验模型的近似值,变分推理是一种流行的方法。人们将使用简单的变分分布(例如高斯分布)对后验进行模拟,并尝试调整分布的参数使其尽可能接近真实的后验 —— 通过最小化这种简单变分分布和真实后验之间的 KL 散度来完成。

但是用于逼近 BNN 后验的变分方法在计算上可能相当昂贵,因为使用近似分布会大大增加模型参数的数量,但不会大幅增加模型容量。例如,使用 BNN 后验近似的高斯分布,模型参数的数量增加了一倍,但报告了与使用丢失的传统方法相同的预测性能。 这使得该方法在实践中不适合与 CNN 一起使用,因为参数数量的增加太昂贵。

关于神经网络权重的精确贝叶斯推断是难以处理的,因为参数的数量非常大,并且神经网络的函数形式不适合精确积分。 因此,我们用变分概率分布 q θ (w | D) 逼近难以处理的真实后验概率分布 p(w | D),它包括高斯分布的性质 μ∈ℝ d 和 σ∈ℝ d ,表示为 N(θ | μ,σ²),其中 d 是定义概率分布的参数总数。 这些高斯变分后验概率分布的形状由它们的方差 σ² 确定,表示每个模型参数的不确定性估计。

在观察数据之前定义先验概率分布,一旦观察到数据(训练数据),学习就发生并且分布变换为后验分布。 利用概率论从数据中学习构成了贝叶斯学习的基础。贝叶斯定理如下:

P(θ | x) 为后验概率,也是我们想要计算的;P(θ) 为先验概率,在训练数据之前就是已知的;P(x | θ) 为可能性,显示了数据分布;P(x) 为证据,我们只能通过对所有可能的模型值积分来计算其值:

这使得问题变得棘手,因此我们采用变分近似来找到近似贝叶斯后验分布。

首先,我们的原始目标是,需要根据已有数据推断需要的分布 p;当 p(下图中**区域)不容易表达,不能直接求解时,可以尝试用变分推断的方法, 即,寻找容易表达和求解的分布 q(下图中红线和绿线构成的区域),当 q 和 p 的差距很小的时候,q 就可以作为 p 的近似分布,成为输出结果了。例如,我们用 q θ (w | D) 来近似 p(w | D)。首先注意 q θ (w | D) 的表达,其中 w 是变量,θ 是后验概率分布 q 的参数。所以在构造 q 的时候也分两步:第一,概率分布的选择;第二,参数的选择。第一步,我们在选择 q 的概率分布时,通常会直观选择 p 可能的概率分布,这样能够更好地保证 q 和 p 的相似程度。例如高斯混合模型中,原始假设 p 服从高斯分布,则构造的 q 依然服从高斯分布。之后,我们通过改变 θ,使得 q 不断逼近 p。

我们希望尽可能接近真正的分布,这可以通过最小化两者之间的 Kullback-Liebler(KL)散度来做到这一点。然而 KL 的表达式中依然有一部分不可求的后验概率,这个问题仍然是棘手的,所以用到了 ELBO:

但是由于积分的存在,这个公式仍然难以解决。此时,我们可以从近似函数 q θ (w | D) 中进行采样,因为从近似函数中采样权值要比真正的后验函数 p(w | D) 更容易。这样得到容易计算的函数:

这些采样权值 w 被用于神经网络的反向传播,学习后验分布。

贝叶斯建模中,存在两种类型的不确定:偶然不确定性和认知不确定性。

可以通过在模型参数或模型输出上放置概率分布来估计不确定性 。通过在模型的权重上放置先验分布,然后尝试捕获这些权重在给定数据的情况下变化多少来模拟认知不确定性。另一方面,通过在模型的输出上放置分布来模拟偶然不确定性。

传统神经网络常使用反向传播来训练。对于 BNN,其自然地解释了参数估计中的不确定性,并且可以将这种不确定性传播到预测结果中;此外,对参数值进行取平均而不是仅选择单点估计值使得模型不易出现过拟合。因此,对 BNN 参数的训练也需要特殊的训练方法,Bayes by Backprop 就是其中一种(它也是一种变分推断)。

Bayes by Backprop 用来学习神经网络权重的概率分布。它是一种变分推理方法,用于学习神经网络权重 w ~ q θ (w | D) 的后验分布,可以在反向传播中对权重 w 进行采样。整个方法可归纳如下:

由于参数数目较大,所以需要对模型权重进行适当的修剪。模型修剪减少了深度神经网络的各种连接矩阵中的稀疏性,从而减少了模型中有价值的参数的数量。模型修剪的整个想法是减少参数的数量而不会损失模型的准确性。最常用的修剪模型的方法是将低贡献权重映射到零并减少整体非零值权重的数量,可以通过训练大型稀疏模型并进一步修剪来实现。

(这部分内容摘自 一个例子搞清楚 先验分布/后验分布/似然估计 )

给定一些数据样本 x,假定我们知道样本是从某一种分布中随机取出的,但我们不知道这个分布具体的参数 θ。

因为给定样本 x 后, p(x) 会在 θ 空间上为一个定值,和 θ 的大小没有关系,所以可以省略分母 p(x)。 可化简为:

p(x) 相当于是一个归一化项,整个公式就表示为: Posterior∝(Likelihood∗Prior)(后验概率 正比于 先验概率 ∗ 似然函数)

需要一提的是,对贝叶斯 CNN 而言,不仅在卷积层中将概率分布置于权重上,还要求在全连接层中将概率分布置于权重上。

假设权重的变分后验概率分布 q θ (w ijhw | D) = N(μ ijhw ,α ijhw μ 2 ijhw )(其中,i 和 j 分别对应输入和输出层数,h 和 w 分别对应过滤器的高度和宽度),那么卷积公式被重定义为:

其中,ε j ~ N(0,1),A i 为过滤器在第 i 层要卷积的部分,b j 为相应的第 j 层的激活值,∗ 为卷积 *** 作,⊙ 为元素乘法(component-wise multiplication)。

对 CNN 的权重应用概率分布而非单点值,并且要在反向传播时更新变分后验概率分布 q θ (w | D),关键在于过滤器会执行两次卷积 *** 作(在单点预测的 CNN 中只执行一次卷积)。

从前面的公式我们看到,卷积 *** 作的输出 b 是期望 μ ijhw 和方差 α ijhw μ 2 ijhw 的函数,因此我们可以分别计算出 μ ijhw 和 α ijhw μ 2 ijhw 的值,从而可以得到一个高斯概率分布。方法就是执行两次卷积 *** 作:第一次,我们将 b 视为通过频率推理更新的 CNN 的输出,将单点估计值解释为变分后验概率分布的期望;第二次,我们将得到方差。通过这种方式,我们确保每个卷积 *** 作只更新一个参数(第一次为 μ ijhw ,第二次为 α ijhw ),这与通过频率推断更新的 CNN 完全相同。

实际上,当我们执行第一次卷积 *** 作,我们得到的是 q θ (w | D) 的最大后验概率,而第二次卷积 *** 作则是得出权重 w 偏离了最大后验概率多少。另外,为了加速计算,确保方差 α ijhw μ 2 ijhw 为非零正数,并提到准确度,我们学习 logα ijhw 并使用 Softplus 激活函数。

在分类任务中,我们关注的是 P D (y | x);对于贝叶斯神经网络,其被表示为:

在 Bayes by Backprop 中,q θ (w | D) ~ N(w | μ, σ 2 ),而 θ = {μ, σ} 在数据集 D = {x i , y i } n i=1 的训练中学习得到。由于分类问题多是离散的,因此:

其中,Σ c f(x c ∗ | w) = 1,C 为总类数。通过从 q θ (w | D) 取样,可以获得期望值的无偏估计:

T 为样本数量。这个估计值允许我们评估预测值的不确定性,因此称为预测方差,用 Var q 表示:

这个值可以进一步分为偶然不确定性和认知不确定性:

由于贝叶斯 CNN 中的权重都由期望和方差来表示其分布,因此,相较于单点估计 CNN,贝叶斯 CNN 的参数数量翻了一倍。为了使贝叶斯 CNN 参数数量等于传统 CNN,可以使 BCNN 的过滤器数目减半。

另一种模型修剪的技术是对每层的权重使用 L1 归一化。通过 L1 归一化,我们使各模型层中的权重向量变得非常稀疏,即大部分矩阵元素变得接近零;同时,剩余的非零元素则捕获数据的最重要特征。我们设置一个阈值,如果该值低于阈值,则使权重为零。通过只保留非零权重,可以减少模型的参数数量,而不会影响模型的整体性能。

看了一些国内的论文,将贝叶斯应用于 BP 神经网络优化,往往是利用贝叶斯定理寻找最优神经网络参数,以解决神经网络权值易陷入局部最优的问题,同时也能解决神经网络过拟合。其中心思想在于: 根据给定的先验分布,利用贝叶斯定理考察神经网络参数的不确定性,从样本数据中,获得网络结构的后验概率,那么,使得该后验概率最大化的网络参数即为所需的最优参数 (我认为这其实是 MAP 而非贝叶斯估计)。最优参数定义为:

为方便计算,对后验概率取对数得到:

假设先验概率分布 p(w) 满足高斯分布:

则有:

上式中,似然函数部分对应于目标函数中的适应度函数,而先验概率部分对应于正则项,因此我们可以通过确定先验概率得到正则项,从而对神经网络的目标函数进行优化,进而有效控制网络规模,提高网络泛化能力。

后验分布是人们在获得样本数据 D 之后对参数 w 的一种调整。 贝叶斯把上一步得到的后验分布信息储存起来,在将来做推测时,上一步的后验信息就成为了先验信息 ,这样持续数次 *** 作之后,样本数据的预测结果会一直进行调整,最后对参数估计的结果精确度更高。

神经网络中最重要的两个性能参数就是权值和阈值,而这两个参数的分布情况受到了目标函数中超参数的控制,但一般的算法不能确定超参数的取值。可以利用贝叶斯定理来求取目标函数的超参数,并且要求达到自主调节超参数取值的目标,并且通过持续的调整最后找到最优的取值,相应的确定 BP 神经网络的最优权值和阈值。

在工程应用中经常会遇到一些复杂的非线性系统(我们航空发动机就是典型的强非线性模型),这些系统状态方程复杂,难以用数学方法准确建模。在这种情况下,可以建立BP神经网络表达这些非线性系统。该方法把未知系统看成黑箱,首先用系统输入输出数据训练BP神经网络,使网络能够表达该未知函数,然后用训练好的BP神经网络预测系统输出。

本文要拟合的非线性函数是

该函数的图形如下图1所示。

回顾上一篇文章建立BP网络的算法流程,进行具有非线性函数拟合的BP网络可以分为网络构建、训练和预测三步,如下图2所示。

BP神经网络构建 根据要拟合的非线性函数特点确定BP网络结构,由于该非线性函数有两个输入参数,一个输出参数,所以BP网络结构可以设置为2-5-1,即输入层有2个节点,隐含层有5个节点,输出层有1个节点。

BP神经网络训练 用非线性函数输入输出数据训练神经网络,使训练后的网络能够预测非线性函数输出。从非线性函数中随机得到2 000组输入输出数据,从中随机选择1 900组作为训练数据,用于网络训练,100组作为测试数据,用于测试网络的拟合性能。

神经网络预测 用训练好的网络预测输出,并对预测结果进行分析。

根据非线性函数方程随机得到该函数的2 000组输入输出数据,将数据存储在datamat文件中,input是函数输入数据,output是函数输出数据。从输入输出数据中随机选取1 900组数据作为网络训练数据,100组作为网络测试数据,并对训练数据进行归一化处理。

用训练数据训练BP神经网络,使网络对非线性函数输出具有预测能力。

用训练好的BP神经网络预测非线性函数输出,并通过BP神经网络预测输出和期望输出,分析BP神经网络的拟合能力。

用训练好的BP神经网络预测函数输出,预测结果如下图3所示。

BP神经网络预测输出和期望输出的误差如下图4所示。

从图3和图4可以看出,虽然BP神经网络具有较高的拟合能力,但是网络预测结果仍有一定误差,某些样本点的预测误差较大。

在上一篇文章中提到了调整隐含层节点数目、改变权值和阈值更新算法以及变学习率学习算法等方法,针对非线性拟合,BP神经网络的优化还可以使用多隐层的BP神经网络、改变激活函数等方法。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/12177989.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存