Note2.3 机器学习:Adaptive Learning Rate
目录
1.training stuck的真正原因
Example
2.解决思路
方法1:AdaGrad
编辑
方法2:RMSProp(更优)
3.实例:使用AdaGrad
3.1原因分析
3.2解决方法:Learning Rate Scheduling
4.Summary
拓展
1.Adam介绍(最主流的优化算法之一)
2. Learning Rate Scheduling:Warm Up
Warm Up有效的一种可能解释
Adaptive Learning Rate是一种有效的训练技巧,可以解决training stuck的问题,基础思想:根据具体情况,给每个参数不同的Learning rate,并动态调整。
1.training stuck的真正原因
多数情况下,训练卡住并不是因为critical point,而是参数在error surface山谷之间来回震荡,无法跳出去(此时的gradient依然很大)。要接近critical point是一件很困难的事情,一般的gradient descend是做不到的,必须用特殊的方法。所以使用gradient descend训练时,遇到的大部分问题往往不是critical point
Example
注意:error surface图中颜色的冷暖通常用于表示误差(损失函数值)的高低,一般暖色(红/黄)≈ 高误差,冷色(蓝/绿)≈ 低误差;线条表示等高线,线条上误差率相同;等高线越密集表示此处算出的gradient越大
图中黄色标记点为错误率最低的点,也就是训练的最终目标。但如果直接使用gradient descend,无法达到。
2.解决思路
为了便于说明,用一个参数的更新为例,θ的右上角t表示iteration的次数,右下角i表示这是第i个参数。一般的gradient descend的学习率η是固定的,Adaptive Learning Rate则会动态调整。下图中不仅依赖于具体的参数,还依赖于更新的轮数。
方法1:AdaGrad
AdaGrad 是 Adaptive Gradient Algorithm(自适应梯度算法)的缩写,是一种自适应学习率的优化算法,根据不同参数的历史梯度信息动态调整学习率
此方法有效的原因
方法2:RMSProp(更优)
方法1存在缺陷:不能及时根据当前的gradient调整学习率,有一定滞后性。
而理想的状况是算法可以及时根据当前gradient动态调整η
RMSProp全称 Root Mean Square Propagation(均方根传播),是大名鼎鼎的Geoffrey Hinton 在其课程中提出,是一种自适应学习率的梯度下降优化算法。它的核心思想是通过对梯度平方的指数加权移动平均(EMA)动态调整每个参数的学习率,善于调整学习率以应对数据的稀疏性,解决了传统梯度下降方法(如SGD)和AdaGrad的学习率单调下降问题。
RMSProp中α是hyperparameter (超参数),表示衰减率(通常取0.9),控制历史信息的权重。α可以使历史信息能够指数级衰减,及时根据当前的情况调整Learning rate。
3.实例:使用AdaGrad
现在用AdaGrad来解决开头的例子
最终确实取到了很好的结果,但上述图片中存在一个问题,在接近时,训练结果“爆炸了”。
3.1原因分析
在横着的这段,纵轴的gradient一直很小,累计一段时间后对应的RMS(均方根)变得很小,学习率很大,所以在纵轴上出现大幅度偏移,经过一段时间后回到横着的这段,但由于偏移时纵轴gradient很大,RMS变大,学习率变小,训练结果又向左稳定前进了一段。一段时间后纵轴RMS又变小,所以又出现纵轴上大幅度偏移的情况。反复出现上述情况数次后,达到最终结果。
3.2解决方法:Learning Rate Scheduling
下图中采用的Learning Rate Scheduling策略是让Learning rate逐渐变小。原理:随时间延长,离目标距离变小,调整的“步幅”应该减小。
可以看出,Learning Rate Scheduling解决了问题。
4.Summary
拓展
1.Adam介绍(最主流的优化算法之一)
Adam 是 Adaptive Moment Estimation(自适应矩估计)的缩写,结合了动量(Momentum)和RMSProp,是当前最主流的optimizer(优化器)之一,广泛用于深度学习训练
pytorch中已经实现了Adam,直接调用即可; 注意:pytorch为Adam预设的超参数不要随便调整,否则结果往往会变差。
2. Learning Rate Scheduling:Warm Up
总体思路:先增大Learning rate再减小。
这个方法听起来很神奇,出现在很多早期的论文中。比如BERT模型的训练往往要用到warm up。
早在2015年的一篇关于Residual Network(残差神经网络)的论文中就出现这一技术,Transformer也运用了warm up。
Warm Up有效的一种可能解释
目前,这一问题仍需要探讨。这里提供了一个可能的解释
中σ是一个统计的结果,必须有足够多的数据才能得到较精准的值,所以一开始不要让参数离开初始位置太远,设置小的η,来“探索”error surface的“情报”,收集σ的统计数据,当σ比较精准后再提高Learning rate。