深度模型中的优化 - 具有自适应学习速率的算法篇

52 篇文章 0 订阅
22 篇文章 0 订阅

序言

在深度学习中,模型优化是提升模型性能与收敛速度的关键环节。传统固定学习率的优化方法,如梯度下降法,往往难以适应复杂的训练过程,易导致学习率过大引发震荡或学习率过小导致收敛缓慢。为此,具有自适应学习速率的优化算法应运而生,它们能够根据训练过程中的梯度变化动态调整学习率,从而提高模型的训练效率和性能。

具有自适应学习速率的算法

  • 神经网络研究员早就意识到学习速率肯定是难以设置的超参数之一,因为它对模型的性能有显著的影响。正如我们在数值计算篇 - 基于梯度的优化方法神经网络优化中的挑战篇中探讨的,损失通常高度敏感于参数空间中的某些方向,而不敏感于其他。 动量算法可以在一定程度缓解这些问题,但这样做的代价是引入了另一个超参数。在这种情况下,自然会问有没有其他方法。如果我们相信方向敏感度有些轴对齐,那么每个参数设置不同的学习速率,在整个学习过程中自动适应这些学习速率便是有道理的。
  • delta-bar-delta算法 ( Jacobs, 1988 \text{Jacobs, 1988} Jacobs, 1988)是一个早期的在训练时适应模型参数单独学习速率的启发式方法。该方法基于一个很简单的想法,如果损失对于某个给定模型参数的偏导保持相同的符号,那么学习速率应该增加。如果对于该参数的偏导变化了符号,那么学习速率应减小。当然,这种方法只能应用于全 batch \text{batch} batch优化中。
  • 最近,一些增量(或者基于 minibatch \text{minibatch} minibatch)的算法被提出适应模型参数的学习速率。这节将简要回顾一些这种算法。

A d a G r a d \bold{AdaGrad} AdaGrad

  • A d a G r a d \bold{AdaGrad} AdaGrad算法,如算法1独立地适应所有模型参数的学习速率,放缩每个参数反比于其所有梯度历史平方值总和的平方根( Duchi et al., 2011 \text{Duchi et al., 2011} Duchi et al., 2011)。
    • 具有损失最大偏导的参数相应地有一个快速下降的学习速率,而具有小偏导的参数在学习速率上有相对较小的下降。
    • 净效果是在参数空间中更为平缓的倾斜方向会取得更大的进步。
  • 在凸优化背景中, AdaGrad \text{AdaGrad} AdaGrad算法具有一些令人满意的理论性质。然而,经验上已经发现,对于训练深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习速率过早和过量的减小。 AdaGrad \text{AdaGrad} AdaGrad在某些深度学习模型上效果不错,但不是全部。

R M S P r o p \bold{RMSProp} RMSProp

  • R M S P r o p \bold{RMSProp} RMSProp算法(Hinton, 2012)修改 AdaGrad \text{AdaGrad} AdaGrad以在非凸设定下效果更好,改变梯度积累为指数加权的移动均值。
    • AdaGrad \text{AdaGrad} AdaGrad旨在应用于凸问题时快速收敛。
    • 当应用于非凸函数训练神经网络时,学习轨迹可能穿过了很多不同的结构,最终到达一个局部是凸碗的区域。
    • AdaGrad \text{AdaGrad} AdaGrad 根据平方梯度的整个历史收缩学习速率,可能使得学习速率在达到这样的凸结构前就变得太小了。
    • RMSProp \text{RMSProp} RMSProp使用指数衰减平均以丢弃遥远过去的历史,使其能够在找到凸碗状结构后快速收敛,它就像一个初始化于该碗状结构的 AdaGrad \text{AdaGrad} AdaGrad算法实例。
  • RMSProp \text{RMSProp} RMSProp的标准形式如算法2结合 Nesterov \text{Nesterov} Nesterov动量的形式如算法3所示。相比于 AdaGrad \text{AdaGrad} AdaGrad,使用移动均值引入了一个新的超参数 ρ \rho ρ,控制移动平均的长度范围。
  • 经验上, RMSProp \text{RMSProp} RMSProp已被证明是一种有效且实用的深度神经网络优化算法。目前它是深度学习从业者经常采用的优化方法之一。

