3

tensorflow入门学习,优化器(optimizer)的作用是什么,tensorflow有哪些优化器(九...

 3 years ago
source link: https://blog.popkx.com/tensorflow-study-use-of-optimizer-and-optimizers-tensorflow-has/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

tensorflow入门学习,优化器(optimizer)的作用是什么,tensorflow有哪些优化器(九)

发表于 2018-06-30 22:06:00   |   已被 访问: 2,128 次   |   分类于:   tensorflow   |   暂无评论

从前面几节的实例中可以看出,优化器(optimizer)似乎是构建监督型 tensorflow 神经网络必不可少的,例如第三节中的AdamOptimizer,以及第六节中的 GradientDescentOptimizer,它们的作用是什么呢?tensorflow 有哪些优化器呢?本节将介绍这些。

优化器(optimizer)的作用

通过前面几节的介绍,发现这类人工神经网络是由很多神经元组成的,每个神经元都有自己的权重w,表示在某项任务中,该神经元的重要程度。假设输入数据为x,那么预测值即为:

prediction = wx + b             # b 是偏置量

训练的过程,其实就是计算合适的w和b的过程。那么,什么样的w和b是“合适”的呢?答案就是预测值与真实值相差不大。例如定义损失函数:

loss = sum(|(y_ - prediction)|)

即,真实值减去预测值,取绝对值后求和。训练的过程,可以粗略的理解成:调节 w 和 b, 使 loss 尽可能小。对w和b参数的调节,就是优化器(optimizer)需要做的,这就是优化器的作用。

上面这种 loss 的定义只是一种比较简单的例子,当然有其他定义方式。例如的第六节中的cross_entropy(交叉熵),它是用来描述两种分布的接近程度的,越接近,交叉熵越小。

tensorflow 有哪些优化器(optimizer)

Tensorflow 官方提供了 7 种优化器:

  • GradientDescentOptimizer
  • AdagradOptimizer
  • AdagradDAOptimizer
  • MomentumOptimizer
  • AdamOptimizer
  • FtrlOptimizer
  • RMSPropOptimize

优化器的目的都是为了训练网络的,这 7 种优化器在对资源的需求上,和训练速度上有些差异,因此需要根据实际情况选用。下图是几种优化器的训练速度对比,能够看出差异:在这次应用中, SGD 虽然路径最短,但是速度却很慢,其他几种高阶优化器,速度快很多。

下面介绍几个常用的优化器的构造函数,构造函数告诉我们如何构建这些优化器。

1. GradientDescentOptimizer

这个就是最基础的基于梯度下降法的优化器了。GradientDescentOptimizer 需要用到全部的样本,速度比较慢,但是迭代到一定次数最终能够找到最优解,GDO 有个别名 SGD?。建立时,构造函数为:

tf.train.GradientDescentOptimizer.__init__(learning_rate,
use_locking=False, name='GrandientDescent')

# learning_rate:学习率
# use_locking:用锁
# name:名字

2. MomentumOptimizer

MomentumOptimizer 利用了上一次的调整量,因为它考虑了过去的值的影响,有点像物理学中的小球运动会受到之前动量的影响,所以被称为Momentum(动量)优化器。如果上一次梯度显示是正方向,这次也是正方向,那么这次的调整量将加上一定的幅度。如果上次和这次的梯度方向相反,则削减变动幅度,使之更加平稳和快速的往最小点移动。MomentumOptimizer 的构造函数如下:

tf.train.MomentumOptimizer.__init__(learning_rate, momentum,
use_locking=False, name='Momentum', use_nesterov=False)

# momentum: 动量,可以是一个张量,也可以是一个浮点数值

3. AdamOptimizer

AdamOptimizer 结合了 MomentumOptimizer 和 RMSPropOptimize,利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。它对学习率有个约束,使得每一次学习率都有个确定范围,因此参数比较平稳。构造函数如下:

tf.train.AdamOptimizer.__init__(learning_rate=0.001, beta1=0.9,
beta2=0.999, epsilon=1e-08, use_locking=False, name='Adam')

# beta1, beta2:对第一和第二动量估计的指数衰减率,可以是张量,也可是是浮点数值。
# epsilon:非常小的常量。

其实更直观的可以参考下面这两张动图,出处找不到了,如果侵权,请联系我删除。

阅读更多:   tensorflow


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK