BP神经网络的自适应步长问题

来源:互联网 发布:小米2s3g网络设置 编辑:程序博客网 时间:2024/05/17 09:03
BP中文名为误差后向传播算法,其是针对前馈神经网络的常用训练算法。BP的算法原理资料很多,这里就不一一赘述。

一、算法的思考与改进
BP算法虽然很强大,但是其收敛速度慢,训练时间长、容易落入局部最优值等缺点一直为人诟病。而对于BP算法的改进方法有如:自适应步长、增加动量项等。

固定步长:

如下对于这是简单的线性数据拟合,差不到200+次迭代神经网络才收敛:
这里写图片描述
:

调整策略1:
这个调整策略来自参考文献[1]的变学习率公式,前期的步长十分大,而后学习率随着迭代次数增加而线性减小:

stepDist = max_step - ((max_step - min_step) * cntIter / nIter);

其接近20次就基本收敛了:
这里写图片描述

调整策略2:
使用前后两次的迭代误差的差值来确定是否增加还是减少学习率,更加差值的大小,确定步长的变化幅度。而且变化的步长使用差值的log函数作为最为单位步长的倍数,使用对数函数能减缓变化的速度,减少网络发散的可能。
这个算法是我自己想的,虽然能提升收敛速度,但是收敛的过程中单位步长应该更小一些,震荡才不会那么厉害

sde = 0.01%%变化的单位步长%k = err(1) - err(2); %%前后两次的迭代误差的差值%if k > 0.01    stepDist = stepDist - (log(k) + 1) * sde;if stepDist <= 0     stepDist = 0.01; endelseif k < -0.01    stepDist = stepDist + (log(-k) + 1) * sde;end           end

这里写图片描述

<未完待续>

0 0