在讲动量法的时候,我们看到当不同方向上的梯度相差较大时,会出现振荡的情况。动量法依赖指数加权平均使得自变量的更新方向更加一致,从而降低loss divergence的情况。
其它调整学习率的算法,如AdaGrad, Adam和RMSProp。
\space
Method 1: Adaptive Gradient(AdaGrad):
它根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,从而避免统一的学习难以适应所有维度的问题。
s
t
=
s
t
−
1
+
g
t
∗
g
t
,
s_t=s_{t-1}+g_t*g_t,
st=st−1+gt∗gt,
x
t
=
x
t
−
1
−
η
s
t
+
ϵ
∗
g
t
x_t=x_{t-1}-\frac{\eta}{\sqrt{s_t+\epsilon}}*g_t
xt=xt−1−st+ϵη∗gt
(i) “*” is element-wise multiplication
(ii)
ϵ
\epsilon
ϵ is a small number, like
1
0
−
6
10^{-6}
10−6 to make sure the denominator > 0
解释:
1. 小批量随机梯度按元素平方的累加变量
s
t
s_t
st出现在学习率的分母项。
2. 因此,如果目标函数有关自变量中某个元素的偏导数一直都较大,那么该元素的学习率将下降较快;反之,如果目标函数有关自变量中某个元素的偏导数一直都较小,那么该元素的学习率将下降较慢。
3. 然而,由于 s t s_t st一直在累加按元素平方的梯度,自变量中每个元素的学习率在迭代过程中一直在降低(或不变)。
缺点:当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。
\space
Method 2: RMSProp (AdaGrad + Moving Average): 解决AdaGrad的问题
不同于AdaGrad算法里状态变量
s
t
s_t
st是截止时间t所有小批量随机梯度
g
t
g_t
gt的平方和,RMSProp算法将这些梯度按元素平方做指数加权移动平均。
s
t
=
γ
s
t
−
1
+
(
1
−
γ
)
g
t
∗
g
t
,
γ
∈
[
0
,
1
)
s_t=\gamma s_{t-1}+(1-\gamma)g_t*g_t, \space\space\gamma\in[0,1)
st=γst−1+(1−γ)gt∗gt, γ∈[0,1)
x
t
=
x
t
−
1
−
η
s
t
+
ϵ
∗
g
t
x_t=x_{t-1}-\frac{\eta}{\sqrt{s_t+\epsilon}}*g_t
xt=xt−1−st+ϵη∗gt
解释:
1.
s
t
s_t
st是对平方项
g
t
∗
g
t
g_t*g_t
gt∗gt的指数加权移动平均,所以可以看作最近
1
1
−
γ
\frac{1}{1-\gamma}
1−γ1个时间步的小批量随机梯度平方项的加权平均。
2. 如此一来,自变量每个元素的学习率在迭代过程中就不再一直降低(或不变)。
\space
Method 3: AdaDelta: 也对AdaGrad在迭代后期可能较难找到最优解的问题做了改进。但AdaDelta算法没有学习率这个超参数。
-
与RMSProp算法一样,使用了 g t g_t gt平方和的指数加权移动平均
s t = γ s t − 1 + ( 1 − γ ) g t ∗ g t s_t=\gamma s_{t-1}+(1-\gamma)g_t*g_t st=γst−1+(1−γ)gt∗gt -
与RMSProp不同的是,AdaDelta算法还储存了一个额外的状态变量 Δ x t \Delta x_t Δxt,其元素在时间t=0时被初始化为0
g t ′ = Δ x t − 1 + ϵ s t + ϵ ∗ g t g_t'=\sqrt{\frac{\Delta x_{t-1}+\epsilon}{s_t+\epsilon}}*g_t gt′=st+ϵΔxt−1+ϵ∗gt x t = x t − 1 − g t ′ x_t=x_{t-1}-g_t' xt=xt−1−gt′ -
最后,使用 Δ x t \Delta x_t Δxt来记录自变量变化量 g t ′ g_t' gt′按元素平方和的指数加权移动平均:
Δ x t = γ Δ x t − 1 + ( 1 − γ ) g t ′ ∗ g t ′ \Delta x_t=\gamma \Delta x_{t-1}+(1-\gamma)g_t'*g_t' Δxt=γΔxt−1+(1−γ)gt′∗gt′
可以看到,在不考虑 ϵ \epsilon ϵ的影响下,AdaDelta算法跟RMSProp算法的不同指出在于使用 Δ x t − 1 \sqrt{\Delta x_{t-1}} Δxt−1来替代学习率 η \eta η
\space
Method 4: Adam: 在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均。
-
动量法中的动量 v t , v 0 = 0 v_t, v_0=0 vt,v0=0:
v t = β 1 v t − 1 + ( 1 − β 1 ) g t , β 1 ∈ [ 0 , 1 ) , ( 算 法 作 者 建 议 设 为 0.9 ) v_t=\beta_1 v_{t-1}+(1-\beta_1)g_t, \space\space \beta_1\in[0, 1),\space (算法作者建议设为0.9) vt=β1vt−1+(1−β1)gt, β1∈[0,1), (算法作者建议设为0.9) -
RMSProp中的 s t , s 0 = 0 s_t, s_0=0 st,s0=0:
s t = β 2 s t − 1 + ( 1 − β 2 ) g t ∗ g t , β 2 ∈ [ 0 , 1 ) ( 算 法 作 者 建 议 设 为 0.999 ) s_t=\beta_2 s_{t-1}+(1-\beta_2)g_t*g_t,\space\space\beta_2\in[0, 1)\space(算法作者建议设为0.999) st=β2st−1+(1−β2)gt∗gt, β2∈[0,1) (算法作者建议设为0.999) -
偏差修正:
由于 v 0 , s 0 v_0, s_0 v0,s0的元素都初始化为0,在时间步t,我们得到 v t = ( 1 − β 1 ) ∑ i = 1 t β 1 t − i g i v_t=(1-\beta_1)\sum_{i=1}^t\beta_1^{t-i}g_i vt=(1−β1)∑i=1tβ1t−igi。将过去各时间步内小批量随机梯度的权重相加,得到 ( 1 − β 1 ) ∑ i = 1 t β 1 t − i = 1 − β 1 t (1-\beta_1)\sum_{i=1}^t\beta_1^{t-i}=1-\beta_1^t (1−β1)∑i=1tβ1t−i=1−β1t。
需要注意的是,当t较小时,过去各时间步小批量随机梯度权重之和会较小。比如,当
β
1
=
0.9
\beta_1=0.9
β1=0.9时,
v
1
=
0.1
g
1
v_1=0.1g_1
v1=0.1g1。为了消除初期的这种影响,对于任意时间步t,我们可以将
v
t
v_t
vt除以
1
−
β
1
t
1-\beta_1^t
1−β1t,从而使过去各时间步小批量随机梯度权重之和为1。
v
t
^
=
v
t
1
−
β
1
t
\hat{v_t}=\frac{v_t}{1-\beta_1^t}
vt^=1−β1tvt
s
t
^
=
s
t
1
−
β
2
t
\hat{s_t}=\frac{s_t}{1-\beta_2^t}
st^=1−β2tst
- 重新调整
g
t
g_t
gt:
g t ′ = η s t ^ + ϵ v t ^ g_t'=\frac{\eta}{\sqrt{\hat{s_t}}+\epsilon} \hat{v_t} gt′=st^+ϵηvt^ - 自变量更新:
x t = x t − 1 − g t ′ x_t=x_{t-1}-g_t' xt=xt−1−gt′
所以,Adam算法可以看作是RMSProp算法与动量法的结合。