遗传算法优化BP神经网络

2022/2/7 22:44:41

本文主要是介绍遗传算法优化BP神经网络,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

遗传算法原理

遗传算法背景不作介绍。遗传算法作为一种并行随机搜索最优化算法,将自然界的优胜劣汰的生物进化原理引入优化参数形成的编码串联群体中,按照所选的适应度函数并通过遗传中的选择,交叉和变异对个体进行筛选,使适应度值较好的个体被保留,这样新的群体继承上一代,又优于上一代。反复循环,直至满足条件。

基本操作分为:

选择操作

        选择操作是指从旧群体中以一定概率选择个体到新群体中,个体被选中的概率跟适应度值有关,个体适应度越好,被选中的概率越大。

交叉操作

        指从个体中选择两个个体,通过两个染色体的交换组合,产生新的优秀个体。交叉过程为从群体中任选两个染色体,随机选择一点或多点染色体位置进行交换。

变异操作

从群体中任选一个个体,选择染色体中的一点进行变异以产生更优秀的后代。

遗传算法基本要素

        染色体编码方法,适应度函数,遗传操作和运行参数。

        染色体编码方法是指个体的编码方法,目前包括二进制法,实数法,二进制法是指把个体编码成为一个二进制串,实数法是指把个体编码成一个实数串。

        适应度函数是指根据进化目标编写的计算个体适应度值的函数,通过适应度函数计算每个个体的适应度值,提供给选择算子进行选择。

        遗传操作是指选择操作,交叉操作和变异操作。

        运行参数是遗传算法在初始化时确定的参数,主要包括群体大小M,遗传代数G,交叉概率P(c)和变异概率P(m)。

模型建立

        遗传算法优化BP神经网络分为BP神经网络结构确定,遗传算法优化,BP神经网络预测三部分。其中BP神经网络结构确定部分根据拟合函数输入输出参数个数确定BP神经网络的权值和阀值,种群中每个个体都包含了一个网络所有权值和阀值,个体通过适应度函数计算个体适应度值,遗传算法通过选择、交叉和变异操作找到最优适应度值对应个体。BP神经网络预测用遗传算法得到最优个体对网络初始权值和阀值赋值,网络经训练后预测函数输出。

遗传算法实现

        种群初始化

        个体编码方式为实数编码,每个个体均为一个实数串,由输入层和隐含层连接权值,隐含层阀值、隐含层与输出层连接权值以及输出层阀值四部分组成。个体包括了神经网络全部权值与阀值,在网络结构已知的情况下,就可以构成一个权值、阀值、结构确定的神经网络。

        适应度函数

        根据个体得到的神经网络初始权值与阀值,用训练数据训练BP神经网络后预测系统输出,把预测输出与期望输出之间的误差绝对值和E作为个体适应度值F,计算公式为

                                        F=k\sum y(i)-o(i)))

           式中,y(i)为BP神经网络第i个节点的期望输出,o(i)为第i个节点的预测输出,k为系数。

     选择操作

        遗传算法选择操作有轮盘赌法,锦标赛法等。轮盘赌法是基于适应度比例的选择策略,每个个体的选择概率p(i)为

                                        f(i)=k/F(i)

                                        p(i)=f(i)/\sum_{j=1}^{N}f(j)))

F(i)为个体i的适应度值,因为适应度越小越好,所以在个体选择前对适应度值求倒数,k为系数,N为种群个数。

交叉操作

        由于个体采用实数编码,所以交叉操作方法采用实数交叉法。第k个染色体a(k)与第l个染色体a(l)在j位的交叉方法:

                                        a(kj)=a(kj)(1-b)+a(lj)b

                                        a(lj)=a(lj)(1-b)+a(kj)b

b为[0,1]间的随机数。

变异操作

        选取第i个个体的第j个基因a(ij)进行变异,方法:

                                        

遗传算法主函数 

主函数流程:

随机初始化种群

计算种群适应度值,从中找出最优值

选择操作

交叉操作

变异操作

判断进化是否结束,否则重新计算种群适应度值

除遗传算法外,还可以采用粒子群算法,蚁群算法等优化BP神经网络



这篇关于遗传算法优化BP神经网络的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程