TensorFlow优化算法 tf.train.AdamOptimizer 简介

AdamOptimizer是TensorFlow中实现Adam算法的优化器。Adam即Adaptive Moment Estimation(自适应矩估计),是一个寻找全局最优点的优化算法,引入了二次梯度校正。Adam 算法相对于其它种类算法有一定的优越性,是比较常用的算法之一。

一、算法流程

TensorFlow优化算法 tf.train.AdamOptimizer 简介_第1张图片

初始化:

TensorFlow优化算法 tf.train.AdamOptimizer 简介_第2张图片

更新规则:

TensorFlow优化算法 tf.train.AdamOptimizer 简介_第3张图片

二、 参数定义

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

参数含义:

  • learning_rate: A Tensor or a floating point value. (学习率)
  • beta1: A float value or a constant float tensor. (一阶矩估计的指数衰减率)
  • beta2: A float value or a constant float tensor. (二阶矩估计的指数衰减率)
  • epsilon: A small constant for numerical stability. (一个非常小的数,防止除以零)
  • use_locking: 如果为真,则使用锁进行更新操作。
  • name: 使用梯度时创建的操作的可选名称,默认为 "Adam"。

三、可调用的方法

下面仅列出一些方法,具体见官方文档(文末参考文献)。

1.apply_gradients

功能:将梯度应用于变量。

apply_gradients(
    grads_and_vars,
    global_step=None,
    name=None
)

2.compute_gradients

功能:计算 var_list 中变量的 loss 的梯度。

compute_gradients(
    loss,
    var_list=None,
    gate_gradients=GATE_OP,
    aggregation_method=None,
    colocate_gradients_with_ops=False,
    grad_loss=None
)

3.get_name

get_name()

4.get_slot

功能:返回由 Optimizer 为 var 创建的名为name的slot。

get_slot(
    var,
    name
)

5.get_slot_names

功能:返回由 Optimizer 创建的 slot 名称的列表。

get_slot_names()

6.minimize

功能:通过更新 var_list 添加操作以最大限度地最小化 loss。

minimize(
    loss,
    global_step=None,
    var_list=None,
    gate_gradients=GATE_OP,
    aggregation_method=None,
    colocate_gradients_with_ops=False,
    name=None,
    grad_loss=None
)

7.variables

功能:编码Optimizer当前状态的变量列表。

variables()

四、其它

相比于SGD算法:

  1. 不容易陷于局部优点
  2. 速度更快,学习效果更为有效
  3. 纠正其他优化技术中存在的问题,如学习率消失或是高方差的参数更新导致损失函数波动较大等问题。

此外,Adam 的调参相对简单,默认参数就可以处理绝大部分的问题。

 

参考文献:

https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer

http://www.tensorfly.cn/tfdoc/api_docs/python/train.html#AdamOptimizer

你可能感兴趣的:(python,TensorFlow)