[Datawhale AI 夏令营] x [李宏毅苹果书] —— 2. 自适应学习率

零、文章引用与致谢

  非常感谢 DataWhale 举办此次 AI夏令营,提供了这样一个宝贵的平台,让许多对深度学习、大模型感兴趣的同学能够聚集在一起,共同探讨和学习。这样的活动不仅促进了学术交流,还为参与者提供了扩展视野、激发创新思维的机会。希望未来能有更多这样的活动,进一步推动深度学习技术的发展和应用!

DataWhale 官网: https://www.datawhale.club/home

DataWhale 学习指南: https://linklearner.com/activity/16/15/59

DataWhale 学习视频: https://www.bilibili.com/video/BV1JA411c7VT/?p=7

一、自适应学习率

  回顾上文,局部极小值鞍点是阻碍参数优化的两个难点,但是,临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。正常情况下,在训练一个网络的时候,损失函数会随着参数不断的更新,越来越小,直到不再下降;此时,我们常常会仍为是遇到了零界点,但是,在分析其梯度时会发现问题。如下图所示,损失函数不再下降,但是梯度的范数,并没有真的变得很小,即没有接近于零。
图1

图2

  出现这种情况,是由于学习率设置的太大,参数沿梯度方向下降的太快,导致越过了山谷,到达了山谷的另一侧,然后梯度在山谷的两个谷壁间,不断地来回 “震荡”,如下图所示,损失函数不再下降,但是也没有到达局部极小值或鞍点。
图3

  那么,如果我们将学习率设置的尽可能小呢?举个例子,我们有两个参数 wb,这两个参数值不一样的时候,损失值也不一样,最终形成如下图所示的误差表面。其在横轴的方向梯度非常小,坡度的变化非常小,非常平坦;其在纵轴的方向梯度变化非常大,误差表面的坡度非常陡峭
图4

  初始设置学习率 η = 10−2,如下图左所示,参数的横坐标向山谷靠拢,但是纵坐标在山壁的两端不断地震荡。我们将学习率更新为 η = 10−7,如下图右所示,参数的纵坐标不再震荡,向山谷靠拢,但是横坐标不再前进,或者说前进的非常缓慢,在 BC 段进行了 10万次 更新!
图5

  因此,学习率太大或者太小都会影响参数的训练,那么有没有更加优雅的方式呢?为每一个参数都量身定制一个学习率,如果在某一个方向上,梯度的值很小,非常平坦,我们会希望学习率调大一点;如果在某一个方向上非常陡峭,坡度很大,我们会希望学习率可以设得小一点。

二、AdaGrad

   AdaGrad (Adaptive Gradient) 是典型的自适应学习率方法,其能够根据梯度大小自动调整学习率。AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。
   我们来看一下 AdaGrad 与默认的参数更新公式之间的区别:

  • 默认情况下,梯度下降更新某个参数 θ t i \pmb\theta_t^i θti 的过程为:
    θ t + 1 i ← θ t i − η g t i \mathbf{\pmb\theta}_{t+1}^i \leftarrow \mathbf{\pmb\theta}_t^i - \pmb\eta \mathbf{g}_t^i θt+1iθtiηgti
  • 其中,学习率 η为固定值,要实现随着参数定制化的学习率,可以将学习率设置为: η σ t i \frac{\pmb\eta}{\pmb\sigma_{t}^{i}} σtiη ,参数更新公式也更新为:
    θ t + 1 i ← θ t i − η σ t i g t i \boldsymbol{\pmb\theta}_{t+1}^{i} \leftarrow \boldsymbol{\pmb\theta}_{t}^{i} - \frac{\pmb\eta}{\pmb\sigma_{t}^{i}} \boldsymbol{g}_{t}^{i} θt+1iθtiσtiηgti

   学习率 η = η σ t i \frac{\pmb\eta}{\pmb\sigma_{t}^{i}} σtiη 中, η \pmb\eta η 为默认学习率, σ t i \pmb\sigma_{t}^{i} σti 为可变参数,由上一步的梯度计算而来,{这一部分公式较多,详情可见学习视频和指南},会随着梯度的变化而变化,从而实现自适应学习率。
