优化算法_梯度下降(SGD, AdaGrad, RMSProp, Adam)

1. 梯度下降和随机梯度下降

1.1 一阶梯度下降

一维函数泰勒展开为:
f ( x + ϵ ) ≈ f ( x ) + ϵ f ′ ( x ) f(x+\epsilon) \approx f(x)+\epsilon f^\prime(x) f(x+ϵ)f(x)+ϵf(x)
ϵ \epsilon ϵ 替换为 − η f ′ ( x ) -\eta f^\prime(x) ηf(x)得到:
f ( x − η f ′ ( x ) ) ≈ f ( x ) − η f ′ ( x ) 2 f(x - \eta f^\prime(x)) \approx f(x)-\eta f^\prime(x)^2 f(xηf(x))f(x)ηf(x)2
如果导数 f ′ ( x ) ≠ 0 f^\prime (x) \neq0 f(x)=0,那么 η f ′ ( x ) 2 > 0 \eta f^ \prime(x)^2>0 ηf(x)2>0, 所以
f ( x − η f ′ ( x ) ) < = f ( x ) f(x-\eta f^ \prime (x)) <=f(x) f(xηf(x))<=f(x)
通过使用
x ← x − η f ′ ( x ) x\leftarrow x-\eta f^ \prime(x) xxηf(x)
更新 x x x,函数 f ( x ) f(x) f(x)的值会降低。

1.2 学习率

上述梯度下降算法中 η \eta η 叫做学习率,是一个超参数。太小会导致更新缓慢,太大会导致震荡不收敛。

1.3其他

多维梯度下降
目标函数的输入是 x = [ x 1 , x 2 . . . x d ] T x=[x_1,x_2...x_d]^T x=[x1,x2...xd]T,目标函数f(x)的梯度是一个由 d d d个偏导数组成的向量:
∇ x f ( x ) = [ ∂ f ( x ) ∂ x 1 , ∂ f ( x ) ∂ x 2 , . . . , ∂ f ( x ) ∂ x d ] T \nabla _xf(x)=[\frac {\partial f( x)}{\partial x_1}, \frac {\partial f( x)}{\partial x_2},...,\frac {\partial f( x)}{\partial x_d} ]^T xf(x)=[x1f(x),x2f(x),...,xdf(x)]T
更新方式变为:
x ← x − η ∇ f ( x ) x\leftarrow x-\eta \nabla f(x) xxηf(x)
随机梯度下降
由于深度学习任务里,数据量很大,如果使用所有数据,梯度下降每次迭代的计算开销很高。随机梯度下降在每次迭代时,随机均匀采样一个样本用来计算。

2. 动量法

问题
目标函数为 f ( x ) = 0.1 x 1 2 + 2 x 2 2 f(x) =0.1x_1^2+2x_2^2 f(x)=0.1x12+2x22时,迭代时梯度下降可能会震荡下降或者发散。
动量法
在第 t t t次迭代时,随机梯度为 g t g_t gt,则:
v t ← γ v t − 1 + η t g t v_t \leftarrow \gamma v_{t-1} + \eta _tg_t vtγvt1+ηtgt
x t ← x t − 1 − v t x_t \leftarrow x_{t-1}-v_t xtxt1vt

说明
选择比较小的学习率,可以保障自变量在梯度较大的维度上不发散,但是会导致在梯度较小的维度上迭代过慢。

3. AdaGrad算法

目标函数为 f ( x ) = 0.1 x 1 2 + 2 x 2 2 f(x) =0.1x_1^2+2x_2^2 f(x)=0.1x12+2x22时,由于 x 1 x_1 x1 x 2 x_2 x2使用了相同的学习率,所以会产生震荡。
AdaGrad根据自变量在每个维度的梯度值的大小调整各个维度上的学习率,从而避免统一的学习率难以适应所有维度的问题。
AdaGrad:
在第 t t t次迭代时,所有随机梯度 g t g_t gt按元素的平方累加到 S t S_t St:
s t ← s t − 1 + g t ⨀ g t s_t \leftarrow s_{t-1}+g_t\bigodot g_t stst1+gtgt
x t ← x t − 1 − η s t + ϵ ⨀ g t x_t \leftarrow x_{t-1}-\frac{\eta}{\sqrt{s_t+\epsilon}} {\bigodot g_t} xtxt1st+ϵ ηgt
说明:
由于 s t s_t st的增大,学习率将不断衰减,可能后面下降缓慢。

每个自变量 x t x_t xt拥有自己的学习率。

4. RMSProp算法

由于AdaGrad在后期可能由于学习率过小,找不到有用的解,RMSProp算法对此进行了优化。
RMSProp:
不同于AdaGrad算法,RMSProp将梯度按元素平方做指数加权移动平均:
s t ← γ s t − 1 + ( 1 − γ ) g t ⨀ g t s_t \leftarrow \gamma s_{t-1}+(1-\gamma)g_t \bigodot g_t stγst1+(1γ)gtgt
x t ← x t − 1 − η s t + ϵ ⨀ g t x_t \leftarrow x_{t-1}-\frac{\eta}{\sqrt{s_t+\epsilon}}\bigodot g_t xtxt1st+ϵ ηgt

5. Adam算法

在RMSProp算法上进一步进行优化
Adam算法:
首先对随机梯度 g t g_t gt进行指数加权平均,得到 t t t时刻的动量:
v t ← β 1 v t − 1 + ( 1 − β 1 ) g t v_t \leftarrow \beta _1 v_{t-1}+(1-\beta _1)g_t vtβ1vt1+(1β1)gt
再和RMSProp中一样,将 g t g_t gt按指数加权平均得到 s t s_t st
s t ← β 2 s t − 1 + ( 1 − β 2 ) g t ⨀ g t s_t \leftarrow \beta _2 s_{t-1}+(1-\beta _2)g_t \bigodot g_t stβ2st1+(1β2)gtgt
由于 β 1 = 0.9 \beta_1 =0.9 β1=0.9时, v 1 = 0.1 g 1 v_1=0.1g_1 v1=0.1g1, v 1 v_1 v1就会比较小,需要做一下修正:
v t ^ ← v t 1 − β 1 ′ \hat{v_t} \leftarrow \frac{v_t}{1-\beta^ \prime _1} vt^1β1vt
s t ^ ← s t 1 − β 2 ′ \hat{s_t} \leftarrow \frac{s_t}{1-\beta^ \prime _2} st^1β2st
则:
g t ′ ← η v t ^ s t ^ + ϵ g^\prime _t \leftarrow \frac{\eta\hat{v_t}}{\sqrt{\hat{s_t}} +\epsilon} gtst^ +ϵηvt^
x t ← x t − 1 − g t ′ x_t \leftarrow x_{t-1}-g^ \prime _t xtxt1gt

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值