fluid.optimizer

SourceEnglish

Adadelta

SourceEnglish

paddle.fluid.optimizer.Adadelta

AdadeltaOptimizer 的别名

Adagrad

SourceEnglish

paddle.fluid.optimizer.Adagrad

AdagradOptimizer 的别名

AdagradOptimizer

SourceEnglish

class paddle.fluid.optimizer.AdagradOptimizer(learning_rate, epsilon=1e-06, regularization=None, name=None)

Adaptive Gradient Algorithm(Adagrad)

更新如下:

[\begin{split}moment_out &= moment + grad grad\param_out&= param - \frac{learning_rate grad}{\sqrt{moment_out} + \epsilon}\end{split}]

原始论文(http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf)没有epsilon属性。在我们的实现中也作了如下更新:http://cs231n.github.io/neural-networks-3/#ada 用于维持数值稳定性,避免除数为0的错误发生。

参数:

  • learning_rate (float|Variable)-学习率,用于更新参数。作为数据参数,可以是一个浮点类型值或者有一个浮点类型值的变量
  • epsilon (float) - 维持数值稳定性的短浮点型值
  • regularization - 规则化函数,例如fluid.regularizer.L2DecayRegularizer
  • name - 名称前缀(可选)

代码示例
  1. optimizer = fluid.optimizer.Adagrad(learning_rate=0.2)
  2. optimizer.minimize(cost)

Adam

SourceEnglish

paddle.fluid.optimizer.Adam

AdamOptimizer 的别名

Adamax

SourceEnglish

paddle.fluid.optimizer.Adamax

AdamaxOptimizer 的别名

AdamaxOptimizer

SourceEnglish

class paddle.fluid.optimizer.AdamaxOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, regularization=None, name=None)

我们参考Adam论文第7节中的Adamax优化: https://arxiv.org/abs/1412.6980 , Adamax是基于无穷大范数的Adam算法的一个变种。

Adamax 更新规则:

[\begin{split}\t = t + 1\end{split}]

[moment_out=\beta_1∗moment+(1−\beta_1)∗grad]

[inf_norm_out=\max{(\beta_2∗inf_norm+ϵ, \left|grad\right|)}]

[learning_rate=\frac{learning_rate}{1-\beta_1^t}]

[\begin{split}param_out=param−learning_rate*\frac{moment_out}{inf_norm_out}\\end{split}]

论文中没有 epsilon 参数。但是,为了数值稳定性, 防止除0错误, 增加了这个参数

参数:

  • learning_rate (float|Variable) - 用于更新参数的学习率。可以是浮点值,也可以是具有一个浮点值作为数据元素的变量。
  • beta1 (float) - 第1阶段估计的指数衰减率
  • beta2 (float) - 第2阶段估计的指数衰减率。
  • epsilon (float) -非常小的浮点值,为了数值的稳定性质
  • regularization - 正则化器,例如 fluid.regularizer.L2DecayRegularizer
  • name - 可选的名称前缀。

代码示例
  1. optimizer = fluid.optimizer.Adamax(learning_rate=0.2)
  2. optimizer.minimize(cost)

注解

目前 AdamaxOptimizer 不支持 sparse parameter optimization.

AdamOptimizer

SourceEnglish

paddle.fluid.optimizer. AdamOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, regularization=None, name=None)

该函数实现了自适应矩估计优化器,介绍自 Adam论文 的第二节。Adam是一阶基于梯度下降的算法,基于自适应低阶矩估计。Adam更新如下:

[\begin{split}t & = t + 1\moment_out & = {\beta}_1 moment + (1 - {\beta}_1) grad\inf_norm_out & = max({\beta}_2 inf_norm + \epsilon, |grad|)\learning_rate & = \frac{learning_rate}{1 - {\beta}_1^t}\param_out & = param - learning_rate \frac{moment_out}{inf_norm_out}\end{split}]