A d a m \bold{Adam} Adam

  • A d a m \bold{Adam} Adam( Kingma and Ba, 2014 \text{Kingma and Ba, 2014} Kingma and Ba, 2014)是另一种学习速率自适应的优化算法,如算法4所示。” Adam \text{Adam} Adam“这个名字派生自短语” Adaptive moments \text{Adaptive moments} Adaptive moments“。
    • 早期算法背景下,它也许最好被看作结合 RMSProp \text{RMSProp} RMSProp和具有一些重要区别的动量的变种。
    • 首先,在 Adam \text{Adam} Adam中, 动量直接并入了梯度一阶矩(带指数加权)的估计。将动量加入 RMSProp \text{RMSProp} RMSProp最直观的方法是应用动量于缩放后的梯度。结合重放缩的动量使用没有明确的理论动机。
    • 其次, Adam \text{Adam} Adam包括负责原点初始化的一阶矩(动量项)和(非中心的)二阶矩的估计修正偏置(算法4)。 RMSProp \text{RMSProp} RMSProp也采用了(非中心的)二阶矩估计,然而缺失了修正因子。
    • 因此,不像 Adam \text{Adam} Adam RMSProp \text{RMSProp} RMSProp二阶矩估计可能在训练初期有很高的偏置。 Adam \text{Adam} Adam通常被认为对超参数的选择相当鲁棒,尽管学习速率有时需要从建议的默认修改。

