“兵无常势,水无常形”-参数的自适应更新方法

本文探讨了深度学习中遇到的损失函数不再降低的问题,分析了梯度下降法的改进方案,包括Adagrad、RMSProp等自适应更新方法,并介绍了学习速率的调度技术,旨在解决参数更新不稳定的问题,以实现更有效的模型优化。
摘要由CSDN通过智能技术生成

目录

1.损失无法降低的原因

2.梯度下降的改进方案

3.自适应的更新方法

 3.1 Adagrad梯度下降方法

3.2 RMSProp梯度下降方法

3.3 学习速率的Scheduling技术

4.改进后的梯度更新方法


 

1.损失无法降低的原因

图1 训练参数的常见情况 

“众里寻他千百度”-深度学习的本质一文中,讨论了使用传统的梯度下降方法更新机器学习模型的参数.在通常情况下,遇到的情况大多是上图中右上方所展示的结果,横轴表示参数迭代的次数,纵轴表示损失函数的数值,随着迭代次数的增加,损失函数数值不再下降.理论上来说,遇到这种情况可能表示梯度为0,参数更新到了驻点.但实际上,遇到的情况可能并不是这样,如上图右下方所示,横轴仍为参数的更新次数,纵轴为梯度向量的范数.事实表明,此时梯度向量并非很小.

出现这一现象,最有可能的原因如上图左方展示的那样.参数更新时遇到了一个类似于“峡谷”的地方,在来回震荡.

2.梯度下降的改进方案

图2 凸面的实验结果 

上图展示了取不同学习速率时,对于同样的凸面损失函数参数更新的效果.其中横轴代表参数b的数值,纵轴表示参数w的数值,通过颜色来表示损失函数的数值大小,蓝色色系表示较小的损失,红色色系表示较大的损失,黄色的“叉”符号表示局部极小点,黑色的点表示参数更新的轨迹.

取学习速率为10的-2次方时,参数更新的效果图如上方左侧所示.此时由于学习速率过大,参数在类似“峡谷”的两端不断地来回震荡.

考虑到上面的情况无法更新到局部极小点,将学习速率改小,改成10的-7次方,参数更新的效果如上图右方所示,参数更新到“平坦”的地方,由于学习速率和梯度都很小,因此参数的更新非常缓慢.

综合以上两种情况,可以总结出解决这一问题的可行方案:当计算的梯度非常大时,应该需要很小的学习速率;当计算的梯度非常小时,应该需要很大的学习速率.这就如同孙子兵法里的“兵无常势,水无常形,能因敌变化而取胜者,谓之神”,因此,需要根据梯度的大小来调整参数更新的步伐.

3.自适应的更新方法

经过上述分析可知,在更新参数时,参数更新的数量不仅和当前的梯度、学习速率有关系,应该也和历史的梯度大小有关系.因此,传统的参数更新方法应该转化为式(1).在式(1)中,{\theta}表示待更新的参数,i表示深度学习模型的第i个参数,t表示参数更新的次数,g表示更新的梯度分量,{\eta}表示学习速率,{\sigma}表示学习速率的调整系数,它本质上是关于更新次数的函数,更新次数的变化导致梯度变化,最终导致它的变化.

\theta^{t}_{i} = \theta^{t-1}_{i} -\frac{\eta}{\sigma^{t-1}_{i}}g^{t-1}_{i} (1) 

更新方法的变化本质上归结于{\sigma},构造{\sigma}的思路不同就衍生出一系列的梯度更新算法.

 3.1 Adagrad梯度下降方法

见公式(2),当{\sigma}取历史梯度的均方根(Root Mean Square)时,从概率论的角度来看即为二阶原点矩开根号,梯度的平方求平均再开根号,此时梯度更新方法被称为Adagrad梯度下降方法.易知,当{\sigma}关于梯度的表达式为公式(2)时,梯度较大时,{\sigma}变大,在更新参数时取倒数,参数更新的步伐变小;反之梯度较小时,{\sigma}变小,在更新参数时取倒数,参数更新的步伐变大.可以解决上面出现的问题.

