mini-batch SGD算法虽然能够带来很好的训练速度,但是在到达模型最优的时候并不总是真正意义上的最优(可能陷入了局部最优的情况),而是在最优点附近徘徊。 另外一个问题是mini-batch SGD 需要我们挑选一个合适的学习率,当我们采用较小学习率时可能会导致网络的收敛速度太慢;当我们采用较大的学习率时,可能会导致训练过程中优化的幅度跳过函数最优点。我们所希望的仅仅是网络在优化的时候损失函数有一个很好的收敛速度同时摆动的幅度不至于过大。 所以动量法Momentum优化器刚好能解决上述所面临的问题。他通过基于梯度的移动指数加权平均,对网络的参数进行了平滑处理,让梯度的摆动幅度更加平缓。
v
=
0.8
v
−
0.2
∇
w
,
其
中
∇
w
表
示
前
一
次
的
梯
度
v = 0.8v-0.2\nabla w,其中\nabla w表示前一次的梯度
v=0.8v−0.2∇w,其中∇w表示前一次的梯度
w
=
w
−
α
v
,
α
表
示
学
习
率
w=w-\alpha v,\alpha表示学习率
w=w−αv,α表示学习率
关键词:对梯度进行平滑处理,防止振幅过大。
5.AdaGrad
AdaGrad算法就是将每一个参数的每一次迭代的梯度取平方累加之后再进行开方操作,用全局学习率除以这个数字,作为学习率的动态更新,从而达到动态学习率的效果。(前面学习率大,后面学习率小)
g
r
a
d
e
n
t
=
h
i
s
t
o
r
y
_
g
r
a
d
e
n
t
+
(
∇
w
)
2
gradent = history\_gradent+(\nabla w)^{2}
gradent=history_gradent+(∇w)2
w
=
w
−
α
g
r
a
d
e
n
t
+
ψ
∇
w
,
其
中
ψ
为
常
数
,
为
了
保
证
数
值
稳
定
约
设
为
1
0
−
7
w =w-\frac{\alpha}{\sqrt {gradent} +\psi}\nabla w,其中\psi为常数,为了保证数值稳定约设为10^{-7}
w=w−gradent+ψα∇w,其中ψ为常数,为了保证数值稳定约设为10−7
关键词:自适应学习率
6.RMSProp
Momentum算法中,虽然初步解决了优化中摆动幅度过大的问题,为了进一步优化损失函数在更新过程中摆动幅度过大的问题,并且为了进一步加快函数的收敛速度,RMSProp算法对参数的梯度采取了加权平方的算法。
g
r
a
d
e
n
t
=
0.8
h
i
s
t
o
r
y
_
g
r
a
d
e
n
t
+
0.2
(
∇
w
)
2
gradent = 0.8history\_gradent+0.2(\nabla w)^{2}
gradent=0.8history_gradent+0.2(∇w)2
w
=
w
−
α
g
r
a
d
e
n
t
+
ψ
∇
w
w=w-\frac{\alpha}{\sqrt{gradent}+\psi}\nabla w
w=w−gradent+ψα∇w
关键词:学习率加权
7.Adam
Adam(Adaptive Moment Estimation)算法是将Momentum算法和RMSProp算法结合起来使用的一种算法,能够防止梯度的摆动幅度过大,同时能够加快收敛速度。
1.需要初始化梯度的累积量和平方累积量
v
w
=
0
,
s
w
=
0
v_w=0,s_w=0
vw=0,sw=0 2.第t轮训练中,我们首先可以计算得到Momentum和RMSProp的参数更新:
v
w
=
0.8
v
+
0.2
∇
w
v_w=0.8v+0.2\nabla w
vw=0.8v+0.2∇w,Momentum计算的梯度
s
w
=
0.8
s
+
0.2
(
∇
w
)
2
s_w=0.8s+0.2(\nabla w)^{2}
sw=0.8s+0.2(∇w)2,RMSProp计算的梯度 3.对其中值进行处理后,得到:
w
=
w
−
α
v
w
s
w
+
ψ
w=w-\alpha \frac{v_w}{\sqrt{s_w}+\psi}
w=w−αsw+ψvw