文章目录

  1. 1. tf.train.GradientDescentOptimizer
  2. 2. tf.train.AdadeltaOptimizer
  3. 3. tf.train.AdagradOptimizer
  4. 4. tf.train.MomentumOptimizer
  5. 5. tf.train.RMSPropOptimizer
  6. 6. tf.train.AdamOptimizer
  7. 7. 如何选用optimizer
  8. 8. 代码实现
  9. 9. 参考资料

阅读完《TensorFlow 学习摘要(三) 深度学习 - 梯度下降法》文章后,现在我们对 TensorFlow 的优化器进一步了解。

深度学习常见的是对于梯度的优化,优化器最后其实就是各种对于梯度下降算法的优化。TensorFLow 提供了很多优化器的支持。

  • tf.train.Optimizer
  • tf.train.GradientDescentOptimizer
  • tf.train.AdadeltaOptimizer
  • tf.train.AdagradOptimizer
  • tf.train.AdagradDAOptimizer
  • tf.train.MomentumOptimizer
  • tf.train.AdamOptimizer
  • tf.train.FtrlOptimizer
  • tf.train.ProximalGradientDescentOptimizer
  • tf.train.ProximalAdagradOptimizer
  • tf.train.RMSPropOptimizer

tf.train.GradientDescentOptimizer

这个类是实现梯度下降算法的优化器。

tf.train.AdadeltaOptimizer

实现了 Adadelta 算法的优化器,该算法不需要手动调优学习速率 α,抗噪声能力强,可以选择不同的模型结构。 Adadelta 是对 Adagrad 的扩展。Adadelta 只累加固定大小的项,并且也不直接存储这些项,仅仅是计算对应的平均值。

tf.train.AdagradOptimizer

实现了 AdagradOptimizer 算法的优化器,Adagrad 会累加之前所有的梯度平方。 它用于处理大的稀疏矩阵,Adagrad 可以自动变更学习速率,只是需要设定一个全局的学习速率 α,但这并非是实际学习速率,实际的速率是与以往参数的模之和的开方成反比的。这样使得每个参数都有一个自己的学习率。

tf.train.MomentumOptimizer

实现了 MomentumOptimizer 算法的优化器,如果梯度长时间保持一个方向,则增大参数更新幅度,反之,如果频繁发生符号翻转,则说明这是要减小参数更新幅度。可以把这一过程理解成从山顶放下一个球,会滑的越来越快。

tf.train.RMSPropOptimizer

实现了 RMSPropOptimizer 算法的优化器,它与 Adam 类似,只是使用了不同的滑动均值。

tf.train.AdamOptimizer

实现了 AdamOptimizer 算法的优化器,它综合了 Momentum 和 RMSProp 方法,对每个参数保留一个学习率与一个根据过去梯度信息求得的指数衰减均值。

如何选用optimizer

对于稀疏数据,使用学习率可自适应的优化方法,不用手动调节,而且最好采用默认值
SGD通常训练时间更长,容易陷入鞍点,但是在好的初始化和学习率调度方案的情况下,结果更可靠
如果在意更快的收敛,并且需要训练较深较复杂的网络时,推荐使用学习率自适应的优化方法。
Adadelta,RMSprop,Adam 是比较相近的算法,在相似的情况下表现差不多。

代码实现

train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

参考资料

(完)

微信公众号

文章目录

  1. 1. tf.train.GradientDescentOptimizer
  2. 2. tf.train.AdadeltaOptimizer
  3. 3. tf.train.AdagradOptimizer
  4. 4. tf.train.MomentumOptimizer
  5. 5. tf.train.RMSPropOptimizer
  6. 6. tf.train.AdamOptimizer
  7. 7. 如何选用optimizer
  8. 8. 代码实现
  9. 9. 参考资料