\sigma ^{t}_{i}=\sqrt{\frac{1}{t+1}\sum_{k=0}^{t}(g^{k}_{i})^{2}} (2)

      

3.2 RMSProp梯度下降方法

图3 Adagrad遇到的问题

上图展示了使用 Adagrad参数更新方法可能遇到的新问题.其中横轴表示参数w1的数值,纵轴表示w2的数值,等高线表示损失函数数值.如上图所示,考虑w1参数更新的情况,一开始“坡度”较为陡峭,参数更新需要较小的学习速率;当参数更新到中间区域时,“坡度”变得平滑,参数更新可能需要较大的学习速率.但是,使用Adagrad这种更新方法,可能对于当前梯度的反应并不是很灵敏,当前梯度较小时,{\sigma}没有立刻变小,仍然以之前积累的历史梯度为主,导致当前梯度仍然很大,反而在红色箭头部分得到了较小的学习速率.由此引出了RMSProp梯度下降方法.

RMSProp梯度下降方法认为{\sigma}的数值取决于两部分梯度信息,一部分为当前梯度的数值,另一部分为历史梯度的信息,通过一个参数{\alpha}来调节两部分信息的重要程度,见公式(3).{\alpha}​​​​​​​取值在0至1之间,是一个超参数,如果认为过去梯度的信息比较重要就将{\alpha}​​​​​​​设计得大一些,如果认为当前梯度的信息比较重要就将{\alpha}​​​​​​​设计得小一些.

\sigma^{t}_{i}=\sqrt{\alpha(\sigma^{t-1}_{i})^{2}+(1-\alpha)(g^{t}_{i})^{2}} (3)  

3.3 学习速率的Scheduling技术

图4 Adagrad参数更新的效果

 利用 Adagrad梯度下降方法对图2中的实验做改进,发现Adagrad梯度下降方法是起作用的,如上图所示.参数经过足够多次数的迭代和更新,确实可以找到局部极小点.但是上图仍然暴露出Adagrad梯度下降方法的不足之处.

考虑参数w的更新情况,在竖直方向上一开始梯度很大,参数更新的学习速率很小,在参数更新至“山谷”处之后,梯度很小.在积累了很多很小的梯度之后{\sigma}变得很大,参数就“飞出了视野之外”.之后梯度又变大了,参数又被修正回来,这个过程反复经历了多次.由此,可以看出,出Adagrad梯度下降方法的不足之处是参数更新的后期非常不稳定,由此引出了学习速率的Scheduling技术.

 图5 学习速率的Scheduling技术

上图展示了学习速率的Scheduling技术的两种方案,一种是认为学习速率随着更新的次数不断减小又被称为学习速率的衰减(Learning Rate Decay),另外一种认为学习速率应该随着更新次数先增大后减小(Warm Up).

学习速率的衰减很好理解,因为随着迭代次数的不断增加,参数可能越来越接近局部极小点,所以越到后期越应该减小更新的速度.关学习速率的Warm Up技术一个很好的解释是,前期对于损失函数一无所知,需要试探性地先多收集更多的信息,等收集完足够多的信息之后,越来越接近局部极小点,此时便可以放缓更新参数的步伐.

4.改进后的梯度更新方法

结合“居高临下,势如破竹”-参数的动量更新方法一文中介绍的梯度更新的改进版,融合本文探讨的自适应的梯度更新方法,事实上得到了一个最终版本关于梯度更新方法的改进方案见公式(4)

\theta^{t}_{i} = \theta^{t-1}_{i}-\frac{\eta^{t-1}}{\sigma^{t-1}_{i}}m^{t-1}_{i} (4)

在公式(4)中,参数{\theta}的更新由学习速率{\eta}、动量m和均方根{\sigma}共同决定,学习速率{\eta}、动量m和均方根{\sigma}均为更新次数t的函数,随着t的变化而变化.其中学习速率{\eta}本质上决定了参数更新的趋势,动量m决定了参数更新的方向,均方根{\sigma}参数变化的数量级.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值