参数:

  • learning_rate (float|Variable)-学习率,用于更新参数。作为数据参数,可以是一个浮点类型值或有一个浮点类型值的变量
  • beta1 (float)-一阶矩估计的指数衰减率
  • beta2 (float)-二阶矩估计的指数衰减率
  • epsilon (float)-保持数值稳定性的短浮点类型值
  • regularization - 规则化函数,例如’‘fluid.regularizer.L2DecayRegularizer
  • name - 可选名称前缀

代码示例
  1. optimizer = fluid.optimizer.Adam(learning_rate=0.2)
  2. optimizer.minimize(cost)

DecayedAdagrad

SourceEnglish

paddle.fluid.optimizer.DecayedAdagrad

DecayedAdagradOptimizer 的别名

DecayedAdagradOptimizer

SourceEnglish

class paddle.fluid.optimizer.DecayedAdagradOptimizer(learning_rate, decay=0.95, epsilon=1e-06, regularization=None, name=None)

Decayed Adagrad Optimizer

原始论文

原始论文: http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf 中没有 epsilon 参数。但是,为了数值稳定性, 防止除0错误, 增加了这个参数

[moment_out = decaymoment+(1-decay)grad*grad]

[param_out=param-\frac{learning_rate*grad}{\sqrt{moment_out+\epsilon }}]

参数:

  • learning_rate (float|Variable) - 用于更新参数的学习率。可以是浮点值,也可以是具有一个浮点值作为数据元素的变量。
  • decay (float) – 衰减率
  • regularization - 一个正则化器,例如 fluid.regularizer.L2DecayRegularizer
  • epsilon (float) - 非常小的浮点值,为了数值稳定性
  • name — 可选的名称前缀。

代码示例
  1. optimizer = fluid.optimizer.DecayedAdagrad(learning_rate=0.2)
  2. optimizer.minimize(cost)

注解

DecayedAdagradOptimizer 不支持 sparse parameter optimization

Ftrl

SourceEnglish

paddle.fluid.optimizer.Ftrl

FtrlOptimizer 的别名

FtrlOptimizer

SourceEnglish

class paddle.fluid.optimizer.FtrlOptimizer(learning_rate, l1=0.0, l2=0.0, lr_power=-0.5, regularization=None, name=None)

FTRL (Follow The Regularized Leader) Optimizer.

