TensorFlow笔记(5)——优化手写数字识别模型之优化器

什么是优化器(Optimizer)

神经网络越复杂 , 数据量越大 , 咱们须要在训练神经网络的过程上花费的时间也就越多. 缘由很简单, 就是由于计算量太大了. 但是每每有时候为了解决复杂的问题, 复杂的结构和大数据又是不能避免的, 因此咱们须要寻找一些方法, 让神经网络聪明起来, 快起来。那些能够加速神经网络训练的方法就叫作优化器(Optimizer) 推荐阅读:加速神经网络训练 (Speed Up Training)git

常见的优化器

这个部分的理论知识实在太多了,我简单的整理了一点点,详见机器学习:各类优化器Optimizer的总结与比较 下面是TensorFlow中提供的相关优化器的APIgithub

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
复制代码

可视化比较几个优化器

示例1

image
上图比较了6种优化器收敛到目标点(五角星)的运行过程,从图中能够大体看出: ① 在运行速度方面

  • 两个动量优化器Momentum和NAG的速度最快,其次是三个自适应学习率优化器AdaGrad、AdaDelta以及RMSProp,最慢的则是SGD。

② 在收敛轨迹方面bash

  • 两个动量优化器虽然运行速度很快,可是初中期走了很长的”岔路”。
  • 三个自适应优化器中,Adagrad初期走了岔路,但后来迅速地调整了过来,但相比其余两个走的路最长;AdaDelta和RMSprop的运行轨迹差很少,但在快接近目标的时候,RMSProp会发生很明显的抖动。
  • SGD相比于其余优化器,走的路径是最短的,路子也比较正。

示例2

image
上图在一个存在鞍点的曲面,比较6中优化器的性能表现,从图中大体能够看出:

  • 三个自适应学习率优化器没有进入鞍点,其中,AdaDelta降低速度最快,Adagrad和RMSprop则齐头并进。
  • 两个动量优化器Momentum和NAG以及SGD都顺势进入了鞍点。但两个动量优化器在鞍点抖动了一会,就逃离了鞍点并迅速地降低,后来居上超过了Adagrad和RMSProp。
  • 很遗憾,SGD进入了鞍点,却始终停留在了鞍点,没有再继续降低。

如何挑选合适的优化器

其实从上述的两个可视化的例子中咱们就能够看到SGD的速度应该是最慢的,可是这并不影响他是咱们在实际使用中用到的最多的优化器。毕竟在实际使用中速度并非惟一决定因素,准确率才是。 因此说:网络

  1. 在研究调试咱们的神经网络时咱们可使用一些比较快的优化器,例如:Adagrad、RMSProp等
  2. 研究的差很少了,模型也搭建好了,此时若是你须要有准确的结果用来发论文等,这时候最好把每个优化器都使用一遍,由于你也不知道究竟哪一个优化器最终获得的结果是最好的,最适合你的网络。
相关文章
相关标签/搜索