对于大数据量、高维数及多隐层节点等条件,各类神经网络训练过程中很有可能会遇到大量的局部极值,不仅严重影响了收敛速度,而且有可能导致训练误差收敛于局部最优解而不是全局最优解,严重影响了神经网络的性能。在现阶段的各种优化问题中,如何得到最优解,以及如何避免在产生最优解的过程中出现的诸如局部最优解、可行解的收敛性等问题,是工程优化中一些非常重要的问题,亟待解决。而作为遗传算法,其恰好可以很好地解决这些问题,原因在于遗传算法是一种强有力的和应用广泛的随机搜索优化技术,对很多传统方法难以解决的问题非常有效。
遗传算法(Genetic Algorithms,GA)的基本思想基于Darwin进化论和Mendel遗传学说。Darwin进化论最重要的是适者生存原理,它认为每一物种在发展中越来越适应环境。物种每个个体的基本特征由后代所继承,但后代又会产生一些异于父代的新变化。在环境变化时,只有那些能适应环境的个体特征方能保留下来。Mendel遗传学说最重要的是基因遗传原理,它认为遗传以密码方式存在细胞中,并以基因形式包含在染色体内,每个基因有特殊的位置并控制某种特殊性质。所以,每个基因产生的个体对环境具有某种适应性,基因突变和基因杂交可产生更适应于环境的后代。经过存优去劣的自然淘汰,适应性高的基因结构得以保存下来。遗传算法是一种新的全局优化搜索算法,具有简单通用、鲁棒性强、适于并行处理及应用范围广等显著特点,是21世纪关键智能计算之一。
遗传算法不同于枚举算法、启发式算法、搜索算法等传统的优化方法,其具有如下特点。
(1)自组织、自适应和智能性。遗传算法消除了算法设计中的一个最大障碍,即需要事先描述问题的全部特点,并说明针对问题的不同特点算法应采取的措施。因此,它可用来解决复杂的非结构化问题,具有很强的鲁棒性。
(2)直接处理的对象是参数编码集,不是问题参数本身。
(3)搜索过程中使用的是基于目标函数值的评价信息,既不受优化函数连续性的约束,也没有优化函数必须可导的要求。
(4)易于并行化,可降低由于使用超强计算机硬件所带来的昂贵费用。
(5)基本思想简单,运行方式和实现步骤规范,便于具体使用。
遗传算法的基本流程如图3-1所示,算法的主要运算过程如下。
图3-1 遗传算法的基本流程
(1)编码:在用遗传算法求解问题时,首先遇到的是编码问题。将问题的解以适合于遗传算法求解的形式进行编码,称为遗传算法的表示,而交叉、变异等操作与编码的形式有关。因此,在进行编码时,要考虑到交叉和变异问题。最简单的编码方式是二进制编码。此外,编码的方式还有整数编码、实数编码和树编码等。
(2)初始化种群的生成:在求解之前产生初始化种群,在解的备选空间中选择若干个体组成初始化种群,通常采用随机法产生初始化种群。
(3)适应度评价:根据生物进化“适者生存”的原则,需要对每个个体适应环境的能力进行刻画,从而引入适应度。适应度是遗传算法在群体进化过程中用到的唯一信息,它为字符串如何进行复制给出了定量的描述。适应度函数通过计算个体的适应值来比较个体的适应度。适应度函数分为无约束条件的适应度函数和有约束条件的适应度函数。
(4)选择:种群中的个体在进行交叉之前,要进行选择。选择的目的是获得较优的个体作为父代,进行下一步的交叉。选择的依据是个体的适应度,适应度值高的个体被选中的可能性大,适应度低的个体被选中的可能性小。适应度高的个体可能被多次复制,而适应度低的个体可能一次也未被选中。选择算子有时也叫复制算子。常用的选择方法是适应度比例法,也叫轮盘赌法,它的基本原则是按照个体的适应度大小比例进行选择。
(5)交叉:交叉也称为交配,即将两个父代个体的编码串的部分基因进行交换,产生新的个体。交叉算子是种群遗传算法中的重要算子,是种群产生新个体的主要手段。对于二进制编码,具体实施交叉的方法有单点交叉、两点交叉、多点交叉和一致交叉等。对于实数编码,交叉的方法有离散重组、中间重组和线性重组等。
(6)变异:变异操作首先在种群中随机选择一个个体,对于选中的个体按照一定的概率随机改变串结构中的某个值,即对种群中的每一个个体以某一概率改变某一个或某一些基因座上的值为其他的基因。同生物界一样,遗传算法中发生变异的概率很低。变异操作为新个体的产生提供了机会。
(7)终止条件判断:终止条件判断是指在什么情况下认为算法找到了最优解,从而可以终止算法。由于通常使用遗传算法解决具体问题时并不知道问题的最优解是什么,也不知道其最优解的目标函数值,因而需要通过算法终止,并获得最优解。
可以用MATLAB神经网络工具箱与遗传算法工具箱构造遗传神经网络。在MATLAB中可以使用的遗传算法工具箱主要有3种:①GAOT(Genetic Algorithm Optimization Toolbox)工具箱,这是美国北卡罗莱纳那州立大学推出的遗传算法优化工具箱,它不是MATLAB软件自带的,可自行配置使用;②GATBX(Genetic Algorithm Toolbox)工具箱,这是英国谢菲尔德(Sheffield)大学开发的遗传算法工具箱,也不是MATLAB软件自带的,可自行配置使用;③GADST(Genetic Algorithm and Direct Search Toolbox)工具箱,这是MathWorks公司发布的遗传算法与直接搜索工具箱。
谢菲尔德大学遗传算法工具箱功能齐全,编程相对灵活,本节主要介绍该工具箱。首先将该工具箱存放在一个文件夹中,本文命名该文件夹为gatbx_toolbox,建议读者将该文件夹放置在MATLAB安装目录下的toolbox文件夹中,然后在MATLAB主窗口上选择执行菜单命令File→SetPath→Add Folder…,添加该文件夹,如图3-2所示。
图3-2 添加遗传算法工具箱示意图
谢菲尔德大学遗传算法工具箱使用 MATLAB 将遗传操作的每一部分编写一个m文件,通过函数间的相互调用来完成遗传计算,从而建立了能够完成遗传计算的一套通用工具。其主要函数如表3-1所示,主要函数的使用方法介绍如下。
功能:创建任意离散随机种群。
工具箱支持二进制、整数和浮点数编码。其中,二进制支持格雷码编码。工具箱提供了二进制和实值之间的转化函数。其调用格式为:
① [Chrom,Lind,BaseV]=crtbp(Nind,Lind)
② [Chrom,Lind,BaseV]=crtbp(Nind,Base)
③ [Chrom,Lind,BaseV]=crtbp(Nind,Lind,Base)
格式①创建一个大小为Nind×Lind的随机二进制矩阵。其中,Nind为种群个体数,Lind为个体长度。返回种群编码Chrom和染色体基因位的基本字符向量BaseV。
格式②创建一个种群个体为Nind。个体每位编码的进制数由Base决定(Base的列数即个体长度)。
格式③创建一个大小为Nind×Lind的随机矩阵。个体各位的进制数由Base决定,这时输入参数Lind可省略(Base的列数即为Lind),即格式②。
功能:基于排序的适应度分配。
适应度函数用于转化目标函数值,给每个个体一个非负的价值数。工具箱支持Goldberg的偏移法和比率法,以及贝克的线性评估法,另外支持非线性评估。其调用格式为:
① FitnV=ranking(ObjV)
② FitnV=ranking(ObjV,RFun)
③ FitnV=ranking(ObjV,RFun,SUBPOP)
格式①是按照个体的目标值ObjV(列向量)由小到大的顺序对个体进行排序的,并返回个体适应度值FitnV的列向量。
格式②中,RFun有三种情况:
(a)若RFun是一个在[1,2]区间内的标量,则采用线性排序,这个标量指定选择的压差。
(b)若RFun是一个具有两个参数的向量,即RFun(2)指定排序方法,0为线性排序,1为非线性排序;RFun(1)对线性排序,标量指定的压差为RFun(1)。
RFun(1)必须在[1,length(ObjV)-2]区间;如果为NAN,则RFun(1)假设为2。
(c)若RFun是长度为length(ObjV)的向量,则它包含对每一行适应度值的计算。
格式③中的参数ObjV和RFun与格式①和格式②中的参数一致,参数SUBPOP是一个任选参数,指明ObjV中子种群的数量。省略SUBPOP或SUBPOP为NAN,则SUBPOP=1。在ObjV中的所有子种群大小必须相同。如果ranking被调用于多子种群,则ranking独立地对每个子种群执行。
表3-1 遗传算法工具箱中的主要函数列表
续表
功能:从种群中选择个体(高级函数)。
选择函数有轮盘赌选择和随机遍历抽样选择,还有一个高级入口函数支持多种群遗传操作。其调用格式为:
① SelCh=select(SEL_F,Chrom,FitnV)
② SelCh=select(SEL_F,Chrom,FitnV,GGAP)
③ SelCh=select(SEL_F,Chrom,FitnV,GGAP,SUBPOP)
其中,
SEL_F:列向量,包含一个低级选择函数名,如rws或sus。
FinV:列向量,包含种群Chrom中个体的适应度值。这个适应度值表明了每个个体被选择的预期概率。
GGAP:可选参数,指出了代沟部分种群被复制。如果GGAP省略或为NAN,则GGAP假设为0.1。
SUBPOP:一个可选参数,决定Chrom中子种群的数量。如果SUBPOP省略或为NAN,则SUBPOP=1。Chrom中的所有子种群必须有相同的大小。
功能:重组个体(高级函数)。
二进制编码情况下支持单点交叉、两点交叉、多点交叉、洗牌交叉。实数编码时有离散重组、中间重组、线性重组和具有突变特性的线性重组。同样有一个高级交叉函数,支持多子种群计算。其调用格式为:
① NewChrom=recombine(REC_F,Chrom)
② NewChrom=recombine(REC_F,Chrom,RecOpt)
③ NewChrom=recombine(REC_F,Chrom,RecOpt,SUBPOP)
其中,
recombine:完成种群Chrom中个体的重组,在新种群NewChrom中返回重组后的个体。Chrom和NewChrom中的一行对应一个个体。
REC_F:一个包含低级重组函数名的字符串,如recdis或xovsp。
RecOpt:一个指明交叉概率的任选参数,若省略或为NAN,将设为缺省值。
SUBPOP:一个决定Chrom中子种群个数的可选参数,如果省略或为NAN,则SUBPOP为1。Chrom中的所有子种群必须有相同的大小。
功能:离散变异算子。
工具箱有3个变异函数支持二进制和实值及多种群变异。其调用格式为:
NewChrom=mut(OldChrom,Pm,BaseV)
其中,
OldChrom:当前种群。
Pm:变异概率。省略时为0.7/Lind。
BaseV:指明染色体个体元素变异的基本字符(省略时,种群为二进制编码)。
功能:重插入子代到种群。
其调用格式为:
① Chrom=reins(Chrom,SelCh)
② Chrom=reins(Chrom,SelCh,SUBPOP)
③ Chrom=reins(Chrom,SelCh,SUBPOP,InsOpt,ObjVCh)
④ [Chrom,ObjVCh]=reins(Chrom,SelCh,SUBPOP,InsOpt,ObjVCh,ObjVSel)
其中,
reins:完成插入子代到当前种群,用子代代替父代并返回结果种群。Chrom为父代种群,SelCh为子代,每一行对应一个个体。
SUBPOP:一个可选参数,指明Chrom和SelCh中子种群的个数。如果省略或者为NAN,则假设为1。在Chrom和SelCh中,每个子种群必须具有相同的大小。
InsOpt:一个最多有两个参数的任选向量。
InsOpt(1):一个标量,指明用子代代替父代的方法。0为均匀选择,子代代替父代使用均匀随机选择。1为基于适应度的选择,子代代替父代中适应度最小的个体。如果省略InsOpt(1)或InsOpt(1)为NAN,则假设为0。
InsOpt(2):一个在[0,1]区间的标量,表示每个子种群中重插入了子代体在整个子种群中个体的比率。如果InsOpt(2)省略或为NAN,则假设InsOpt(2)=1.0。
ObjVCh:一个可选列向量,包括Chrom中个体的目标值。对基于适应度的重插入,ObjVCh是必需的。
ObjVSel:一个可选列参数,包含SelCh中个体的目标值。如果子代的数量大于重插入种群中的子代数量,则ObjVSel是必需的。这种情况,子代将按它们的适应度值大小选择插入。
功能:二进制到十进制的转换。
其调用格式为:
Phen=bs2rv(Chrom,FieldD)
bs2rv根据译码矩阵FieldD将二进制串矩阵Chrom转换为实数向量,返回十进制的矩阵。
矩阵FieldD有如下结构:
这个矩阵的组成如下。
① len是包含有Chrom中的每个子串的长度,注意,sum(len)=size(Chrom,2)。
② lb和ub分别是每个变量的下界和上界。
③ code指明子串是怎样编码的,1为标准二进制编码,0为格雷编码。
④ lbin和ubin指明表示范围中是否包含边界。0表示不包含边界,1表示包含边界。
功能:矩阵复制。
其调用格式为:
MatOut=rep(MatIn,REPN)
函数rep完成矩阵MatIn的复制,REPN指明复制次数,返回复制后的矩阵MatOut。REPN包含每个方向的复制次数,REPN(1)表示纵向的复制次数,REPN(2)表示水平方向的复制次数。
遗传算法优化BP神经网络算法的流程如图3-3所示,其基本原理为利用遗传算法具有全局搜索和收敛速度快的特点,将其与神经网络结合起来,不仅能够发挥神经网络的泛化映射能力,而且使神经网络克服收敛速度慢和容易陷入局部误差极小点等缺点。
图3-3 遗传算法优化BP神经网络算法的流程
遗传神经网络的主要优化目标是神经网络的权值与阈值。因此,神经网络的拓扑结构必须提前确定,而且通用遗传算法存在收敛精度不高,以及容易过早收敛等问题。在实际应用中,可以从以下两个方面入手。第一,将遗传算法与梯度下降法等方法结合使用,以改善收敛效果;第二,将小生境方法等手段引入遗传算法,提高遗传算法的性能。