文章目录
- 1.优化器种类
- 2.介绍
- 2.1 tf.train.GradientDescentOptimizer 基础梯度下降算法
- 批量梯度下降/标准梯度下降(Batch Gradient Descent,BGD)
- 随机梯度下降法(Stochastic gradient descent, SGD)
- 小批量梯度下降法(MinBatch Stochastic gradient descent, MSGD)
- 2.2 Momentum : tf.train.MomentumOptimizer
- 2.3 Adagrad : tf.train.AdagradDAOptimizer
- 2.4 RMSProp : tf.train.RMSProOptimizer
- 2.5 Adam : tf.train.AdamOptimizer
- 2.6 Adadelta : tf.train.AdadeltaOptimizer
- 3.总结
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的优点。这个算法相当于给机器人一个惯性,同时还让它穿上了防止侧滑的鞋子,相当好用
2.6 Adadelta : tf.train.AdadeltaOptimizer
3.总结
3.1
观察图中我们发现:
SGD随机梯度下降算法收敛的速度是最慢的;
Adadelta收敛得速度是最快的;
Momentum所走的路程是最远的,会冲出最低点
3.2 马鞍型数据下的表现
通过上图我们惊讶的发现随机梯度下降法SGD无法逃离马鞍形数据,其他算法都可以逃离,所以面对马鞍问题的时候,我们不能使用SGD优化器。
3.3 结论
看了上面的结论,那么以后我们该如何选择优化器呢?是不是因为随机梯度下降法优化器以后就不能用了呢?答案不是的!
我们应该要根据实际的需要选择适合的,如果需要收敛速度快,就可以用Adadelta;面对马鞍问题就避免使用SGD优化器;哪个优化器更有利于机器学习就用哪个优化器。但最终准确率要高,比如梯度下降法虽然慢,但有可能由它训练出来的准确率高!