老饼讲解:一步一步上手学习
matlab为BP神经网络提供了多种的训练算法,这里我们展示matlab中各种BP神经网络训练算法(traingd,traingdm,trainlm等)的详细说明,方便使用时参考。
matlab神经网络工具箱提供的所有训练方法和参数名如下
| 训练参数名 | 训练方法 |
|---|---|
| traingd | 梯度下降法 |
| traingdm | 有动量的梯度下降法 |
| traingda | 自适应lr梯度下降法 |
| traingdx | 自适应lr动量梯度下降法 |
| trainrp | 弹性梯度下降法 |
| traincgf | Fletcher-Reeves共轭梯度法 |
| traincgp | Ploak-Ribiere共轭梯度法 |
| traincgb | Powell-Beale共轭梯度法 |
| trainscg | 量化共轭梯度法 |
| trainbfg | 拟牛顿算法 |
| trainoss | 一步正割算法 |
| trainlm | Levenberg-Marquardt法 |
好了,上面就是matlab提供的所有BP神经网络的训练算法了。
上面列举的各种算法,许多其实是充数的,比较关键的训练方法有三个:
traingd:梯度下降法
trainlm:Levenberg-Marquardt法
trainscg:量化共轭梯度法
traingd是梯度下降法,也是最基础的算法,但是实际应用效果并不太好,这主要是因为BP神经网络的误差函数往往是一个相对复杂的函数,而梯度下降算法在平缓区域迭代特别慢,所以遇到这种情况,训练10万步都没办法跳出平缓区域,往往训练半天,最后也没有获得较好的结果,因此,梯度下降法作为学习与理解BP神经网络的训练是挺不错的,但如果真的拿来训练,效果欠佳。
trainlm是LM(Levenberg-Marquardt)算法,其中,Levenberg(列文伯格)、Marquardt(马跨特)分别是两个人名。trainlm算法是matlab神经网络工具箱的默认方法,它是BP神经网络训练的最佳方法之一,它同时利用了一阶导信息和二阶导信息,训练速度比梯度下降法、或者其它算法要快得多。它的缺点是内存消耗会随着变量个数的增长而二次方增长,所以较为消耗内存,在变量极多时,就会爆内存。但是,一般按目前的情况,LM算法基本都是可用的,所以不必过于担心,首选就用LM算法就可以了。
trainscg是量化共轭梯度法,它在梯度下降算法的基础上加入了共轭性,使得每一个搜索方向是互相共轭的,由于它的收敛速度是超线性,但内存消耗却较小,可以说是优化大型问题的利器。因此,当trainlm无法使用时,就可以选择使用trainscg算法,它相当于trainlm的备选方法。
这里介绍了matlab工具箱提供的各种训练算法,没事的同事可以随便玩一玩,但总的来说,梯度下降法一般效果不怎么样,至少选个traingda,都会相对要好一些,它是加入了"可变学习率"的梯度下降算法,在顺风时就会加大学习率,逆风时缩小学习率,所以效果也比梯度下降法要好很多。但总的来说,有trainlm算法基本就够用了。
评论