本文主要对Momentum和adaptive lr进行介绍
Pytorch实现Momentum的方式
Regular momentum
p
k
+
1
=
β
k
^
p
k
+
∇
f
i
(
w
k
)
p_{k+1}=\hat{\beta_k}p_k+\nabla f_i(w_k)
pk+1=βk^pk+∇fi(wk)
w
k
+
1
=
w
k
−
γ
k
p
k
+
1
w_{k+1}=w_k-\gamma_kp_{k+1}
wk+1=wk−γkpk+1
p p p表示Momentum, w w w表示权重,在每次更新的时候,同时对 p p p和 w w w进行更新,其中 0 ≤ β k ^ < 1 0 \leq \hat{\beta_k}<1 0≤βk^<1,当 β k ^ \hat{\beta_k} βk^等于0的时候,等价于在直接做gradient descent。一般 β k ^ \hat{\beta_k} βk^可以取0.9或者0.99,但是要注意的是,在调 β k ^ \hat{\beta_k} βk^大小的时候,learning rate也需要做出对应的改变, β k ^ \hat{\beta_k} βk^增大, l r lr lr就需要适当减小。
Nesterov’s momentum
p
k
+
1
=
β
k
^
p
k
+
∇
f
i
(
w
k
)
p_{k+1}=\hat{\beta_k}p_k+\nabla f_i(w_k)
pk+1=βk^pk+∇fi(wk)
w
k
+
1
=
w
k
−
γ
k
(
∇
f
i
(
w
k
)
+
β
k
^
p
k
+
1
)
w_{k+1}=w_k-\gamma_k(\nabla f_i(w_k)+\hat{\beta_k}p_{k+1})
wk+1=wk−γk(∇fi(wk)+βk^pk+1)
个人觉得相对于Regular momentum来说,因为 p k + 2 = β k ^ p k + 1 + ∇ f i ( w k + 1 ) p_{k+2}=\hat{\beta_k}p_{k+1}+\nabla f_i(w_{k+1}) pk+2=βk^pk+1+∇fi(wk+1),而Nesterov版本更新 w k w_k wk的时候使用的是 ∇ f i ( w k ) + β k ^ p k + 1 \nabla f_i(w_k)+\hat{\beta_k}p_{k+1} ∇fi(wk)+βk^pk+1,感觉上相当于是介于 p k + 1 p_{k+1} pk+1和 p k + 2 p_{k+2} pk+2之间,比 p k + 1 p_{k+1} pk+1往前多看了半步的感觉。
在训练神经网络的时候,带Momentum的版本一般会比普通SGD版本要快一些,但是Regular和Nesterov版本表现相似。除了它的速度之外,Momentum的版本具有noise smoothing的特性,对于有噪声的梯度,或者在某步更新的时候选取的样本点计算的梯度方向与global minimum的方向相差甚远,Momentum对其的矫正作用显著。
另外的Regular Momentum表示方式
w k + 1 = w k − γ k ∇ f i ( w k ) + β k ( w k − w k − 1 ) w_{k+1}=w_k-\gamma_k\nabla f_i(w_k)+\beta_k(w_k-w_{k-1}) wk+1=wk−γk∇fi(wk)+βk(wk−wk−1)
Adaptive methods
不再是网络中的每一个权重都具有相同的学习率,而是每一个权重有它特有的学习率
RMSprop
v t + 1 = α v t + ( 1 − α ) ∇ f i ( w t ) 2 v_{t+1}=\alpha v_t+(1-\alpha)\nabla f_i(w_t)^2 vt+1=αvt+(1−α)∇fi(wt)2 w t + 1 = w t − γ ∇ f i ( w t ) v t + 1 + ϵ w_{t+1}=w_t-\gamma \frac{\nabla f_i(w_t)}{\sqrt{v_{t+1}}+\epsilon} wt+1=wt−γvt+1+ϵ∇fi(wt)
上式中的 f i ( w t ) 2 f_i(w_t)^2 fi(wt)2为element-wise的平方。
Adam:带Momentum的RMSprop
m t + 1 = β m t + ( 1 − β ) ∇ f i ( w t ) m_{t+1}=\beta m_t +(1-\beta) \nabla f_i(w_t) mt+1=βmt+(1−β)∇fi(wt) v t + 1 = α v t + ( 1 − α ) ∇ f i ( w t ) 2 v_{t+1}=\alpha v_t+(1-\alpha)\nabla f_i(w_t)^2 vt+1=αvt+(1−α)∇fi(wt)2 w t + 1 = w t − γ m t v t + 1 + ϵ w_{t+1}=w_t-\gamma \frac{m_t}{\sqrt{v_{t+1}}+\epsilon} wt+1=wt−γvt+1+ϵmt
m t m_t mt相当于Momentum
Adam得以work的原因在理论上并没有得到比较好的解释,并且Adam有着一些缺点,比如说在一些简单的问题上不会收敛,泛化误差可能较大,需要调的参数多了一个,但是在一些复杂的问题上,一般来说Adam的表现要远优于SGD。
参考资料:NYU《Deep Learning》2020