选择正确的优化算法

  • 我们讨论了一系列算法,通过自适应每个模型参数的学习速率以解决优化深度模型中的难题。此时,一个自然的问题是:该选择哪种算法呢?

  • 遗憾的是,目前在这一点上没有达成共识。

    • Schaul et al. (2014) \text{Schaul et al. (2014)} Schaul et al. (2014)展示了许多优化算法在大量学习任务上的价值比较。
    • 虽然结果表明,具有自适应学习速率(由 RMSProp \text{RMSProp} RMSProp AdaDelta \text{AdaDelta} AdaDelta代表的算法族表现得相当鲁棒,但没有单一的算法表现为最好的。
  • 目前,最流行的活跃使用的优化算法包括 SGD \text{SGD} SGD,具动量的 SGD \text{SGD} SGD RMSProp \text{RMSProp} RMSProp,具动量的 RMSProp \text{RMSProp} RMSProp AdaDelta \text{AdaDelta} AdaDelta Adam \text{Adam} Adam

  • 此时,选择哪一个算法似乎主要取决于使用者对算法的熟悉程度(以便调节超参数)。

  • 算法1: AdaGrad \text{AdaGrad} AdaGrad算法


    算法1描述 AdaGrad \text{AdaGrad} AdaGrad算法


    伪代码
    R e q u i r e \bold{Require} Require: 全局学习速率 ϵ \epsilon ϵ
    R e q u i r e \bold{Require} Require: 初始参数 θ \boldsymbol{\theta} θ
    R e q u i r e \bold{Require} Require: 小常数 δ \delta δ,为了数值稳定大约设为 1 0 − 7 10^{-7} 107
    \quad 初始化梯度累积变量 r = 0 \boldsymbol{r}=0 r=0
    w h i l e \quad\bold{while} while 没有达到停止准则 d o \bold{do} do
    \qquad 从训练集中采包含 m m m个样本 { x ( i ) , … , x ( m ) } \{\boldsymbol{x}^{(i)},\dots,\boldsymbol{x}^{(m)}\} {x(i),,x(m)} minibatch \text{minibatch} minibatch,对应目标为 y ( i ) \boldsymbol{y}^{(i)} y(i)
    \qquad 计算梯度: g ← 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g}\gets\frac{1}{m}\nabla_{\boldsymbol{\theta}}\sum_i L(f(\boldsymbol{x}^{(i)};\boldsymbol{\theta}),\boldsymbol{y}^{(i)}) gm1θiL(f(x(i);θ),y(i))
    \qquad 累积平方梯度: r ← r + g ⊙ g \boldsymbol{r}\gets\boldsymbol{r}+\boldsymbol{g}\odot\boldsymbol{g} rr+gg
    \qquad 计算更新: Δ θ ← − ϵ δ + r ⊙ g \Delta\boldsymbol{\theta}\gets-\frac{\epsilon}{\delta+\sqrt{\boldsymbol{r}}}\odot\boldsymbol{g} Δθδ+r ϵg
    \qquad 应用更新: θ ← θ + Δ θ \boldsymbol{\theta}\gets\boldsymbol{\theta}+\Delta\boldsymbol{\theta} θθ+Δθ
    e n d \quad\bold{end} end w h i l e \bold{while} while


  • 算法2: RMSProp \text{RMSProp} RMSProp算法


    算法2描述 RMSProp \text{RMSProp} RMSProp算法


    伪代码
    R e q u i r e \bold{Require} Require: 全局学习速率 ϵ \epsilon ϵ,衰减速率 ρ \rho ρ
    R e q u i r e \bold{Require} Require: 初始参数 θ \boldsymbol{\theta} θ
    R e q u i r e \bold{Require} Require: 小常数 δ \delta δ,为了数值稳定大约设为 1 0 − 6 10^{-6} 106(用于被小数除时的数值稳定)
    \quad 初始化累积变量 r = 0 \boldsymbol{r}=0 r=0
    w h i l e \quad\bold{while} while 没有达到停止准则 d o \bold{do} do
    \qquad 从训练集中采包含 m m m个样本 { x ( i ) , … , x ( m ) } \{\boldsymbol{x}^{(i)},\dots,\boldsymbol{x}^{(m)}\} {x(i),,x(m)} minibatch \text{minibatch} minibatch,对应目标为 y ( i ) \boldsymbol{y}^{(i)} y(i)
    \qquad 计算梯度: g ← 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g}\gets\frac{1}{m}\nabla_{\boldsymbol{\theta}}\sum_i L(f(\boldsymbol{x}^{(i)};\boldsymbol{\theta}),\boldsymbol{y}^{(i)}) gm1θiL(f(x(i);θ),y(i))
    \qquad 累积平方梯度: r ← ρ r + ( 1 − ρ ) g ⊙ g \boldsymbol{r}\gets\rho\boldsymbol{r}+(1-\rho)\boldsymbol{g}\odot\boldsymbol{g} rρr+(1ρ)gg
    \qquad 计算参数更新: Δ θ = − ϵ δ + r ⊙ g \Delta\boldsymbol{\theta}=-\frac{\epsilon}{\delta+\sqrt{\boldsymbol{r}}}\odot\boldsymbol{g} Δθ=δ+r ϵg 1 δ + r \frac{1}{\delta+\sqrt{\boldsymbol{r}}} δ+r 1逐元素应用)
    \qquad 应用更新: θ ← θ + Δ θ \boldsymbol{\theta}\gets\boldsymbol{\theta}+\Delta\boldsymbol{\theta} θθ+Δθ
    e n d \quad\bold{end} end w h i l e \bold{while} while


  • 算法3:使用 Nesterov动量的 \text{Nesterov}动量的 Nesterov动量的 RMSProp \text{RMSProp} RMSProp算法


    算法3描述:使用 Nesterov动量的 \text{Nesterov}动量的 Nesterov动量的 RMSProp \text{RMSProp} RMSProp算法


    伪代码
    R e q u i r e \bold{Require} Require: 全局学习速率 ϵ \epsilon ϵ,衰减速率 ρ \rho ρ,动量系数 α \alpha α
    R e q u i r e \bold{Require} Require: 初始参数 θ \boldsymbol{\theta} θ,初始速度 v \boldsymbol{v} v
    \quad 初始化累积变量 r = 0 \boldsymbol{r}=0 r=0
    w h i l e \quad\bold{while} while 没有达到停止准则 d o \bold{do} do
    \qquad 从训练集中采包含 m m m个样本 { x ( i ) , … , x ( m ) } \{\boldsymbol{x}^{(i)},\dots,\boldsymbol{x}^{(m)}\} {x(i),,x(m)} minibatch \text{minibatch} minibatch,对应目标为 y ( i ) \boldsymbol{y}^{(i)} y(i)
    \qquad 计算临时更新: θ ~ ← θ + α v \tilde{\theta}\gets\boldsymbol{\theta}+\alpha\boldsymbol{v} θ~θ+αv
    \qquad 计算梯度: g ← 1 m ∇ θ ~ ∑ i L ( f ( x ( i ) ; θ ~ ) , y ( i ) ) \boldsymbol{g}\gets\frac{1}{m}\nabla_{\tilde{\boldsymbol{\theta}}}\sum_i L(f(\boldsymbol{x}^{(i)};\tilde{\boldsymbol{\theta}}),\boldsymbol{y}^{(i)}) gm1θ~iL(f(x(i);θ~),y(i))
    \qquad 累积梯度: r ← ρ r + ( 1 − ρ ) g ⊙ g \boldsymbol{r}\gets\rho\boldsymbol{r}+(1-\rho)\boldsymbol{g}\odot\boldsymbol{g} rρr+(1ρ)gg
    \qquad 计算速度更新: v ← α v − ϵ r ⊙ g \boldsymbol{v}\gets\alpha\boldsymbol{v}-\frac{\epsilon}{\sqrt{\boldsymbol{r}}}\odot\boldsymbol{g} vαvr ϵg 1 r \frac{1}{\sqrt{\boldsymbol{r}}} r 1逐元素应用)
    \qquad 应用更新: θ ← θ + v \boldsymbol{\theta}\gets\boldsymbol{\theta}+\boldsymbol{v} θθ+v
    e n d \quad\bold{end} end w h i l e \bold{while} while


  • 算法4: Adam \text{Adam} Adam算法


    算法4描述 Adam \text{Adam} Adam算法


    伪代码
    R e q u i r e \bold{Require} Require: 步长 ϵ \epsilon ϵ(建议默认为: 0.001 0.001 0.001
    R e q u i r e \bold{Require} Require: 矩估计的指数衰减速率, ρ 1 \rho_1 ρ1 ρ 2 \rho_2 ρ2在区间 [0,1) \text{[0,1)} [0,1)内。(建议默认为:分别为 0.9 0.9 0.9 0.999 0.999 0.999
    R e q u i r e \bold{Require} Require: 用于数值稳定的小常数 δ \delta δ(建议默认为: 1 0 − 8 10^{-8} 108
    R e q u i r e \bold{Require} Require: 初始参数 θ \boldsymbol{\theta} θ
    \quad 初始化一阶和二阶矩变量 s = 0 , r = 0 \boldsymbol{s}=0,\boldsymbol{r}=0 s=0,r=0
    \quad 初始化时间步 t = 0 t=0 t=0
    w h i l e \quad\bold{while} while 没有达到停止准则 d o \bold{do} do
    \qquad 从训练集中采包含 m m m个样本 { x ( i ) , … , x ( m ) } \{\boldsymbol{x}^{(i)},\dots,\boldsymbol{x}^{(m)}\} {x(i),,x(m)} minibatch \text{minibatch} minibatch,对应目标为 y ( i ) \boldsymbol{y}^{(i)} y(i)
    \qquad 计算梯度: g ← 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g}\gets\frac{1}{m}\nabla_{\boldsymbol{\theta}}\sum_i L(f(\boldsymbol{x}^{(i)};\boldsymbol{\theta}),\boldsymbol{y}^{(i)}) gm1θiL(f(x(i);θ),y(i))
    t ← t + 1 \qquad t\gets t+1 tt+1
    \qquad 更新有偏一阶矩估计: s ← ρ 1 s + ( 1 − ρ 1 ) g \boldsymbol{s}\gets\rho_1\boldsymbol{s}+(1-\rho_1)\boldsymbol{g} sρ1s+(1ρ1)g
    \qquad 更新有偏二阶矩估计: r ← ρ 2 r + ( 1 − ρ 2 ) g ⊙ g \boldsymbol{r}\gets\rho_2\boldsymbol{r}+(1-\rho_2)\boldsymbol{g}\odot\boldsymbol{g} rρ2r+(1ρ2)gg
    \qquad 修正一阶矩的偏差: s ^ ← s 1 − ρ 1 t \hat{\boldsymbol{s}}\gets\frac{\boldsymbol{s}}{1-\rho_1^t} s^1ρ1ts
    \qquad 修正二阶矩的偏差: r ^ ← r 1 − ρ 2 t \hat{\boldsymbol{r}}\gets\frac{\boldsymbol{r}}{1-\rho_2^t} r^1ρ2tr
    \qquad 计算更新: Δ θ = − ϵ s ^ r ^ + δ \Delta\boldsymbol{\theta}=-\epsilon\frac{\hat{\boldsymbol{s}}}{\sqrt{\hat{\boldsymbol{r}}}+\delta} Δθ=ϵr^ +δs^ (逐元素应用操作)
    \qquad 应用更新: θ ← θ + Δ θ \boldsymbol{\theta}\gets\boldsymbol{\theta}+\Delta\boldsymbol{\theta} θθ+Δθ
    e n d \quad\bold{end} end w h i l e \bold{while} while


总结

  • 自适应学习速率优化算法,如 AdaGrad \text{AdaGrad} AdaGrad RMSprop \text{RMSprop} RMSprop Adam \text{Adam} Adam AdaDelta \text{AdaDelta} AdaDelta等,通过累积历史梯度信息,智能地调整每个参数的学习率。

    • AdaGrad \text{AdaGrad} AdaGrad通过累积梯度平方的平均值调整学习率,适用于稀疏特征;
    • RMSprop \text{RMSprop} RMSprop则通过指数加权平均的方式改进了 AdaGrad \text{AdaGrad} AdaGrad,解决了学习率衰减过快的问题;
    • Adam \text{Adam} Adam结合了动量和自适应学习率,综合考虑梯度的一阶矩和二阶矩估计,具有较快的收敛速度和较好的性能;
    • AdaDelta \text{AdaDelta} AdaDelta则无需手动设置学习率,通过移动平均梯度的二阶矩估计自动调整。
  • 这些算法在深度学习中广泛应用,显著提升了模型的训练效果和性能,是深度学习优化领域的重要研究方向。

  • 未来,随着深度学习技术的不断发展,自适应学习速率优化算法将持续演进,为深度学习模型的优化提供更加有力的支持。

往期内容回顾

应用数学与机器学习基础 - 数值计算篇
深度模型中的优化 - 神经网络优化中的挑战篇

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绎岚科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值