TensorFlow2.0之五种神经网络参数优化器
五种参数优化器1 SGD(不含momentum的梯度下降算法)2 SGDM(含momentum的梯度下降算法,在SGD基础上增加一阶动量)3 Adagrad(在SGD基础上增加二阶动量)4 RMSProp(在SGD基础上增加二阶动量)5 Adam(同时结合SGDM一阶动量和RMSProp二阶动量)
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优化器可以作为常用优化器。
更多推荐
所有评论(0)