优化器简介

1、SGD

随机梯度下降。

  • 随机的意思是随机选取一个batch进行梯度更新

1.1、更新过程

  • 学习率 ϵ k \epsilon_k ϵk
  • 梯度估计
    g ^ = 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ) = 1 m ∂ L ∂ θ \begin{aligned} \hat{g}& = \frac{1}{m} \nabla_{\theta}\sum_iL(f(x^{(i)};\theta), y) \\ &=\frac{1}{m}\frac{\partial{L}}{\partial{\theta}} \end{aligned} g^=m1θiL(f(x(i);θ),y)=m1θL
  • 梯度更新
    g t = g t − 1 − ϵ k g ^ g_t = g_{t-1} - \epsilon_k\hat{g} gt=gt1ϵkg^

1.2、优化

保证SGD收敛的一个充分条件是:(这里还不会证明
∑ k = 1 ∞ ϵ k = ∞ ∑ k = 1 ∞ ϵ k 2 = 0 \begin{aligned} &\sum_{k=1}^{\infty}\epsilon_k = \infty\\ &\sum_{k=1}^{\infty}\epsilon_k^2 = 0 \end{aligned} k=1ϵk=k=1ϵk2=0

  • 实践中,一般会采用线性衰减学习率,知道第 τ \tau τ次迭代。
    ϵ k = ( 1 − α ) ϵ 0 + α ϵ τ \epsilon_k = (1-\alpha)\epsilon_0 + \alpha\epsilon_{\tau} ϵk=(1α)ϵ0+αϵτ
    其中, τ = k τ \tau=\frac{k}{\tau} τ=τk,在第τ步迭代后,一般使 ϵ \epsilon ϵ保持常数。 ϵ τ \epsilon_{\tau} ϵτ一般设为 ϵ 0 \epsilon_0 ϵ0的1%
  • 研究优化算法的收敛率,一般会衡量额外误差:(这里还不理解
    J ( θ ) − m i n θ J ( θ ) J(\theta)-min_{\theta}J(\theta) J(θ)minθJ(θ)
  • SGD应用于凸问题时,k步迭代后的额外误差量级是 O ( 1 k ) O(\frac{1}{\sqrt{k}}) O(k 1),强凸情况下是 O ( 1 k ) O(\frac{1}{k}) O(k1)

ps:强凸问题。 f ( x ) − m 2 ∣ ∣ x ∣ ∣ 2 f(x)-\frac{m}{2}||x||^2 f(x)2mx2是一个凸函数,也就是说,f(x)是凸性度量为m的强凸函数。

2、动量

动量法旨在加速学习,特别是处理高曲率、小但一致的梯度或是带噪声的梯度

  • 动量法积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动

2.1、动量法更新

超参数 α \alpha α决定了之前梯度的贡献,衰减得有多快。更新规则如下:
v = α v − ϵ ∇ θ ( 1 m ∑ i = 1 m L ( f ( x ( i ) ; θ ) ) , y ( i ) ) θ = θ + v \begin{aligned} & v = \alpha v-\epsilon\nabla_{\theta}(\frac{1}{m}\sum^m_{i=1}L(f(x^{(i)};\theta)),y^{(i)})\\ & \theta=\theta+v \end{aligned} v=αvϵθ(m1i=1mL(f(x(i);θ)),y(i))θ=θ+v

2.2、动量法的步长

不使用动量法时,步长是梯度范数乘以学习率( ϵ 1 m ∂ L ∂ θ \epsilon \frac{1}{m}\frac{\partial L}{\partial \theta} ϵm1θL),引入动量后,步长取决于梯度序列的大小和排列。当许多连续的梯度指向相同方向时,步长最大。如果动量算法总是观测到梯度g,那么他会在方向-g上不停加速,直到达到最终速度,其中步长大小为:
ϵ ∣ ∣ g ∣ ∣ 1 − α \begin{aligned} &\frac{\epsilon ||g||}{1-\alpha} \\ \end{aligned} 1αϵg
上式证明:
v = α v − ϵ g = α n v 0 − α n − 1 ϵ g − α n − 2 ϵ g − . . . − α ϵ g − ϵ g \begin{aligned} v &= \alpha v -\epsilon g \\ &=\alpha ^n v_0 - \alpha ^{n-1}\epsilon g - \alpha ^{n-2}\epsilon g - ...- \alpha \epsilon g - \epsilon g \end{aligned} v=αvϵg=αnv0αn1ϵgαn2ϵg...αϵgϵg
利用等比数列求和:
v = α n v 0 − ( α n − 1 ) ϵ g α − 1 v = \alpha ^n v_0 - \frac{(\alpha ^ n - 1)\epsilon g}{\alpha - 1} v=αnv0α1(αn1)ϵg
因为 α n → ∞ \alpha ^ n \rarr \infty αn,所以 v → ϵ g α − 1 v\rarr \frac{\epsilon g}{\alpha-1} vα1ϵg,步长为v的绝对值,为 ϵ ∣ ∣ g ∣ ∣ 1 − α \frac{\epsilon ||g||}{1-\alpha} 1αϵg

  • 因此,将动量的超参数视为 1 1 − α \frac{1}{1-\alpha} 1α1有助于理解,α=0.9对应着最大速度10倍于梯度下降算法。
  • 实践中,阿尔法一般取值为0.5,0.9,0.99,和学习率一样,α也会随着时间不短调整,一般初始值是一个比较小的值,随后慢慢变大。

2.3、Nesterov动量

Nesterov动量法在标准动量方法中增加了一个校正因子,来增加收敛速度。
计算方法:
θ ~ = θ + α v g = 1 m ∇ θ ∑ i L ( f ( x ( i ) , θ ~ ) , y ( i ) ) v = α v − ϵ g θ = θ + v \begin{aligned} \tilde \theta &=\theta + \alpha v\\ g &= \frac{1}{m}\nabla_{\theta}\sum_iL(f(x^{(i)},\tilde \theta), y^{(i)})\\ v & = \alpha v - \epsilon g\\ \theta & = \theta + v \end{aligned} θ~gvθ=θ+αv=m1θiL(f(x(i),θ~),y(i))=αvϵg=θ+v

3、学习率自适应

对每个参数设置不同的学习率,在整个学习过程中,自动适应这些学习率是有道理的。

3.1、AdaGrad

算法缩放每个参数反比于其所有梯度历史平方指总和的平方根,效果是损失大的参数,有一个大的学习率,损失小的参数有一个小的学习率。净效果是在更为平缓的倾斜方向会取得较大的进步(较大进步的意思是,在平缓的倾斜方向上,学习率减小,以使模行可以得到最优解)。

缺点:梯度平方和的累积,导致步长减少过快,可能提前结束学习。

  • 设置小常数 δ \delta δ,为了数值稳定,大约设为 1 0 − 7 10^{-7} 107
  • 初始化梯度累计变量 r = 0 r=0 r=0
  • 更新参数如下:

g = 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ) r = r + g ⊙ g Δ θ = − ϵ δ + r ⊙ g θ = θ + Δ θ \begin{aligned} g& = \frac{1}{m} \nabla_{\theta}\sum_iL(f(x^{(i)};\theta), y) \\ r&=r+g\odot g\\ \Delta \theta&=-\frac{\epsilon}{\delta+\sqrt r}\odot g \\ \theta &=\theta + \Delta \theta \end{aligned} grΔθθ=m1θiL(f(x(i);θ),y)=r+gg=δ+r ϵg=θ+Δθ

3.2、RMSProp

针对AdaGrad的梯度勒紧问题,RMSProp引入指数衰减平均以丢弃遥远过去的历史。

  • 设置衰减速率 ρ \rho ρ
  • 设置小常数 δ \delta δ,通常设置为 1 0 − 6 10^{-6} 106
  • 初始化累积变量 r = 0 r=0 r=0
  • 更新过程如下:
    g = 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ) r = ρ r + ( 1 − ρ ) g ⊙ g Δ θ = − ϵ r + δ ⊙ g θ = θ + Δ θ \begin{aligned} g& = \frac{1}{m} \nabla_{\theta}\sum_iL(f(x^{(i)};\theta), y) \\ r& = \rho r + (1-\rho)g\odot g \\ \Delta \theta & = -\frac{\epsilon}{\sqrt {r+\delta}}\odot g \\ \theta & = \theta + \Delta \theta \end{aligned} grΔθθ=m1θiL(f(x(i);θ),y)=ρr+(1ρ)gg=r+δ ϵg=θ+Δθ
    采用Nesterov动量的RMSProp算法
  • 设置衰减速率 ρ \rho ρ,动量系数 α \alpha α
  • 更新过程如下:
    θ ^ = θ + α v g = 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ^ ) , y ) r = ρ r + ( 1 − ρ ) g ⊙ g v = α v − ϵ r ⊙ g θ = θ + v \begin{aligned} \hat \theta & = \theta +\alpha v \\ g & = \frac{1}{m} \nabla_{\theta}\sum_iL(f(x^{(i)};\hat \theta), y) \\ r & = \rho r + (1-\rho)g \odot g \\ v & = \alpha v - \frac{\epsilon}{\sqrt r}\odot g \\ \theta & = \theta +v \end{aligned} θ^grvθ=θ+αv=m1θiL(f(x(i);θ^),y)=ρr+(1ρ)gg=αvr ϵg=θ+v

