动量法-momentum

动量法(momentum)

  • 动量法是对梯度进行优化,类比物理中动量的概念,在梯度更新时,不仅考虑当前位置的梯度,还需要一定程度参考过去的趋势
    总梯度 = “惯性” + 当前梯度 总梯度 = “惯性”+当前梯度 总梯度=惯性+当前梯度

  • 动量法使用平滑过的梯度对权重更新
    x t + 1 = x t − η m t \begin{aligned} \mathbf{x}_{t+1} &=\mathbf{x}_{t}-\eta m_t \end{aligned} xt+1=xtηmt
    其中 m t m_t mt 为动量法平滑过的梯度

    1. pytorch标准动量法
      m t = β m t − 1 + ∇ f ( x t ) x t + 1 = x t − η ( β m t − 1 + ∇ f ( x t ) ) m_t = \beta m_{t-1} + \nabla f\left(\mathbf{x}_{t}\right) \\ \mathbf{x}_{t+1} =\mathbf{x}_{t}-\eta (\beta m_{t-1} + \nabla f\left(\mathbf{x}_{t}\right)) mt=βmt1+f(xt)xt+1=xtη(βmt1+f(xt))

    2. 指数加权平均动量法
      m t = β m t − 1 + ( 1 − β ) ∇ f ( x t ) x t + 1 = x t − η ( ( 1 − β ) ∇ f ( x t ) ) m_t = \beta m_{t-1} + (1-\beta)\nabla f\left(\mathbf{x}_{t}\right)\\ \mathbf{x}_{t+1} =\mathbf{x}_{t}-\eta ((1-\beta)\nabla f\left(\mathbf{x}_{t}\right)) mt=βmt1+(1β)f(xt)xt+1=xtη((1β)f(xt))

    β \beta β 常见取值[0.5,0.9,0.95,0.99]

    其中指数加权平均动量法的目的是对梯度方向、大小进行平均,平滑梯度,避免震荡

拐点

  • 拐点:当目标点从起点下降到拐点时,如果是原始梯度下降,梯度为0,则梯度不更新了,但是使用动量法,由于在先前下降的过程中累计了部分正向的梯度,因此虽然当前位置的梯度为0,但是经过修正后的梯度并不为0,可以帮助目标点轻松通过拐点image-20250608165905115

