机器学习笔记Ⅲ-自动调整学习率、Adam算法
自动调整学习率 learning rate
在机器学习中,学习率是一个重要的超参数,决定了是否能准确找到最优点,下面以两种情况为例进行说明
(1)学习率比较大,参数在A点和B点之间来回跳跃,无法找到loss最低点
(2)误差曲面为一个凸面,特点是上下曲率很高,左右曲率很低。橙色叉叉处为最低点,初始点选在黑点处,如果学习率很高,参数就会在谷底两边跳跃,无法找到最低点,但如果学习率很低,参数在左右方向上移动的速度会非常慢,同样无法得到最低的loss。
因此仅设定一个固定的学习率自动调整学习率可能会无法高效的找到最小值,需要根据error surface的情况自动调整学习率
(1)均方根
将当前以及之前所有导数的加权平均值当作调整项来调整当前学习率,参数更新公式:
(2)RMS Prop
均方根计算学习率是给所有导数分配同样的权重,对当前曲率变化不敏感,因此对于同一参数不同区域曲率不一样的情况并不能很好的适用,如图从A到B过程学习率的调整反应较慢,PMSProp通过超参数调整当前导数与旧导数的权重,通过调整从而能对曲率的变化快速反应。
使用均方根算法对开头的例子进行学习率调整,发现结果并不完美,在更新参数W时,由于b基本不改变,使得不断累积,导致b已经找到比较理想的结果时在参数b的方向仍在不断震荡变化。
为了解决这个问题,可以采用learning rate scheduling方法,当随时间变化,使优化进行到后期,接近最优值时,参数移动的步长变小。
learning rate scheduling 有两种方式:
(1)学习率衰减(learning rate decay)
随时间呈下降趋势变化
(2)warm up
随时间先变大后变小,是一个统计量,在前期数据量比较小时,统计会出现比较大的偏差,可能会偏离初始值很远,因此前期随着统计量的增加逐渐变大
warm up参考:https://arxiv.org/abs/1908.03265
上图为采用learning rate scheduling进行参数更新的结果,解决了后期参数震荡问题。
Adam算法
Adam算法是一种最优化算法(optimization),根据笔记2和笔记3,我们知道了可以采用momentum的方式解决局部最小值、鞍点问题,可以采用RMSProp的方式改变学习率,Adam是将两种方法结合起来的optimizer,算法如下图所示: