机器学习算法(四)- 梯度下降法


在对模型优化时,希望通过梯度下降法使得模型的损失函数降低。目前主要的梯度下降法有 SGD、Momentum、Adagrad、RMSProp、Adam几种,接下来将详细讨论这几种方法以及他们的优缺点。

1 SGD

随机选取一个样本的损失来近似整体样本的平均损失,SGD在进行参数更新时的计算方式为
Θ t = Θ t − 1 − α g t \Theta_t = \Theta_{t-1} - \alpha g_t Θt=Θt1αgt

其优点在于:

  1. 收敛速度快。

其缺陷在于:

  1. 容易收敛到局部最优,或被困在鞍点。
  2. 对初始学习率的选择依赖度较高,因该算法参数的更新幅度固定,无法主动随着迭代次数更新。
  3. 各方向学习率相同,但在实际情形中这种方式并不合理。

2 Momentum

对于鞍点或是局部最优点,因各方向在该点的梯度均为0,因此SGD算法没有能力从该点逃离。为了解决这一缺陷,Momentum算法被提出。

Momentum算法模拟物理学中的动量这一概念,它模拟的是物体运动的惯性。即参数在更新时,在一定程度上保留之前更新的方向,对当前的更新方向进行微调。

g t g_t gt 为当前时刻的梯度,Momentum在进行参数更新时的计算方式为
v t = γ v t − 1 + α g t v_t = \gamma v_{t-1} + \alpha g_t vt=γvt1+αgt

Θ t = Θ t − 1 − v t \Theta_t = \Theta_{t-1} - v_t Θt=Θt1vt

对比SGD算法,其优点在于:

  1. 参数的更新方向与上一时刻一致时,能增大参数的更新幅度,模型能学习的更快。
  2. 同时,该方法具有一定摆脱局部最优的能力。
  3. 对初始学习率的选择要求没那么高。

其缺陷在于:

  1. 没解决各方向学习率相同的问题。

3 Adagrad

Adagrad算法是针对SGD在各方向学习率相同的缺点进行的改进,该算法在进行参数更新时的计算方式为
Θ t , i = Θ t − 1 , i − α G t , i + ϵ g t , i \Theta_{t,i} = \Theta_{t-1,i} - \frac{\alpha}{\sqrt{G_{t,i}+\epsilon}}g_{t,i} Θt,i=Θt1,iGt,i+ϵ αgt,i

G t , i = ∑ k = 1 t g k , i 2 G_{t,i} = \sum_{k=1}^t{g_{k,i}^2} Gt,i=k=1tgk,i2

其中

  • 下标 i i i 表示参数的第 i i i 个方向。
  • G t , i G_{t,i} Gt,i 表示参数此前 t t t 轮在第 i i i 个方向上梯度平方和。
  • 引入 ϵ \epsilon ϵ 是为了防止出现分母为0的情况。

该算法的缺陷在于:

  1. 缺乏摆脱局部困境的能力。
  2. 随着 G t G_t Gt 的累积,训练中后期分母将越来越大、从而梯度趋近于0,使得训练提前结束。

4 RMSProp

RMSProp算法是针对Adagrad梯度下降过快的缺陷进行的改进,该算法在进行参数更新时的计算方式为
Θ t = Θ t − 1 − α G t + ϵ g t , i \Theta_{t} = \Theta_{t-1} - \frac{\alpha}{\sqrt{G_{t}+\epsilon}}g_{t,i} Θt=Θt1Gt+ϵ αgt,i

G t = 0.9 E t − 1 [ g 2 ] + 0.1 g t 2 G_t = 0.9E_{t-1}[g^2] + 0.1g_t^2 Gt=0.9Et1[g2]+0.1gt2

E t − 1 [ g 2 ] = 1 t − 1 ∑ i = 1 t − 1 g i 2 E_{t-1}[g^2] = \frac{1}{t-1} \sum_{i=1}^{t-1}{g_i^2} Et1[g2]=t11i=1t1gi2

  • RMSProp引入 E t − 1 [ g 2 ] E_{t-1}[g^2] Et1[g2] 计算前 t − 1 t-1 t1 轮梯度平方的平均值。
  • 如此,仅仅计算各方向梯度在之前时刻的平均值,可缓解梯度下降过快的现象。

5 Adam

Adam将Momentum和RMSProp两种方式进行结合,使得参数更新时既有一定惯性沿着之前的方向,同时更新时可在各方向有不同的更新幅度。

该算法在进行参数更新时的计算方式为
m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1m_{t-1} + (1-\beta_1)g_t mt=β1mt1+(1β1)gt

m ^ t = m t 1 − β 1 = β 1 1 − β 1 m t + g t \hat{m}_t = \frac{m_t}{1-\beta_1} = \frac{\beta_1}{1-\beta_1}m_t+g_t m^t=1β1mt=1β1β1mt+gt

v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2v_{t-1} + (1-\beta_2)g_t^2 vt=β2vt1+(1β2)gt2

v ^ t = v t 1 − β 2 = β 2 1 − β 2 v t + g t 2 \hat{v}_t = \frac{v_t}{1-\beta_2} = \frac{\beta_2}{1-\beta_2}v_t+g_t^2 v^t=1β2vt=1β2β2vt+gt2

Θ t = Θ t − 1 − α v ^ t + ϵ m ^ t \Theta_t = \Theta_{t-1} - \frac{\alpha}{\sqrt{\hat{v}_t+\epsilon}} \hat{m}_t Θt=Θt1v^t+ϵ αm^t

  • m t , v t m_t, v_t mt,vt 分别是对梯度的一阶矩估计和二阶矩估计。
  • m ^ t , v ^ t \hat m_t, \hat v_t m^t,v^t 是对 m t , v t m_t, v_t mt,vt 的修正。
  • Adam算法的提出者建议 β 1 , β 2 \beta_1, \beta_2 β1,β2 的默认值为0.9和0.999, ϵ \epsilon ϵ 默认为 1 0 − 8 10^{-8} 108
  • 在数据比较稀疏的时候,adaptive的方法能得到更好的效果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Anycall201

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

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

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

打赏作者

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

抵扣说明:

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

余额充值