【机器学习】深度学习自适应学习率
动量算法旨在加速学习速率。自适应学习率是为了平衡不同参数的学习速率。
SGD
g
=
−
ϵ
f
′
(
θ
k
)
g=-\epsilon f'(\theta_k)
g=−ϵf′(θk)
θ
k
+
1
←
θ
k
+
g
\theta_{k+1} \leftarrow \theta_k+g
θk+1←θk+g
momentum动量
g
=
α
g
−
ϵ
f
′
(
θ
k
)
g=\alpha g -\epsilon f'(\theta_k)
g=αg−ϵf′(θk)
θ
k
+
1
←
θ
k
+
g
\theta_{k+1} \leftarrow \theta_k+g
θk+1←θk+g
特点:相比于SGD,考虑了历史累计梯度。
优点:旨在加速学习,特别是高曲率、小但一致的梯度,或是带噪声的梯度。动量算法累积了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。
稳定时更新步长为
ϵ
f
′
(
θ
k
)
1
−
α
\frac{\epsilon f'(\theta_k)}{1-\alpha}
1−αϵf′(θk)
nesterov动量
g
←
α
g
−
ϵ
f
′
(
θ
k
+
α
g
)
g \leftarrow \alpha g - \epsilon f'(\theta_k+\alpha g)
g←αg−ϵf′(θk+αg)
θ
k
+
1
←
θ
k
+
g
\theta_{k+1} \leftarrow \theta_k+g
θk+1←θk+g
特点:相比于momentum动量,在计算梯度之前先进行一次梯度更新
优点:在凸批量梯度的情况下,额外误差收敛速率从O(1/k)(k步后)改进到O(1/k^2),但是在随机梯度的情况下,没有改进收敛率。所以建议LR等模型在Batch-SGD时优先考虑nesterov动量
Adamgrad
g
=
−
f
′
(
θ
k
)
g=-f'(\theta_k)
g=−f′(θk)
r
=
r
+
g
T
g
r = r+g^Tg
r=r+gTg
θ
k
+
1
←
θ
k
+
ϵ
g
/
r
\theta_{k+1} \leftarrow \theta_k+\epsilon g/\sqrt r
θk+1←θk+ϵg/r
偏导大的参数学习率下降较快,偏导小的参数学习率下降相对较慢
效果:在参数空间中更为平缓的倾斜方向会取地更大的进步
Rmsprop
Adamgrad的累计梯度容易使得学习率较早的趋于0,使得学习停滞。
g
=
−
f
′
(
θ
k
)
g=-f'(\theta_k)
g=−f′(θk)
r
=
α
r
+
(
1
−
α
)
g
T
g
r = \alpha r+(1-\alpha)g^Tg
r=αr+(1−α)gTg
θ
k
+
1
←
θ
k
+
ϵ
g
/
r
\theta_{k+1} \leftarrow \theta_k+\epsilon g/\sqrt r
θk+1←θk+ϵg/r
扩展:AdamDelta和Rmsprop只是自适应学习率修正项
r
r
r,故可以扩展到momentum动量和nesterov动量上。
Adam(adaptive moments)
移动平均估计一阶矩和二阶矩
修正一阶矩和二阶矩的偏差,还没有理解清楚其作用