动量法

0. 前言

使用梯度下降法对神经网络进行优化时,会由于初始值选取得不好而陷入局部最优解;而动量方法就可以对其进行改进。

1. 动量法

  • 普通梯度下降法:

    θ t + 1 ← θ t − η ∇ θ J ( θ t ) \theta_{t+1} \leftarrow \theta_t-\eta \nabla_{\theta} J(\theta_t) θt+1θtηθJ(θt)

  • 动量法:

    v t ← ρ v t − 1 − η ∇ θ J ( θ t ) v_{t} \leftarrow ρv_{t-1}-\eta \nabla_{\theta} J(\theta_t) vtρvt1ηθJ(θt)
    θ t + 1 ← θ t + v t \theta_{t+1} \leftarrow \theta_t+v_{t} θt+1θt+vt

ρ ρ ρ 表示历史梯度的贡献率

主要思想:更新参数时将历史梯度信息考虑进去;
动量是惯性的来源,即通过 t − 1 t-1 t1 时刻和 t t t 时刻来对 t + 1 t+1 t+1 时刻产生共同的影响,相当于引入了一种惯性,这在一定程度上避免陷入局部最小值,落入以后大概率会被惯性甩出来

在这里插入图片描述
上图中对于下一步的走法就是,动量的方向和梯度的方向相结合。

  • Nesterov动量法

    v t ← ρ v t − 1 − η ∇ θ J ( θ t + ρ v t − 1 ) v_{t} \leftarrow ρ v_{t-1}-\eta \nabla_{\theta} J(\theta_t+ρ v_{t-1}) vtρvt1ηθJ(θt+ρvt1)
    θ t + 1 ← θ t + v t \theta_{t+1} \leftarrow \theta_t+v_{t} θt+1θt+vt

在动量法的基础上改动的部分是梯度那里,即不再是关注当前的梯度,是先根据动量的方向走一步,再在此处看梯度方向,也就是在计算梯度时向前多看了一步,用图来表示就是:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41857483/article/details/111040732