深度学习优化算法大全系列2: Momentum(动量)

1.Momentum要解决的问题

SGD有个问题就是收敛过程会产生震荡,这个相信大家都明白。Momentum主要解决的就是这个问题。

具体的解决思路为在SGD基础上引入一阶动量,公式可以表示如下:
m t = β 1 ⋅ m t − 1 + ( 1 − β 1 ) ⋅ g t m_t = \beta_1 \cdot m_{t-1} + (1- \beta_1) \cdot g_t mt=β1mt1+(1β1)gt

其中, β 1 \beta_1 β1为超参数,经验值为0.9。 β 1 \beta_1 β1越大,说明当前动量主要由以前累积的方向决定。而 β 1 \beta_1 β1越小,说明当前动量更多由当前梯度决定。

2.Momentum为什么能解决震荡

首先大家回忆一下为什么传统的SGD会有收敛震荡问题?
假设前一时刻的梯度与当前的梯度方向几乎相反,那么用传统SGD迭代的时候,该点徒弟就必有大幅的徘徊,这个时候就必然会引起震荡。
而Momentum积累了历史的梯度,此刻的梯度收到前一时刻的影响,会导致当前时刻梯度徘徊的幅度大幅减小。从直观来讲,就是当前时刻梯度如果与历史积累相似,这种趋势会得到加强。而当前时刻梯度如果与历史时刻相反,当前时刻的梯度会减弱,这样就能达到减小收敛震荡的效果。

3.动量能加速收敛

动量不光能解决收敛震荡问题,还能加速优化问题收敛。

由第一部分我们将动量公式可以表示为
m t = α ⋅ m t − 1 + ϵ ⋅ g t m_t = \alpha \cdot m_{t-1} + \epsilon \cdot g_t mt=αmt1+ϵgt

假设每个时刻梯度 g t g_t gt的方向都一致,那么有
m t = ϵ ⋅ g t 1 − α m_t = \frac{\epsilon \cdot g_t}{1 - \alpha} mt=1αϵgt

如果 α = 0.5 \alpha = 0.5 α=0.5,此时动量法的收敛速度是传统SGD的2倍。
如果 α = 0.9 \alpha = 0.9 α=0.9,此时动量法的收敛速度是传统SGD的10倍。
如果 α = 0.99 \alpha = 0.99 α=0.99,此时动量法的收敛速度是传统SGD的100倍。

4.动量法的算法流程

假定初始参数为 θ \theta θ,初始动量 v v v,动量超参数为 α \alpha α,梯度超参数为 ϵ \epsilon ϵ,则整个动量法算法流程如下:

1.从训练集中采样m个样本 x ( 1 ) x^{(1)} x(1), x ( 2 ) x^{(2)} x(2)…, x ( m ) x^{(m)} x(m),对应的标签为 y ( i ) y^{(i)} y(i)
2.计算梯度 g = ▽ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) g = \bigtriangledown_\theta \sum_i L(f(x^{(i)}; \theta), y^{(i)}) g=θiL(f(x(i);θ),y(i))
3.计算动量更新 v = α v − ϵ g v = \alpha v - \epsilon g v=αvϵg
4.参数更新 θ = θ + v \theta = \theta + v θ=θ+v

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值