3.3、Adam

Adam的实现在RMSProp的基础上,增加了一阶矩估计,并修正偏差。

  • 设定指数衰减速率, ρ 1 , ρ 2 ∈ [ 0 , 1 ) \rho_1,\rho_2 \in[0, 1) ρ1,ρ2[0,1),建议默认为0.9和0.999
  • 用于数值稳定的小常数 δ \delta δ,建议默认为 1 0 − 8 10^{-8} 108
  • 初始化一阶和二阶矩变量s=0,r=0
  • 更新过程如下:
    g = 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ) s = ρ 1 s + ( 1 − ρ 1 ) g r = ρ 2 r + ( 1 − ρ 2 ) g ⊙ g s ^ = s 1 − ρ 1 t r ^ = r 1 − ρ 2 t Δ θ = − ϵ s ^ r ^ + δ θ = θ + Δ θ \begin{aligned} g& = \frac{1}{m} \nabla_{\theta}\sum_iL(f(x^{(i)};\theta), y) \\ s &=\rho_1 s +(1-\rho_1)g\\ r& = \rho_2 r + (1-\rho_2)g\odot g \\ \hat s & = \frac{s}{1-\rho_1^t} \\ \hat r & = \frac{r}{1-\rho_2^t}\\ \Delta \theta & = -\frac{\epsilon \hat s}{\sqrt {\hat r}+\delta} \\ \theta & = \theta + \Delta \theta \end{aligned} gsrs^r^Δθθ=m1θiL(f(x(i);θ),y)=ρ1s+(1ρ1)g=ρ2r+(1ρ2)gg=1ρ1ts=1ρ2tr=r^ +δϵs^=θ+Δθ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值