Tensorflow常见优化器总结
强烈建议结合《梯度下降算法总览》来阅读本文,两者关系密切,相辅相成。
1.1 构造函数总结
优化器的构造函数就是定义一个优化器,换句话说,就是在计算图中添加了一个包含优化器的图节点,在执行计算图时才会被初始化。
-
tf.train.GradientDescentOptimizer(learning_rate, use_locking=False, name='GradientDescent')
作用:
实现梯度下降算法的优化器。
参数解释:
learning_rate:用于表示梯度下降算法中的学习率,是一个浮点数;
use_locking:可选布尔型参数,设置为真可防止异步操作更新学习率;
name:可选参数,操作的名字前缀,默认为"GradientDescent"。 -
tf.train.MomentumOptimizer(learning_rate, momentum, use_locking=False, name='Momentum', use_nesterov=False)
作用:
实现Momentum算法的优化器。
参数解释:
learning_rate:表示优化算法中的学习率(梯度系数),是一个浮点数;
momentum:表示优化算法中的动量学习率(动量系数),是一个浮点数;
use_locking:可选布尔型参数,设置为真可防止异步操作更新学习率;
name:可选参数,操作的名字前缀,默认为"Momentum";
use_nesterov:可选参数,默认False,即不使用 Nesterov Momentum算法。 -
tf.train.AdagradOptimizer(learning_rate, initial_accumulator_value=0.1, use_locking=False, name='Adagrad')
作用:
实现Adagrad算法的优化器。
参数解释:
learning_rate:表示优化算法中的全局学习率(梯度系数的分子,即 ϵ \epsilon ϵ),是一个浮点数;
initial_accumulator_value:表示初始累积量即Adagrad算法梯度更新公式中分母的初始量 δ \delta δ;
use_locking:可选布尔型参数,设置为真可防止异步操作更新学习率;
name:可选参数,操作的名字前缀,默认为"Adagrad"; -
tf.train.AdadeltaOptimizer(learning_rate=0.001, rho=0.95, epsilon=1e-08, use_locking=False, name='Adadelta')
作用:
实现Adadelta算法的优化器。
参数解释:
learning_rate:表示优化算法中的初始学习率(即 ϵ \epsilon ϵ),是一个浮点数;
rho:即Adadelta算法中上一阶段梯度平方和的系数 ρ \rho ρ,也称为衰减率,是一个浮点数;
epsilon:即Adadelta算法学习率中防止分母为零而添加的 ϵ \epsilon ϵ;
use_locking:同上;
name:同上。 -
tf.train.AdamOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name='Adam')
作用:
实现Adam算法的优化器。
参数解释:
learning_rate:表示优化算法中的全局学习率(即Adam梯度更新公式的 α \alpha α),是一个浮点数;
beta1:在Adam算法的更新公式中表示为动量 r r r 的指数衰减率 ρ 1 \rho_1 ρ1,是一个浮点数;
beta2:在Adam算法的更新公式中表示为动量 m m m 的指数衰减率 ρ 2 \rho_2 ρ2,是一个浮点数;
epsilon:为防止分母为零而添加的一个常数,表示为公式中的 ϵ \epsilon ϵ;
use_locking和name:同上。
除了以上5种优化器外,Tensorflow中还有优化器tf.train.RMSPropOptimizer
,tf.train.AdagradDAOptimizer
和tf.train.ProximalAdagradOptimizer
等,由于精力有限就不做总结,可类比已经总结的五个优化器参考Tensorflow的API文档自行进行学习。
1.2 优化器的方法
各优化器包含的方法都差不多,用于获取优化器的名字,均方误差的最小值等。主要包含如下几种:
optimizer.apply_gradients()
optimizer.compute_gradients()
optimizer.get_name()
optimizer.get_slot()
optimizer.get_slot_names()
optimizer.minimize()
optimizer.variables()
具体用法以后再进行总结。
1.3 参考
[1] .Tensorflow的API文档
[2] accumulate_zhang.tensorflow中的优化器:优化器Optimizer