上回文说到基于误差梯度下降的BP网络算法容易陷入局部极小,通常的改进方法先使用遗传算法生成比较好的权重值,再交给神经网络训练。
遗传算法随着进化的进行,其选择率、交叉算子、变异率应该是动态改变的。
编码方式
在使用BP网络进行文本分类时,大都是采用实数编码,把权值设为[0,1]上的实数,这是因为要使用权值调整公式要求权值是实数。但是在使用遗传算法优化这些权值时,完全可以把它们编码为整数。比如设为[1,64]上的整数,一个权值只有64种选择,而[0,1]上的实数有无穷多个,这样既可以缩小搜寻的范围,同时也加大了搜寻的步长。毕竟BP网络中很多个极小点,使用遗传的目的只是在全局找个一个比较优的解,进一步的精确寻优交给BP神经网络来做。
选择算子
在进化初期我们应该使用较小的选择压力,以鼓励种群向着多样化发展;在进化后期个体差异不大,适应度都很高,这时应增大选择压力以刺激进化速度。可以使用模拟退火(SA,simulated annealing)来决定选择率,即我们以一定的概率来接收不好的个体:
这是模拟退火的原始表达式,意思是说在金属退火的过程中,其能量在降低(<0),我们以
的概率接收本次变化,显然当温度T越低时,接收概率越大,温度T越高时,接收概率越小,k是常数。对应到遗传算法,就是当种群平均适应值越低时,接收劣等个体的概率越高,当种群平均适应值越高时,接收劣等个体的概率越小。
另外M.Srinivas提出当群体适应度比较集中时,使交叉概率增大;当群体适应度比较分散时,使交叉概率减小。种群适应度分散与否通过最大、最小和平均适应度来衡量。
选择算子是保证遗传算法能找到近优解的唯一手段,当染色体唯度很高时,遗传算法很难找到较好的解。这是因为最开始生成的初始种群适应度都极其的低,个体之间(适应度)差异不大,如果使用锦标赛选择法则跟随机选择无异,即使使用赌轮法选择到最优个体的概率会大增加,但是最优个体也不比最劣个体好到哪儿去,最优个体也不含有优良的基因片段。所以对于高维数据,在进化初期主要靠交叉进行全局搜索来搜寻较优的个体。
交叉算子
交叉实际上就是在进行全局搜索,所以遗传算法不过是穷举算法的一个变种。在进化初期,种群多样性高,采用单点交叉就可以获得较广的搜索空间;在进化后期,个体差异不大,需要采用多点交叉,或者有人采用变异交叉点的方法。
当发现种群的适应度操持不变时,可能已经进入了局部最优,应该变异交叉点,大步跨出当前的小山峰。
由于要保留精英个体,所以交叉要以一定的概率进行。随着进化的进行,交叉率应逐渐降低趋于某个值,以避免算法不收敛。
变异算子
直观上对好的个体应施以较小的变异率,对劣等个体应施以较大的变异率。
当发现种群的适应度在降低时应增大变异率。
另外M.Srinivas提出当群体适应度比较集中时,使变异概率增大;当群体适应度比较分散时,使变异概率减小。种群适应度分散与否通过最大、最小和平均适应度来衡量。
下面的代码是用遗传算法来为BP网络寻找比较好的初始解。但是遗传算法根本就没有起到作用,因为我的神经网络输入层1000个节点,隐藏层20个节点,这就2万个权值了,也就是说染色体的长度在2万维以上,用遗传算法根本就找不到较优解,它始终是在随机地遍历,一点儿没有想“进化”的意思。
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cassert>
#include<vector>
#include<fstream>
#include<sstream>
#include<limits>
#include<algorithm>
using namespace std;
inline double sigmoid(double activation,double response);
void initIO();
void initWeight();
void printWeight();
void getOutput(vector<double> &input,vector<double> &Y,vector<double> &output);
void adjustWeight(vector<vector<double> > &input,vector<vector<double> > &Y,vector<vector<double> > &output,vector<vector<double> > &D);
double getMSE(vector<vector<double> > &output,vector<vector<double> > &D);
void initPopulatio

本文探讨了遗传算法在BP神经网络中的应用,通过动态调整选择率、交叉算子和变异算子来提高搜索效率。编码方式采用了整数编码以缩小搜索范围,选择算子利用模拟退火策略,交叉算子和变异算子根据种群适应度动态调整。然而,对于高维度问题,遗传算法可能难以找到全局最优解。
最低0.47元/天 解锁文章
5252

被折叠的 条评论
为什么被折叠?



