(10) 优化器

1.优化器种类

tf.train.Optimizer
tf.train.GradientDescentOptimizer            √    2.1
tf.train.AdadeltaOptimizer                   √    2.6
tf.train.AdagtadOptimizer
tf.train.AdagradDAOptimizer                  √    2.3
tf.train.MomentumOptimizer                   √    2.2
tf.train.AdamOptimizer                       √    2.5
tf.train.FtrlOptimizer
tf.train.ProximalGradientDescentOptimizer
tf.train.ProximalAdagradOptimizer
tf.train.RMSProOptimizer                     √    2.4

2.介绍

https://www.jianshu.com/p/8f9247bc6a9a
在这里插入图片描述

2.1 tf.train.GradientDescentOptimizer 基础梯度下降算法

把下降的损失函数看成一个机器人,由于在下降的时候坡度不是均匀的,机器人会左右摇摆,所以下降速度会比较慢,有时候遇到局部最优,还可能在原地徘徊好长时间。

批量梯度下降/标准梯度下降(Batch Gradient Descent,BGD)

批量梯度下降是指每次计算误差,获取梯度时都是以同一个批次的作为整体进行的,不断更新参数,直到误差为零或在允许范围内即可。

随机梯度下降法(Stochastic gradient descent, SGD)

随机梯度下降是指对于每一个样本的训练都进行一次参数更新。

小批量梯度下降法(MinBatch Stochastic gradient descent, MSGD)

MSGD是SGD和BGD的折中,SGD由于每一个样本都需要进行一次参数更新,这样更新参数过于频繁,很容易造成过大波动,同时耗时严重。BGD样本利用全体训练集更新参数,参数更新过慢。为了加快训练速度,可以采用小批量梯度下降法,该方法将 利用小批次数据作为参数更新的单位。

2.2 Momentum : tf.train.MomentumOptimizer

在这里插入图片描述

2.3 Adagrad : tf.train.AdagradDAOptimizer

这个算法是通过动态改变学习速率,提高下降速度,相当于给机器人穿上一个左右侧滑有阻力的鞋子,让它只好沿着正确的方向下滑。
在这里插入图片描述

2.4 RMSProp : tf.train.RMSProOptimizer

这个算法相当于在AdaGrad中引入了Momentum的惯性,但是RMSprop缺少了Momentum的变量m
在这里插入图片描述

2.5 Adam : tf.train.AdamOptimizer

Adam是目前用得最广的优化算法,它结合了AdaGrad和Momentum的优点。这个算法相当于给机器人一个惯性,同时还让它穿上了防止侧滑的鞋子,相当好用
在这里插入图片描述

扫描二维码关注公众号,回复: 9217247 查看本文章

2.6 Adadelta : tf.train.AdadeltaOptimizer

在这里插入图片描述

3.总结

3.1

在这里插入图片描述
观察图中我们发现:
SGD随机梯度下降算法收敛的速度是最慢的;
Adadelta收敛得速度是最快的;
Momentum所走的路程是最远的,会冲出最低点

3.2 马鞍型数据下的表现

在这里插入图片描述
通过上图我们惊讶的发现随机梯度下降法SGD无法逃离马鞍形数据,其他算法都可以逃离,所以面对马鞍问题的时候,我们不能使用SGD优化器。

3.3 结论

看了上面的结论,那么以后我们该如何选择优化器呢?是不是因为随机梯度下降法优化器以后就不能用了呢?答案不是的!
我们应该要根据实际的需要选择适合的,如果需要收敛速度快,就可以用Adadelta;面对马鞍问题就避免使用SGD优化器;哪个优化器更有利于机器学习就用哪个优化器。但最终准确率要高,比如梯度下降法虽然慢,但有可能由它训练出来的准确率高!

发布了71 篇原创文章 · 获赞 3 · 访问量 1915

猜你喜欢

转载自blog.csdn.net/qq_34405401/article/details/104351357