FTRL 原始论文: ( https://www.eecs.tufts.edu/~dsculley/papers/ad-click-prediction.pdf)

[\begin{split}&\qquad new_accum=squared_accum+grad^2\\&\qquad if(lr_power==−0.5):\&\qquad \qquad linear_accum+=grad-\frac{\sqrt{new_accum}-\sqrt{squared_accum}}{learning_rateparam}\&\qquad else:\&\qquad \qquad linear_accum+=grad-\frac{new_accum^{-lr_power}-accum^{-lr_power}}{learning_rateparam}\\&\qquad x=l1sign(linear_accum)−linear_accum\\&\qquad if(lr_power==−0.5):\&\qquad \qquad y=\frac{\sqrt{new_accum}}{learning_rate}+(2l2)\&\qquad \qquad pre_shrink=\frac{x}{y}\&\qquad \qquad param=(abs(linear_accum)>l1).select(pre_shrink,0.0)\&\qquad else:\&\qquad \qquad y=\frac{new_accum^{-lr_power}}{learning_rate}+(2*l2)\&\qquad \qquad pre_shrink=\frac{x}{y}\&\qquad \qquad param=(abs(linear_accum)>l1).select(pre_shrink,0.0)\\&\qquad squared_accum+=grad^2\end{split}]

参数:

  • learning_rate (float|Variable)-全局学习率。
  • l1 (float) - 暂无,请等待后期更新
  • l2 (float) - 暂无,请等待后期更新
  • lr_power (float) - 暂无,请等待后期更新
  • regularization - 正则化器,例如 fluid.regularizer.L2DecayRegularizer
  • name — 可选的名称前缀
抛出异常:
  • ValueError - 如果 learning_rate , rho , epsilon , momentum 为 None.

  • 代码示例
    1. optimizer = fluid.optimizer.Ftrl(0.0001)
    2. _, params_grads = optimizer.minimize(cost)

    注解

    目前, FtrlOptimizer 不支持 sparse parameter optimization

    LarsMomentum

    SourceEnglish

    paddle.fluid.optimizer.LarsMomentum

    fluid.optimizer.LarsMomentumOptimizer 的别名

    LarsMomentumOptimizer

    SourceEnglish

    paddle.fluid.optimizer.LarsMomentumOptimizer(learning_rate, momentum, lars_coeff=0.001, lars_weight_decay=0.0005, regularization=None, name=None)

    LARS支持的Momentum优化器

    公式作如下更新:

    [\begin{split}& local_learning_rate = learning_rate lars_coeff \frac{||param||}{||gradient|| + lars_weight_decay ||param||}\& velocity = mu velocity + local_learning_rate (gradient + lars_weight_decay param)\& param = param - velocity\end{split}]

    参数:

    • learning_rate (float|Variable) - 学习率,用于参数更新。作为数据参数,可以是浮点型值或含有一个浮点型值的变量
    • momentum (float) - 动量因子
    • lars_coeff (float) - 定义LARS本地学习率的权重
    • lars_weight_decay (float) - 使用LARS进行衰减的权重衰减系数
    • regularization - 正则化函数,例如 fluid.regularizer.L2DecayRegularizer
    • name - 名称前缀,可选

    代码示例:
    1. optimizer = fluid.optimizer.LarsMomentum(learning_rate=0.2, momentum=0.1, lars_weight_decay=0.001)
    2. optimizer.minimize(cost)

    ModelAverage

    SourceEnglish

    class paddle.fluid.optimizer.ModelAverage(average_window_rate, min_average_window=10000, max_average_window=10000, regularization=None, name=None)

    在滑动窗口中累积参数的平均值。平均结果将保存在临时变量中,通过调用 apply() 方法可应用于当前模型的参数变量。使用 restore() 方法恢复当前模型的参数值。

    平均窗口的大小由 average_window_ratemin_average_windowmax_average_window 以及当前更新次数决定。

    参数:

    • average_window_rate – 窗口平均速率
    • min_average_window – 平均窗口大小的最小值
    • max_average_window – 平均窗口大小的最大值
    • regularization – 正则化器,例如 fluid.regularizer.L2DecayRegularizer
    • name – 可选的名称前缀

    代码示例
    1. optimizer = fluid.optimizer.Momentum()
    2. optimizer.minimize(cost)
    3. model_average = fluid.optimizer.ModelAverage(0.15,
    4. min_average_window=10000,
    5. max_average_window=20000)
    6. for pass_id in range(args.pass_num):
    7. for data in train_reader():
    8. exe.run(fluid.default_main_program()...)
    9.  
    10. with model_average.apply(exe):
    11. for data in test_reader():
    12. exe.run(inference_program...)

    apply(*args, **kwds)

    将平均值应用于当前模型的参数。

    restore(executor)

    恢复当前模型的参数值

    Momentum

    SourceEnglish

    paddle.fluid.optimizer.Momentum

    MomentumOptimizer 的别名

    MomentumOptimizer

    SourceEnglish

    class paddle.fluid.optimizer.MomentumOptimizer(learning_rate, momentum, use_nesterov=False, regularization=None, name=None)

    含有速度状态的Simple Momentum 优化器

    该优化器含有牛顿动量标志,公式更新如下:

    [\begin{split}& velocity = mu velocity + gradient\& if (use_nesterov):\&\quad param = param - (gradient + mu velocity) learning_rate\& else:\&\quad param = param - learning_rate velocity\end{split}]

    参数:

    • learning_rate (float|Variable) - 学习率,用于参数更新。作为数据参数,可以是浮点型值或含有一个浮点型值的变量
    • momentum (float) - 动量因子
    • use_nesterov (bool) - 赋能牛顿动量
    • regularization - 正则化函数,比如fluid.regularizer.L2DecayRegularizer
    • name - 名称前缀(可选)

    代码示例
    1. optimizer = fluid.optimizer.Momentum(learning_rate=0.2, momentum=0.1)
    2. optimizer.minimize(cost)

    RMSPropOptimizer

    SourceEnglish

    class paddle.fluid.optimizer.RMSPropOptimizer(learning_rate, rho=0.95, epsilon=1e-06, momentum=0.0, centered=False, regularization=None, name=None)

    均方根传播(RMSProp)法是一种未发表的,自适应学习率的方法。原演示幻灯片中提出了RMSProp:[http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf]中的第29张。等式如下所示:

    [\begin{split}r(w, t) & = \rho r(w, t-1) + (1 - \rho)(\nabla Q{i}(w))^2\w & = w - \frac{\eta} {\sqrt{r(w,t) + \epsilon}} \nabla Q{i}(w)\end{split}]

    第一个等式计算每个权重平方梯度的移动平均值,然后将梯度除以 (sqrtv(w,t)) 。

    [\begin{split}r(w, t) & = \rho r(w, t-1) + (1 - \rho)(\nabla Q{i}(w))^2\v(w, t) & = \beta v(w, t-1) +\frac{\eta} {\sqrt{r(w,t) +\epsilon}} \nabla Q{i}(w)\ w & = w - v(w, t)\end{split}]

    如果居中为真:

    [\begin{split}r(w, t) & = \rho r(w, t-1) + (1 - \rho)(\nabla Q{i}(w))^2\g(w, t) & = \rho g(w, t-1) + (1 -\rho)\nabla Q{i}(w)\v(w, t) & = \beta v(w, t-1) + \frac{\eta} {\sqrt{r(w,t) - (g(w, t))^2 +\epsilon}} \nabla Q_{i}(w)\ w & = w - v(w, t)\end{split}]

    其中, (ρ) 是超参数,典型值为0.9,0.95等。 (beta) 是动量术语。 (epsilon) 是一个平滑项,用于避免除零,通常设置在1e-4到1e-8的范围内。

    参数:

    • learning_rate (float) - 全局学习率。
    • rho (float) - rho是等式中的 (rho) ,默认设置为0.95。
    • epsilon (float) - 等式中的epsilon是平滑项,避免被零除,默认设置为1e-6。
    • momentum (float) - 方程中的β是动量项,默认设置为0.0。
    • centered (bool) - 如果为True,则通过梯度的估计方差,对梯度进行归一化;如果False,则由未centered的第二个moment归一化。将此设置为True有助于模型训练,但会消耗额外计算和内存资源。默认为False。
    • regularization - 正则器项,如 fluid.regularizer.L2DecayRegularizer
    • name - 可选的名称前缀。
    抛出异常:
  • ValueError -如果 learning_raterhoepsilonmomentum 为None。

  • 示例代码
    1. optimizer = fluid.optimizer.RMSProp(0.0001)
    2. _, params_grads = optimizer.minimize(cost)

    SGD

    SourceEnglish

    paddle.fluid.optimizer.SGD

    SGDOptimizer 的别名

    SGDOptimizer

    SourceEnglish

    class paddle.fluid.optimizer.SGDOptimizer(learning_rate, regularization=None, name=None)

    随机梯度下降算法的优化器

    [\begin{split}\param_out=param-learning_rate*grad\\end{split}]

    参数:

    • learning_rate (float|Variable) - 用于更新参数的学习率。可以是浮点值,也可以是具有一个浮点值作为数据元素的变量。
    • regularization - 一个正则化器,例如 fluid.regularizer.L2DecayRegularizer
    • name - 可选的名称前缀。

    代码示例
    1. sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.2)
    2. sgd_optimizer.minimize(cost)

    原文: http://paddlepaddle.org/documentation/docs/zh/1.3/api_cn/optimizer_cn.html