BP神经网络

【分析】为什么我用遗传算法优化BP没有什么效果

作者 : 老饼 发表日期 : 2023-06-16 19:11:57 更新日期 : 2024-09-16 13:27:48
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



在使用遗传算法优化BP神经网络的时候,往往效果并不好

本文通过两个例子进行剖析为什么效果会不好,籍此开启思路





    01. 遗传算法优化BP神经网络效果不好-分析简介     




本节先为“分析遗传算法优化BP神经网络无效”列举相关准备内容




    遗传算法优化BP神经网络-问题分析前的准备    


不只一次被问到“为什么我用遗传算法去优化BP神经网络没有什么效果”这个问题
这是一个较常见的困惑,为此笔者准备了本文,希望能帮助大家打开思路,而非完全的黑箱困惑

基础知识准备
要理解"为什么遗传算法对BP优化没效果",需要对两个算法本身有比较本质的认识
可参考以下文章
《遗传算法-入门讲解》        
 《寻解算法的本质与核心》    
 《BP神经网络的本质》         
案例准备
由于“用遗传算法去优化BP神经网络”是抽象的,
因为优化的具体实现思路是多种多样的,下面我们不妨举两个常见的思路来分析
✍️案例1. 用遗传算法优化BP神经网络的初始化权重阈值
先用遗传算法求解一下BP神经网络,
然后再用这个权重阈值作为BP神经网络的初始值,进行求解

✍️案例2. 用遗传算法优化BP神经网络的最终解            
在BP神经网络完成求解后,再用遗传算法优化解




    02. 遗传算法优化BP神经网络效果不好-案例剖析     



本文通过两个案例,剖析为什么会没有效果

使我们知道效果不好的原因和本质 



    分析案例1:为什么优化初始权重阈值没效果     


✍️案例1. 用遗传算法优化BP神经网络的初始化权重阈值
说明:如下说辞并非100%严谨,仅作为分享与启发发
如果只是简单的先用遗传算法求解一下BP神经网络,
然后再用这个权重阈值作为BP神经网络的初始值进行求解,那是很难有效果的,
为什么呢?
因为BP用类似梯度下降这样的算法求解,
而遗传算法不管它最终优化的值为多少,都对它影响不大,
这是由于,梯度下降法(训练步数足够)总能收敛到局部最优
也就是说,对于BP神经网络,判断一个初始解是否优秀,
并不是它当前的网络误差是多少,而是这个初始解,它最近的最小解误差是多少
 
所以说,案例中用遗传算法预先进行初始化没有效果就是因为如此
在整个遗传算法中,我们只是找了一个“误差“相对小一些的解来初始化BP
但它并不是“BP认为的优秀初始解”
✍️补充:为什么用遗传算法初始化后反而会更差?
如果用遗传算法优化初始解后,效果还会更差,那不必惊讶
下面我们分析一下这是为什么

不妨看下matlab的BP是如何初始化的
matlab使用的是nguyen_Widrow法对BP进行初始化,
以单输入网络为例,
 nguyen_Widrow希望网络初始化成以下的形式
 
 
 可以看到,它的目的就是让各个隐节点均匀分布在输入数据的范围
也就是让每个隐神经元各自负责一小块
这样做的好处是,一开始使每个神经元处于“有用”的状态,
并且它易于调整(不管哪一块,都有负责的神经元)
具体的我们不再分析,
这里主要说明,matlab本身就使用了一套相对有效的初始化方法,
而如果使用遗传算法(上面的分析我们已经看到遗传算法没有什么帮助)来替代,
自然效果反而可能会更差




    分析案例2:为什么优化BP的最终解没效果     


✍️案例2.用遗传算法优化BP神经网络的最终解
说明:如下说辞并非100%严谨,仅作为分享与启发
为什么在BP神经网络完成求解后再用遗传算法优化却没有效果呢,
首先,我们先梳理一下这么做的本质目的
当使用梯度下降时,已经取得了局部最优解,
那么,再用遗传算法,图的是什么呢?
那就只能图它“跳出局部最优”的机制了,也就是遗传算法中变异的部分
同时,遗传算法产生新解的方法,在数值上也不是真正的“邻域”,所以也有跳出局部最优的作用

但这些机制本身的出发点就类似“瞎猫碰死耗子地在附近瞎抓,看看能不能抓到一个更优的解”
这也就是为什么效果不大了,
一来是靠瞎抓去抓到一个优秀解本来概率就很小,
二来是在一个局部最优的点附近去瞎抓一个比它更优的解,明显概率更小
即使真的“抓到了一个更好的解”,
那也是运气好,这样跟直接多训练几次BP神经网络有什么区别呢?




    03. 为什么别人说遗传算法优化BP神经网络效果好     



本节分析为什么别人用遗传算法优化BP神经网络取得好效果的原因



     为什么别人的优化效果不错    


好了,为什么听说别人用遗传算法优化BP神经网络的效果不错?

不妨列举一些可能的原因作为参考
1.别人的优化思路不同
由于遗传算法只是一种思想,与BP的结合是多种多样的,
不同的优化思路差别就非常大,而且遗传算法自身的设计影响也非常大
别人用的可能是其他的、有效的结合方法

2.优化内容不同
对于遗传算法优化BP,
我们最直接的理解,是希望能让BP进一步取得更好的训练结果
但往往“别人的优化”并不是这个意思
笔者看了一些案例,标题都是《遗传算法优化BP》,它们的实际内容列举如下
1.用遗传算法优化隐节点个数                                                
2.直接采用遗传算法求解BP的权重、阈值                              
3.采用遗传算法优化初始值,并与随机初始化的结果进行比较

也就是说,遗传算法优化BP往往指的并不是在BP的常用方案下进一步优化,
而是指用遗传算法替代BP常用方案中的某一部分,例如求解、试参和初始化等等
如果我们希望的是实打实地提高模型的效果,
以上GA优化BP的方案明显不适用,因为常用方案效果更佳
 例如,隐节点用试凑法,求解用LM法,初始化用nguyen_Widrow法等等



     笔者语     


相信很多人都是“听说遗传算法可以优化BP”而入的坑 ,
费劲捣鼓几天之后,最终发现没什么用,
笔者也曾捣鼓过类似的问题,用来优化最终的值,
在努力尝试后完全没有提升效果,然后开始反思,
最后按以上的思路仔细想想,最后的想法是“凭什么这么干能有用?!”
所以不能过分认真百分百相信别人的说法,有时基于基本知识,相信自己的推断也挺好的

上面只是举两个反例,分析为什么“我的”遗传算法无法优化BP
并非一棒打死推断遗传算法无法优化BP,
个人认为,BP的优化空间还是很大的,这本身就是一个开放式的尝试
基于基本知识原理的基础上,再进行脑洞大开,
一定能找到一个遗传算法优化BP的idea的
如果决心往这方面做,加油努力!勇拓新章!
如果只是道听途说随便试试,笔者就觉得不必过份执着,更不要怀疑自我









 End 







联系老饼