σ 0 i = ( g 0 i ) 2 = ∣ g 0 i ∣ \pmb\sigma_0^i = \sqrt{\left(\boldsymbol{g}_0^i\right)^2} = \left|\boldsymbol{g}_0^i\right| σ0i=(g0i)2 = g0i
   最终结果如下图所示,参数的梯度值较小时,算出来的 σ t i \pmb\sigma_{t}^{i} σti 就小,进而学习率就大,步伐幅度就比较大;参数的梯度值较大时,算出来的 σ t i \pmb\sigma_{t}^{i} σti 就小,进而学习率就小,步伐幅度就比较小。
图6

三、RMSProp

   RMSprop (Root Mean Squared propagation) 是在 AdaGrad 的基础上更进一步,考虑到同一个参数的同个方向,学习率也需要动态调整。如下图所示,误差表面中,如果考虑横轴方向,绿色箭头处坡度比较陡峭,需要较小的学习率,但是走到红色箭头处,坡度变得平坦了起来,需要较大的学习率。
图7

   RMSpropAdaGrad 的区别在于 σ t i \pmb\sigma_{t}^{i} σti 的计算方式不同:

  • 第一步计算初始 σ t i \pmb\sigma_{t}^{i} σti 时,两者公式相同:
    σ 0 i = ( g 0 i ) 2 = ∣ g 0 i ∣ \pmb\sigma_0^i = \sqrt{\left(\boldsymbol{g}_0^i\right)^2} = \left|\boldsymbol{g}_0^i\right| σ0i=(g0i)2 = g0i
  • 第二步计算后续 σ t i \pmb\sigma_{t}^{i} σti 时, RMSprop 引入了超参数,0 < α < 1:
    σ 1 i = α ( σ 0 i ) 2 + ( 1 − α ) ( g 1 i ) 2 \pmb\sigma_1^i = \sqrt{\pmb\alpha \left(\pmb\sigma_0^i\right)^2 + \left(1 - \pmb\alpha\right) \left(\boldsymbol{g}_1^i\right)^2} σ1i=α(σ0i)2+(1α)(g1i)2

  在 AdaGrad 计算均方根的时候,每一个梯度都有同等的重要性,但在 RMSprop 中可以自己调整现在的这个梯度的重要性。与之相比AdaGrad 反应比较慢,而 RMSprop 会把 α 设小一点,让新的、刚看到的梯度的影响比较大,很快地让 σ t i \pmb\sigma_{t}^{i} σti 的值变大,很快地让步伐变小;也可以让 σ t i \pmb\sigma_{t}^{i} σti 的值变小,很快地让步伐变大。通俗易懂的说,RMSprop 可以很快地 “踩刹车” 或者 “踩油门”

四、Adam

   Adam (Adaptive moment estimation) 是在 RMSprop 的基础上,进一步考虑了动量法,其使用动量作为参数更新方向,并且能够自适应调整学习率。而且,现有的 PyTorchtensorflow 等模型中,都内置了 Adam 优化器,只需要预设一些超参数就可以使用。

五、学习率调度

   继续使用最开始的例子,如下图所示,AdaGrad 可以解决横向梯度无法前进的问题,但是在 BC 段的末尾,由于纵轴方向累积了很小的 σ t i \pmb\sigma_{t}^{i} σti ,学习率无法很快变小,进而出现了“震荡”问题。
图8

   学习率调度 (learning rate scheduling) 可以解决这一问题。其中,最常见的策略是学习率衰减 (earning rate decay),也称为学习率退火 (learning rate annealing)。随着参数的不断更新,让 η 越来越小。在上图所示的红圈的地方,虽然步伐很大,但 η 变得非常小,步伐乘上 η 就变小了,就可以慢慢地走到终点,最终结果如下图所所示。

图9

   此外,另一个经典的学习率调度的方式———预热,也被广泛应用。由于学习率的自适应,初始默认学习率通常会很小,需要训练一段时间才能达到预期,可以通过学习率调度,让学习率先变大后变小,从而缩短这一过程所需的时间,减少训练成本。

六、总结与优化

   从最初的固定学习率,到最终的 Adam,自适应学习率的发展也经历了很长时间。虽然,当前的主流深度学习框架继承了很多优秀的优化器,只需设置超参数就可以使用,并且最终可以获得非常不错的结果。但是,深入学习自适应学习率的原理,对于建立牢固的知识体系还是非常重要的,希望大家耐心学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值