机器学习 | 优化——调整学习率

阿里云2000元红包!本站用户参与享受九折优惠!

写在前面:

学习率\alpha 是神经网络优化时的重要超参数。在 梯度下降方法 中,学习率α的取值非常关键,如果过大就不会收敛,如果过小则收敛速度太慢。

本文将介绍一些改变学习率的方法,包括 学习率退火学习率预热周期性学习率调整

1. 学习率衰减 / 学习率退火

从经验上看,学习率在一开始要保持大些来保证收敛速度,在收敛到最优点附近时要小些以避免来回震荡。比较简单的学习率调整可以通过 学习率衰减(Learning Rate Decay)的方式来实现,也称为 学习率退火(Learning Rate Annealing)

假设初始化学习率为α_0,在第t次迭代时的学习率α_t。常用的衰减方式为可以设置为 按迭代次数 进行衰减。

常见的衰减方法有以下几种:

1.1 分段常数衰减(Piecewise Constant Decay)

分段常数衰减(Piecewise Constant Decay):即每经过T_1, T_2, · · · , T_m次迭
代将学习率衰减为原来的β_1, β_2, · · · , β_m倍,其中T_mβ_m<1为根据经验设置的 超参数

分段常数衰减 也称为 步衰减(Step Decay)


1.2 逆时衰减(Inverse Time Decay)

\alpha_{t}=\alpha_{0} \frac{1}{1+\beta \times t}

其中,\beta为衰减率。


1.3 指数衰减(Exponential Decay)

\alpha_{t}=\alpha_{0} \beta^{t}

其中,β < 1为衰减率。


1.4 自然指数衰减(Natural Exponential Decay)

\alpha_{t}=\alpha_{0} \exp (-\beta \times t)

其中β为衰减率。


1.5 余弦衰减(Cosine Decay)

\alpha_{t}=\frac{1}{2} \alpha_{0}\left(1+\cos \left(\frac{t \pi}{T}\right)\right)

其中,T为总的迭代次数。

最后,贴一张图片,直观感受一下这几种学习率衰减方法。

——图片来源:邱锡鹏:《神经网络与深度学习》

2. 学习率预热

小批量梯度下降方法 中,当批量大小的设置比较大时,通常需要比较大的学习率。但在刚开始训练时,由于参数是随机初始化的,梯度往往也比较大,在加上 比较大的初始学习率,会使得训练不稳定。

为了提高训练稳定性,我们可以 在最初几轮迭代时,采用比较小的学习率,等梯度下降到一定程度后再恢复到初始的学习率,这种方法称为 学习率预热(Learning Rate Warmup)。

一个常用的学习率预热方法是 逐渐预热(Gradual Warmup)。假设预热的迭代次数为T′,初始学习率为α_0,在预热过程中,每次更新的学习率为:

\alpha_{t}^{\prime}=\frac{t}{T^{\prime}} \alpha_{0}, \quad 1 \leq t \leq T^{\prime}

当预热过程结束,再选择一种学习率衰减方法来逐渐降低学习率。

3. 周期性学习率调整

为了使得 梯度下降方法 能够 逃离局部最小值或鞍点,一种经验性的方式是在训练过程中 周期性地增大学习率。虽然增加学习率可能短期内有损网络的收敛稳定性,但从长期来看有助于找到更好的局部最优解。

一般而言,当一个模型 收敛到一个平坦(Flat)的局部最小值 时,其 鲁棒性会更好,即 微小的参数变动不会剧烈影响模型能力;而当模型 收敛到一个尖锐(Sharp)的局部最小值 时,其 鲁棒性也会比较差。具备良好泛化能力的模型通常应该是鲁棒的,因此理想的局部最小值应该是平坦的。

周期性学习率调整 可以使得梯度下降方法在优化过程中 跳出尖锐的局部极小值,虽然会短期内会损害优化过程,但最终会收敛到更加理想的局部极小值。

下面介绍两种常见的周期性调整学习率的方法:循环学习率(CLR)带热重启的随机梯度下降(SGDR)

3.1 循环学习率(Cyclic Learning Rate)

一种简单的方法是使用循环学习率,即在让学习率在 一个区间内 周期性地增大和缩小

通常可以使用 线性缩放 来调整学习率,称为 三角循环学习率(Triangular Cyclic Learning Rate)。

假设 每个循环周期 的长度 相等,都为2ΔT,其中前ΔT步为学习率线性增大阶段,后ΔT步为学习率线性缩小阶段。

在第t次迭代时,其所在的循环周期数m为:

m=\left\lfloor 1+\frac{t}{2 \Delta T}\right\rfloor

其中,\lfloor\cdot\rfloor表示向下取整。

t次迭代的学习率为:

\alpha_{t}=\alpha_{\min }^{m}+\left(\alpha_{\max }^{m}-\alpha_{\min }^{m}\right)(\max (0,1-b))

其中α^m_{max}α^m_{min}分别为第m个周期中学习率的上界和下界,可以随着m的增大而逐渐降低。

b ∈ [0, 1]的计算为:

b=\left|\frac{t}{\Delta T}-2 m+1\right|

——图片来源:邱锡鹏:《神经网络与深度学习》

3.2 带热重启的随机梯度下降

带热重启的随机梯度下降(Stochastic Gradient Descent with Warm Restarts,SGDR)是用 热重启方式 来替代 学习率衰减 的方法。

学习率每间隔一定周期后,重新初始化为某个预先设定值,然后逐渐衰减。每次重启后模型参数不是从头开始优化,而是从重启前的参数基础上继续优化。

假设在梯度下降过程中重启M次,第m次重启在上次重启开始第T_m个回合后进行,T_m称为重启周期。在第m次重启之前,采用余弦衰减来降低学习率。

t次迭代的学习率为:

\alpha_{t}=\alpha_{\min }^{m}+\frac{1}{2}\left(\alpha_{\max }^{m}-\alpha_{\min }^{m}\right)\left(1+\cos \left(\frac{T_{\operatorname{cur}}}{T_{m}} \pi\right)\right)

其中α^m_{max}α^m_{min}分别为第m个周期中学习率的上界和下界,可以随着m的增大而逐渐降低;T_{cur}为从上次重启之后的回合(Epoch)数。T_{cur}可以取小数,比如0.1,0.2 等,这样可以在一个回合内部进行学习率衰减。重启周期T_m 可以随着重启次数逐渐增加,比如T_m = T_{m−1} × κ,其中κ ≥ 1为放大因子。

——图片来源:邱锡鹏:《神经网络与深度学习》

写在最后:

参考资料:

更多资料:

“文章合为时而著,歌诗合为事而作。”——白居易《与元九书》

知识尚浅,望前辈多多包涵,多多赐教。

https://www.jianshu.com/p/7311e7151661

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论