❶ BP神经网络方法
人工神经网络是近几年来发展起来的新兴学科,它是一种大规模并行分布处理的非线性系统,适用解决难以用数学模型描述的系统,逼近任何非线性的特性,具有很强的自适应、自学习、联想记忆、高度容错和并行处理能力,使得神经网络理论的应用已经渗透到了各个领域。近年来,人工神经网络在水质分析和评价中的应用越来越广泛,并取得良好效果。在这些应用中,纵观应用于模式识别的神经网络,BP网络是最有效、最活跃的方法之一。
BP网络是多层前向网络的权值学习采用误差逆传播学习的一种算法(Error Back Propagation,简称BP)。在具体应用该网络时分为网络训练及网络工作两个阶段。在网络训练阶段,根据给定的训练模式,按照“模式的顺传播”→“误差逆传播”→“记忆训练”→“学习收敛”4个过程进行网络权值的训练。在网络的工作阶段,根据训练好的网络权值及给定的输入向量,按照“模式顺传播”方式求得与输入向量相对应的输出向量的解答(阎平凡,2000)。
BP算法是一种比较成熟的有指导的训练方法,是一个单向传播的多层前馈网络。它包含输入层、隐含层、输出层,如图4-4所示。
图4-4 地下水质量评价的BP神经网络模型
图4-4给出了4层地下水水质评价的BP神经网络模型。同层节点之间不连接。输入信号从输入层节点,依次传过各隐含层节点,然后传到输出层节点,如果在输出层得不到期望输出,则转入反向传播,将误差信号沿原来通路返回,通过学习来修改各层神经元的权值,使误差信号最小。每一层节点的输出只影响下一层节点的输入。每个节点都对应着一个作用函数(f)和阈值(a),BP网络的基本处理单元量为非线性输入-输出的关系,输入层节点阈值为0,且f(x)=x;而隐含层和输出层的作用函数为非线性的Sigmoid型(它是连续可微的)函数,其表达式为
f(x)=1/(1+e-x) (4-55)
设有L个学习样本(Xk,Ok)(k=1,2,…,l),其中Xk为输入,Ok为期望输出,Xk经网络传播后得到的实际输出为Yk,则Yk与要求的期望输出Ok之间的均方误差为
区域地下水功能可持续性评价理论与方法研究
式中:M为输出层单元数;Yk,p为第k样本对第p特性分量的实际输出;Ok,p为第k样本对第p特性分量的期望输出。
样本的总误差为
区域地下水功能可持续性评价理论与方法研究
由梯度下降法修改网络的权值,使得E取得最小值,学习样本对Wij的修正为
区域地下水功能可持续性评价理论与方法研究
式中:η为学习速率,可取0到1间的数值。
所有学习样本对权值Wij的修正为
区域地下水功能可持续性评价理论与方法研究
通常为增加学习过程的稳定性,用下式对Wij再进行修正:
区域地下水功能可持续性评价理论与方法研究
式中:β为充量常量;Wij(t)为BP网络第t次迭代循环训练后的连接权值;Wij(t-1)为BP网络第t-1次迭代循环训练后的连接权值。
在BP网络学习的过程中,先调整输出层与隐含层之间的连接权值,然后调整中间隐含层间的连接权值,最后调整隐含层与输入层之间的连接权值。实现BP网络训练学习程序流程,如图4-5所示(倪深海等,2000)。
图4-5 BP神经网络模型程序框图
若将水质评价中的评价标准作为样本输入,评价级别作为网络输出,BP网络通过不断学习,归纳出评价标准与评价级别间复杂的内在对应关系,即可进行水质综合评价。
BP网络对地下水质量综合评价,其评价方法不需要过多的数理统计知识,也不需要对水质量监测数据进行复杂的预处理,操作简便易行,评价结果切合实际。由于人工神经网络方法具有高度民主的非线性函数映射功能,使得地下水水质评价结果较准确(袁曾任,1999)。
BP网络可以任意逼近任何连续函数,但是它主要存在如下缺点:①从数学上看,它可归结为一非线性的梯度优化问题,因此不可避免地存在局部极小问题;②学习算法的收敛速度慢,通常需要上千次或更多。
神经网络具有学习、联想和容错功能,是地下水水质评价工作方法的改进,如何在现行的神经网络中进一步吸取模糊和灰色理论的某些优点,建立更适合水质评价的神经网络模型,使该模型既具有方法的先进性又具有现实的可行性,将是我们今后研究和探讨的问题。
❷ 神经网络的优化
上节回顾:
介绍了神经元、神经网络
介绍了激活函数
提到了前向传播概念
留下问题:用到的参数w和b是怎么来的,是自己随便设定的吗
本节介绍:
神经网络、反向传播的例子
损失函数和梯度下降法、学习率介绍
最重要的用途是分类
这种能自动对输入的东西进行分类的机器,就叫做 分类器 。分类器的输入是一个数值向量,叫做特征(向量)。
第一个例子里,分类器的输入是一堆0、1值,表示字典里的每一个词是否在邮件中出现,比如向量(1,1,0,0,0......)就表示这封邮件里只出现了两个词abandon和abnormal;
第二个例子里,分类器的输入是照片,假如每一张照片都是320x240像素的红绿蓝三通道彩色照片,那么分类器的输入就是一个长度为320x240x3=230400的向量。
分类器的输出也是数值。
第一个例子中,输出1表示邮件是垃圾邮件,输出0则说明邮件是正常邮件;
第二个例子中,输出0表示图片中是狗,输出1表示是猫。
分类器的目标就是让正确分类的比例尽可能高。一般我们需要首先收集一些样本, 人为标记上正确分类结果 ,然后用这些标记好的数据 训练分类器 ,训练好的分类器就可以 在新来的特征向量上工作 了。
这就是BP神经网络(back propagation)。
旨在得到最优的全局参数矩阵,进而将多层神经网络应用到分类或者回归任务中去。
前向传播 输入信号直至 输出产生误差 , 反向传播 误差信息 更新权重 矩阵。
这个地方提到的误差这个概念,其实就是对应了损失函数,损失函数说白了就是计算误差的函数。
举例:线性回归:寻找一条拟合图中数据点最好的直线
把每条小竖线的长度加起来就等于我们现在通过这条直线预测出的值与实际值之间的差距
缺点:采用梯度下降法学习时,模型一开始训练学习速率非常慢
对一个多元函数求偏导,会得到多个偏导函数.这些导函数组成的向量,就是梯度;一元函数的梯度是什么?它的梯度可以理解为就是它的导数。
求解多元函数和一元函数的道理是一样的,只不过函数是一元的时候,梯度中只有一个导函数,函数是多元的时候,梯度中有多个导函数.
当我们把梯度中的所有偏导函数都变为0的时候,就可以找到每个未知数的对应解。
梯度下降中求偏导数的未知数不是x和y,而是x的参数W。
梯度下降的方向:把这一点带入到梯度函数中,结果为正,那我们就把这一点的值变小一些,同时就是让梯度变小些;当这一点带入梯度函数中的结果为负的时候,就给这一点的值增大一些。
在这个下降的过程中.因为我们并不知道哪一个点才是最低点,也没有办法来预测下降多少次才能到最低点.这里梯度下降给出的办法是:
先随便蒙一个点出来,然后根据这个点每次下降以丢丢.什么时候下降得到的值(点带入偏导函数得到的)和上一次的值基本一样,也就是相差特别特别小的时候,我们认为就到了最低点。
让点沿着梯度方向下降慢慢求得最优解的过程我们叫做 学习 ,学习率就是用来限制他每次学习别太过"用功"的。下左图是我们所期望的,一个点按照梯度方向下降,慢慢逼近最低点,右图中展示的这个梯度值过大的时候,点下降的step就过大了,一次性迈过了最低点,导致函数无法找到最优解。学习率就是用来限制这种情况的。
更新权重的算法:每一个权重值都要减去它对应的导数和学习率的乘积
Lr 代表的是学习率
简单举例
❸ BP神经网络
神经网络能很好地解决不同的机器学习问题。神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。
上图显示了人工神经网络是一个分层模型,逻辑上可以分为三层:
输入层 :输入层接收特征向量 x
输出层 :输出层产出最终的预测 h
隐含层 :隐含层介于输入层与输出层之间,之所以称之为隐含层,是因为当中产生的值并不像输入层使用的样本矩阵 X或者输出层用到的标签矩阵 y 那样直接可见。
下面引入一些标记法来帮助描述模型:
!$ a^{(j)}_{i} $ 代表第j层的第i个激活单元。 !$ heta^{(j)} $ 代表从第 j 层映射到第 j+1 层时的权重的矩阵,例如 !$ heta^{(1)} $ 代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第 j+1层的激活单元数量为行数,以第 j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中 !$ heta^{(1)} $ 的尺寸为 3*4。
对于上图所示的模型,激活单元和输出分别表达为:
!$ a^{(2)}_{1} = g( heta^{(1)}_{10}x_0 + heta^{(1)}_{11}x_1 + heta^{(1)}_{12}x_2 + heta^{(1)}_{13}x_3 ) $
!$a^{(2)}_{2} = g( heta^{(1)}_{20}x_0 + heta^{(1)}_{21}x_1 + heta^{(1)}_{22}x_2 + heta^{(1)}_{23}x_3 ) $
!$a^{(2)}_{3} = g( heta^{(1)}_{30}x_0 + heta^{(1)}_{31}x_1 + heta^{(1)}_{32}x_2 + heta^{(1)}_{33}x_3 ) $
!$h_{ heta}{(x)} = g( heta^{(2)}_{10}a^{2}_{0} + heta^{(2)}_{11}a^{2}_{1} + heta^{(2)}_{12}a^{2}_{2} + heta^{(2)}_{13}a^{2}_{3} ) $
下面用向量化的方法以上面的神经网络为例,试着计算第二层的值:
对于多类分类问题来说:
我们可将神经网络的分类定义为两种情况:二类分类和多类分类。
二类分类: !$ S_{L} = 0,y = 0,y = 1$
多类分类: !$ S_{L} = k, y_{i} = 1表示分到第i类;(k>2)$
在神经网络中,我们可以有很多输出变量,我们的 !$h_{ heta}{(x)} $ 是一个维度为K的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,为: !$ h_{ heta}{(x)} in R^{K}(h_{ heta}{(x)})_{i} = i^{th} output$
我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出K个预测,基本上我们可以利用循环,对每一行特征都预测K个不同结果,然后在利用循环在K个预测中选择可能性最高的一个,将其与y中的实际数据进行比较。
正则化的那一项只是排除了每一层 !$ heta_0$ 后,每一层的 矩阵的和。最里层的循环j循环所有的行(由 +1 层的激活单元数决定),循环i则循环所有的列,由该层( !$ s_l$ 层)的激活单元数所决定。即: !$h_{ heta}{(x)}$ 与真实值之间的距离为每个样本-每个类输出的加和,对参数进行 regularization 的 bias 项处理所有参数的平方和。
由于神经网络允许多个隐含层,即各层的神经元都会产出预测,因此,就不能直接利用传统回归问题的梯度下降法来最小化 !$J( heta)$ ,而需要逐层考虑预测误差,并且逐层优化。为此,在多层神经网络中,使用反向传播算法(Backpropagation Algorithm)来优化预测,首先定义各层的预测误差为向量 !$ δ^{(l)} $
训练过程:
当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。
为了避免这样的问题,我们采取一种叫做梯度的数值检验( Numerical Gradient Checking )方法。这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。
对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。即对于某个特定的 ,我们计算出在 !$ heta - epsilon$ 处和 !$ heta + epsilon$ 的代价值(是一个非常小的值,通常选取 0.001),然后求两个代价的平均,用以估计在 !$ heta$ 处的代价值。
当 !$ heta$ 是一个向量时,我们则需要对偏导数进行检验。因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对 !$ heta_1$ 进行检验的示例:
如果上式成立,则证明网络中BP算法有效,此时关闭梯度校验算法(因为梯度的近似计算效率很慢),继续网络的训练过程。
❹ matlab的遗传算法优化BP神经网络
对y=x1^2+x2^2非线性系统进行建模,用1500组数据对网络进行构建网络,500组数据测试网络。由于BP神经网络初始神经元之间的权值和阈值一般随机选择,因此容易陷入局部最小值。本方法使用遗传算法优化初始神经元之间的权值和阈值,并对比使用遗传算法前后的效果。
步骤:
未经遗传算法优化的BP神经网络建模
1、
随机生成2000组两维随机数(x1,x2),并计算对应的输出y=x1^2+x2^2,前1500组数据作为训练数据input_train,后500组数据作为测试数据input_test。并将数据存储在data中待遗传算法中使用相同的数据。
2、
数据预处理:归一化处理。
3、
构建BP神经网络的隐层数,次数,步长,目标。
4、
使用训练数据input_train训练BP神经网络net。