TensorFlow2.0之五种神经网络参数优化器
一、参数优化器简介
待优化参数w,损失函数loss,学习率Ir,每次迭代一个batch,t表示当前batch迭代的总次数:
1,计算时刻损失函数关于当前参数的梯度 gt=∂(wt)∂loss
2,计算t时刻一阶动量mt,和二阶动量Vt,
3,计算时刻下降梯度: ηt=lr∗Vm
4,计算t+1时刻参数: wt+1=wt−ηt=wt−lr∗Vm
一阶动量:与梯度相关的函数
二阶动量:与梯度平方相关的函数
客观来说,需优化的参数仅为输入的权重w和偏置b,不需要优化输入的特征值和超参数,并且优化器之间的差异也是因一阶动量和二阶动量赋值不同而不同。下面来分别详细介绍SGD、SGDM、Adagrad、Rmsprop、Adam五种参数优化器。
二、五种参数优化器
2.1 SGD(不含momentum的梯度下降算法)
mt=gt ,Vt=1
ηt=lr∗Vtmt=lr∗gt
wt+1=wt−ηt=wt−lr∗Vtmt=wt−lr∗gt
2.2 SGDM(含momentum的梯度下降算法,在SGD基础上增加一阶动量)
mt=βmt−1+(1−β)gt ,Vt=1
ηt=lr∗Vtmt=lr∗mt=lr∗[βmt−1+(1−β)gt]
wt+1=wt−ηt=wt−lr∗Vtmt=wt−lr∗[βmt−1+(1−β)gt]
注:β=0.9
2.3 Adagrad(在SGD基础上增加二阶动量)
mt=gt ,Vt=∑t=1tgt2
ηt=lr∗Vtmt=lr∗∑t=1tgt2gt
wt+1=wt−ηt=wt−lr∗Vtmt=wt−lr∗∑t=1tgt2gt
2.4 RMSProp(在SGD基础上增加二阶动量)
mt=gt ,Vt=βVt−1+(1−β)gt2
ηt=lr∗Vtmt=lr∗βVt−1+(1−β)gt2gt
wt+1=wt−ηt=wt−lr∗Vtmt=wt−lr∗βVt−1+(1−β)gt2gt
注:β=0.9
2.5 Adam(同时结合SGDM一阶动量和RMSProp二阶动量)
mt=β1mt−1+(1−β1)gt ,Vt=β2Vt−1+(1−β2)gt2
对mt和vt分别进行修正动量的偏差,改为:
mt^=1−β1tmt
Vt^=1−β2tvt
ηt=lr∗Vt^mt^
wt+1=wt−ηt=wt−lr∗Vt^mt^
注:β1=0.9,β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秒之间。
综上所述表明,找到适合的优化模型、学习率大小和迭代次数对模型的优化至关重要。