缓坡

  • 缓坡: 进入缓坡区域的时候,在原始梯度下降,假设“缓坡”斜率为0.001,且我们给一个较大的学习率0.1,那么每一步走0.0001,假设缓坡长度为10个单位,则走完该“缓坡”需要10万步;
    x t + 1 = x t − 0.1 ∗ 0.001 \mathbf{x}_{t+1}=\mathbf{x}_{t}-0.1*0.001 xt+1=xt0.10.001
    使用动量法,让我们在初始位置将积累 的梯度清零,设置 β = 0.9 \beta=0.9 β=0.9,学习率还是为0.1,缓坡斜率依然为0.001,长度为10个单位

    标准动量法, m t = 0.9 m t − 1 + 0.0001 m_t = 0.9m_{t-1} + 0.0001 mt=0.9mt1+0.0001
    x t + 1 = x t − 0.1 ∗ m t \mathbf{x}_{t+1} =\mathbf{x}_{t}-0.1*m_t xt+1=xt0.1mt
    给定递推关系:
    m t = 0.9 m t − 1 + 0.001 m_t = 0.9 m_{t-1} + 0.001 mt=0.9mt1+0.001

    1. 齐次解
      特征方程 ( r = 0.9 ),齐次解为 ( m_t^{(h)} = C \cdot 0.9^t )。

    2. 特解
      设常数特解 ( m_t^{§} = A ),代入得:
      A = 0.9 A + 0.001    ⟹    A = 0.01 A = 0.9 A + 0.001 \implies A = 0.01 A=0.9A+0.001A=0.01

    3. 通解
      ( m_t = C \cdot 0.9^t + 0.01 )。
      由初始条件 ( m_0 = 0 ) 得 ( C = -0.01 ),故:
      m t = 0.01 ( 1 − 0. 9 t ) m_t = 0.01 (1 - 0.9^t) mt=0.01(10.9t)

    4. 化简为目标形式
      ( 0.01 = 10^{-2} = 10^{-3} \cdot 10 ),因此:
      m t = 1 0 − 3 ⋅ 10 ( 1 − 0. 9 t ) m_t = 10^{-3} \cdot 10 (1 - 0.9^t) mt=10310(10.9t)

    最终结果:
    m t = 1 0 − 3 ⋅ 10 ( 1 − 0. 9 t ) m_t = 10^{-3} \cdot 10 (1 - 0.9^t) mt=10310(10.9t)
    随着速度的增加,目标点最多会被加速到原始速度的10倍,在第t步时走过路程的表达式如下
    S t = 1 0 − 3 ∗ ( t + 1 ) − 0.01 ( 1 − 0. 9 t + 1 ) S_t = 10^{-3} * (t+1)-0.01(1-0.9^{t+1}) St=103(t+1)0.01(10.9t+1)

    m t = 1 0 − 3 ⋅ 10 ( 1 − 0. 9 t ) S t = 1 0 − 3 ∗ ( t + 1 ) − 0.01 ( 1 − 0. 9 t + 1 ) m_t = 10^{-3} \cdot 10 (1 - 0.9^t)\\ S_t = 10^{-3} * (t+1)-0.01(1-0.9^{t+1}) mt=10310(10.9t)St=103(t+1)0.01(10.9t+1)

    image-20250608173145516

    最终相较于原始梯度下降需要的10w步,大约t = 1w时, S t = 9.991 S_t = 9.991 St=9.991,就走完了缓坡

    指数加权平均动量法
    m t = 0.9 m t − 1 + 0.1 ∗ 0.001 m t = 1 0 − 4 ∗ 10 ∗ ( 1 − 0. 9 t ) S t = 1 0 − 4 ( t + 1 ) − 1 0 − 3 ( 1 − 0. 9 t + 1 ) m_t = 0.9m_{t-1}+0.1*0.001\\ m_t = 10^{-4}*10*(1-0.9^t)\\ S_t = 10^{-4}(t+1)-10^{-3}(1-0.9^{t+1}) mt=0.9mt1+0.10.001mt=10410(10.9t)St=104(t+1)103(10.9t+1)
    随着步数的增加,梯度值会趋近于斜率值,不会进一步变大,走完10个单位扔需要10w步image-20250608173740477

    指数加权平均动量法的目的是对梯度方向、大小进行平均,平滑梯度,避免震荡,因此对单方向的长缓坡场景并没有明显的加速效果

局部极小值

  • 局部极小值

    在经过下坡时,因为经过之前的缓坡已经积累了部分梯度值,并且在下坡区间仍然会积累正方向的梯度,所以当到达局部极小值的时候,虽然梯度为0但仍然会向前继续运动,之后虽然会有负方向的梯度抵消之前的功力image-20250608174220512

    但只要先前积累的正向梯度没有消耗殆尽,就可以冲出上坡区域,从而逃离局部极小值位置image-20250608174532410

悬崖

  • 复杂地形:悬崖

    标准动量法:由于每一步都完整贴加了当前梯度,因此较难缓解跳崖问题,甚至由于叠加了过去累计的正向梯度,导致出现更严重的跳崖现象image-20250608174739420

    指数加权平均的动量法,由于当前梯度只有一部分被考虑进来,因此在悬崖边整体梯度并不会迅速变大,但如果后续几部的梯度也较大,整体的梯度也会快速变大,导致任然会发生跳崖现象,只不过产生了一定的滞后image-20250608175029562

最值点

  • 最小值点附近

    当目标点从左侧调到右侧时,由于保留了正向的梯度,叠加上目标点此时的负梯度,整体会削弱向左跳跃的动力,避免了在终点两边反复横跳的现象image-20250608175307172

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值