TensorFlow学习系列:
TensorFlow_1参数初始化方法
TensorFlow_2学习率
TensorFlow_3激活函数
TensorFlow_4正则化
TensorFlow_5dropout
TensorFlow_6断点续训与Tensorboard可视化
TensorFlow_7优化器
TensorFlow_8损失函数
一,TensorFlow中提供了如下优化器:
tf.train.Optimizer
tf.train.GradientDescentOptimizer
tf.train.AdadeltaOptimizer
tf.train.AdagtadOptimizer
tf.train.AdagradDAOptimizer
tf.train.MomentumOptimizer
tf.train.AdamOptimizer
tf.train.FtrlOptimizer
tf.train.ProximalGradientDescentOptimizer
tf.train.ProximalAdagradOptimizer
tf.train.RMSProOptimizer
二,比较
这里我们挑几个常用的算法来讲解,那么他们几个的收敛速度比较快呢?请看下图:
观察图中我们发现:
- SGD随机梯度下降算法收敛的速度是最慢的;
- Adadelta收敛得速度是最快的;
- Momentum所走的路程是最远的,会冲出最低点
我们再来看看在马鞍型数据下,它们各自的表现又如何呢:
三,重点介绍三种常用优化器
1. tf.train.GradientDescentOptimizer(梯度下降算法)
tf.train.GradientDescentOptimizer()使用随机梯度下降算法,使参数沿着 梯度的反方向,即总损失减小的方向移动,实现更新参数。
2. tf.train.MomentumOptimizer(动量梯度下降算法 )
tf.train.MomentumOptimizer()在更新参数时,利用了超参数,参数更新公式是:
其中,?为学习率,超参数为?,?为参数,?(??−1 )为损失函数的梯度。
3. tf.train.AdamOptimizer(Adam优化算法)
tf.train.AdamOptimizer()是利用自适应学习率的优化算法,Adam 算法和随 机梯度下降算法不同。随机梯度下降算法保持单一的学习率更新所有的参数,学 习率在训练过程中并不会改变。而 Adam 算法通过计算梯度的一阶矩估计和二 阶矩估计而为不同的参数设计独立的自适应性学习率。
学习率:决定每次参数更新的幅度。
优化器中都需要一个叫做学习率的参数,使用时,如果学习率选择过大会出现震 荡不收敛的情况,如果学习率选择过小,会出现收敛速度慢的情况。我们可以选 个比较小的值填入,比如 0.01、0.001