TensorFlow2.0之五种神经网络参数优化器
一、参数优化器简介
待优化参数w,损失函数loss,学习率Ir,每次迭代一个batch,t表示当前batch迭代的总次数:
1,计算时刻损失函数关于当前参数的梯度
g
t
=
∂
l
o
s
s
∂
(
w
t
)
g_{t} = \frac{\partial loss}{\partial (w_{t})}
gt=∂(wt)∂loss
2,计算t时刻一阶动量
m
t
m_{t}
mt,和二阶动量
V
t
V_{t}
Vt,
3,计算时刻下降梯度:
η
t
=
l
r
∗
m
V
\eta _{t}=lr * \frac{m}{\sqrt{V}}
ηt=lr∗Vm
4,计算t+1时刻参数:
w
t
+
1
=
w
t
−
η
t
=
w
t
−
l
r
∗
m
V
w_{t+1}=w_{t}-\eta_{t}=w_{t}-lr * \frac{m}{\sqrt{V}}
wt+1=wt−ηt=wt−lr∗Vm
一阶动量:与梯度相关的函数
二阶动量:与梯度平方相关的函数
客观来说,需优化的参数仅为输入的权重w和偏置b,不需要优化输入的特征值和超参数,并且优化器之间的差异也是因一阶动量和二阶动量赋值不同而不同。下面来分别详细介绍SGD、SGDM、Adagrad、Rmsprop、Adam五种参数优化器。
二、五种参数优化器
2.1 SGD(不含momentum的梯度下降算法)
m
t
=
g
t
m_{t} = g_{t}
mt=gt ,
V
t
=
1
V_{t} = 1
Vt=1
η
t
=
l
r
∗
m
t
V
t
=
l
r
∗
g
t
\eta _{t}=lr * \frac{m_{t}}{\sqrt{V_{t}}} = lr * g_{t}
ηt=lr∗Vtmt=lr∗gt
w
t
+
1
=
w
t
−
η
t
=
w
t
−
l
r
∗
m
t
V
t
=
w
t
−
l
r
∗
g
t
w_{t+1}=w_{t}-\eta_{t}=w_{t}-lr * \frac{m_{t}}{\sqrt{V_{t}}} = w_{t} - lr * g_{t}
wt+1=wt−ηt=wt−lr∗Vtmt=wt−lr∗gt
2.2 SGDM(含momentum的梯度下降算法,在SGD基础上增加一阶动量)
m
t
=
β
m
t
−
1
+
(
1
−
β
)
g
t
m_{t} = \beta m_{t-1} + (1-\beta)g_{t}
mt=βmt−1+(1−β)gt ,
V
t
=
1
V_{t} = 1
Vt=1
η
t
=
l
r
∗
m
t
V
t
=
l
r
∗
m
t
=
l
r
∗
[
β
m
t
−
1
+
(
1
−
β
)
g
t
]
\eta _{t}=lr * \frac{m_{t}}{\sqrt{V_{t}}} = lr * m_{t} = lr *[ \beta m_{t-1} + (1-\beta)g_{t}]
ηt=lr∗Vtmt=lr∗mt=lr∗[βmt−1+(1−β)gt]
w
t
+
1
=
w
t
−
η
t
=
w
t
−
l
r
∗
m
t
V
t
=
w
t
−
l
r
∗
[
β
m
t
−
1
+
(
1
−
β
)
g
t
]
w_{t+1}=w_{t}-\eta_{t}=w_{t}-lr * \frac{m_{t}}{\sqrt{V_{t}}} = w_{t} - lr *[ \beta m_{t-1} + (1-\beta)g_{t}]
wt+1=wt−ηt=wt−lr∗Vtmt=wt−lr∗[βmt−1+(1−β)gt]
注: β = 0.9 \beta = 0.9 β=0.9
2.3 Adagrad(在SGD基础上增加二阶动量)
m
t
=
g
t
m_{t} = g_{t}
mt=gt ,
V
t
=
∑
t
=
1
t
g
t
2
V_{t} = \sum_{t=1}^{t} g_{t}^{2}
Vt=∑t=1tgt2
η
t
=
l
r
∗
m
t
V
t
=
l
r
∗
g
t
∑
t
=
1
t
g
t
2
\eta _{t}=lr * \frac{m_{t}}{\sqrt{V_{t}}} = lr * \frac{g_{t}}{\sqrt{\sum_{t=1}^{t} g_{t}^{2}}}
ηt=lr∗Vtmt=lr∗∑t=1tgt2gt
w
t
+
1
=
w
t
−
η
t
=
w
t
−
l
r
∗
m
t
V
t
=
w
t
−
l
r
∗
g
t
∑
t
=
1
t
g
t
2
w_{t+1}=w_{t}-\eta_{t}=w_{t}-lr * \frac{m_{t}}{\sqrt{V_{t}}} = w_{t} - lr * \frac{g_{t}}{\sqrt{\sum_{t=1}^{t} g_{t}^{2}}}
wt+1=wt−ηt=wt−lr∗Vtmt=wt−lr∗∑t=1tgt2gt
2.4 RMSProp(在SGD基础上增加二阶动量)
m
t
=
g
t
m_{t} = g_{t}
mt=gt ,
V
t
=
β
V
t
−
1
+
(
1
−
β
)
g
t
2
V_{t} = \beta V_{t-1}+(1-\beta) g_{t}^{2}
Vt=βVt−1+(1−β)gt2
η
t
=
l
r
∗
m
t
V
t
=
l
r
∗
g
t
β
V
t
−
1
+
(
1
−
β
)
g
t
2
\eta _{t}=lr * \frac{m_{t}}{\sqrt{V_{t}}} = lr * \frac{g_{t}}{\sqrt{ \beta V_{t-1}+(1-\beta) g_{t}^{2}}}
ηt=lr∗Vtmt=lr∗βVt−1+(1−β)gt2gt
w
t
+
1
=
w
t
−
η
t
=
w
t
−
l
r
∗
m
t
V
t
=
w
t
−
l
r
∗
g
t
β
V
t
−
1
+
(
1
−
β
)
g
t
2
w_{t+1}=w_{t}-\eta_{t}=w_{t}-lr * \frac{m_{t}}{\sqrt{V_{t}}} = w_{t} - lr * \frac{g_{t}}{\sqrt{ \beta V_{t-1}+(1-\beta) g_{t}^{2}}}
wt+1=wt−ηt=wt−lr∗Vtmt=wt−lr∗βVt−1+(1−β)gt2gt
注: β = 0.9 \beta = 0.9 β=0.9
2.5 Adam(同时结合SGDM一阶动量和RMSProp二阶动量)
m
t
=
β
1
m
t
−
1
+
(
1
−
β
1
)
g
t
m_{t} = \beta_{1} m_{t-1} + (1 - \beta_{1})g_{t}
mt=β1mt−1+(1−β1)gt ,
V
t
=
β
2
V
t
−
1
+
(
1
−
β
2
)
g
t
2
V_{t} = \beta_{2} V_{t-1}+(1-\beta_{2}) g_{t}^{2}
Vt=β2Vt−1+(1−β2)gt2
对
m
t
m_{t}
mt和
v
t
v_{t}
vt分别进行修正动量的偏差,改为:
m
t
^
=
m
t
1
−
β
1
t
\hat{m_{t}} = \frac{m_{t}}{1-\beta_{1}^{t}}
mt^=1−β1tmt
V
t
^
=
v
t
1
−
β
2
t
\hat{V_{t}} = \frac{v_{t}}{1-\beta_{2}^{t}}
Vt^=1−β2tvt
η
t
=
l
r
∗
m
t
^
V
t
^
\eta _{t}=lr * \frac{\hat{m_{t}} }{\sqrt{\hat{V_{t}}}}
ηt=lr∗Vt^mt^
w
t
+
1
=
w
t
−
η
t
=
w
t
−
l
r
∗
m
t
^
V
t
^
w_{t+1}=w_{t}-\eta_{t}=w_{t}-lr * \frac{\hat{m_{t}} }{\sqrt{\hat{V_{t}}}}
wt+1=wt−ηt=wt−lr∗Vt^mt^
注: β 1 = 0.9 \beta1 = 0.9 β1=0.9, β 2 = 0.999 \beta2=0.999 β2=0.999
总结
1.当lr=0.1 epoch=500 batch=32
loss变化趋势:
acc精确度变化趋势:
训练消耗时间:
从对比图中不难看出,损失函数loss衰减趋势图,Adam优化器衰减速度更快,且精确度在epoch=100后表现较为稳定,但是训练时间比前四个都要长,但为了得到较稳定的精确度,往往会以时间换准确度。
将参数改动,变为lr=0.01 epoch=100 batch=32
loss变化趋势:
准确度变化趋势:
训练耗时:
和之前的类似,就损失函数衰减的速度和结果准确率而言,还是Adam优化器比较占优势,但是由于调整了学习率lr和迭代的次数epoch,在时间上大大减少,均在2~4秒之间。
综上所述表明,找到适合的优化模型、学习率大小和迭代次数对模型的优化至关重要。同时Adam优化器可以作为常用优化器。