未验证 提交 54db6cf0 编写于 作者: A Aurelius84 提交者: GitHub

Add learning_rate in NoamDecay (#1940)

* Add learning_rate in NoamDecay test=develop

* Update sample code test=develop
上级 107d113c
...@@ -5,7 +5,7 @@ NoamDecay ...@@ -5,7 +5,7 @@ NoamDecay
**注意:该API仅支持【动态图】模式** **注意:该API仅支持【动态图】模式**
.. py:class:: paddle.fluid.dygraph.NoamDecay(d_model, warmup_steps, begin=1, step=1, dtype='float32') .. py:class:: paddle.fluid.dygraph.NoamDecay(d_model, warmup_steps, begin=1, step=1, dtype='float32', learning_rate=1.0)
该接口提供Noam衰减学习率的功能。 该接口提供Noam衰减学习率的功能。
...@@ -13,7 +13,7 @@ Noam衰减的计算方式如下。 ...@@ -13,7 +13,7 @@ Noam衰减的计算方式如下。
.. math:: .. math::
decayed\_learning\_rate = d_{model}^{-0.5} * min(global\_steps^{-0.5}, global\_steps * warmup\_steps^{-1.5}) decayed\_learning\_rate = learning\_rate * d_{model}^{-0.5} * min(global\_steps^{-0.5}, global\_steps * warmup\_steps^{-1.5})
关于Noam衰减的更多细节请参考 `attention is all you need <https://arxiv.org/pdf/1706.03762.pdf>`_ 关于Noam衰减的更多细节请参考 `attention is all you need <https://arxiv.org/pdf/1706.03762.pdf>`_
...@@ -28,6 +28,7 @@ Noam衰减的计算方式如下。 ...@@ -28,6 +28,7 @@ Noam衰减的计算方式如下。
- **begin** (int,可选) – 起始步。即以上运算式子中global_steps的初始值。默认值为0。 - **begin** (int,可选) – 起始步。即以上运算式子中global_steps的初始值。默认值为0。
- **step** (int,可选) – 步大小。即以上运算式子中global_steps的递增值。默认值为1。 - **step** (int,可选) – 步大小。即以上运算式子中global_steps的递增值。默认值为1。
- **dtype** (str,可选) – 学习率值的数据类型,可以为"float32", "float64"。默认值为"float32"。 - **dtype** (str,可选) – 学习率值的数据类型,可以为"float32", "float64"。默认值为"float32"。
- **learning_rate** (Variable|float|int,可选) - 初始学习率。如果类型为Variable,则为shape为[1]的Tensor,数据类型为float32或float64;也可以是python的int类型。默认值为1.0。
返回: 无 返回: 无
...@@ -39,7 +40,9 @@ Noam衰减的计算方式如下。 ...@@ -39,7 +40,9 @@ Noam衰减的计算方式如下。
warmup_steps = 100 warmup_steps = 100
learning_rate = 0.01 learning_rate = 0.01
with fluid.dygraph.guard(): with fluid.dygraph.guard():
emb = fluid.dygraph.Embedding([10, 10])
optimizer = fluid.optimizer.SGD( optimizer = fluid.optimizer.SGD(
learning_rate = fluid.dygraph.NoamDecay( learning_rate = fluid.dygraph.NoamDecay(
1/(warmup_steps *(learning_rate ** 2)), 1/(warmup_steps *(learning_rate ** 2)),
warmup_steps) ) warmup_steps),
parameter_list = emb.parameters())
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
noam_decay noam_decay
------------------------------- -------------------------------
.. py:function:: paddle.fluid.layers.noam_decay(d_model,warmup_steps) .. py:function:: paddle.fluid.layers.noam_decay(d_model, warmup_steps)
Noam衰减方法 Noam衰减方法
...@@ -14,11 +14,12 @@ noam衰减的numpy实现如下: ...@@ -14,11 +14,12 @@ noam衰减的numpy实现如下:
import paddle.fluid as fluid import paddle.fluid as fluid
import numpy as np import numpy as np
# 设置超参数 # 设置超参数
base_lr = 0.01
d_model = 2 d_model = 2
current_steps = 20 current_steps = 20
warmup_steps = 200 warmup_steps = 200
# 计算 # 计算
lr_value = np.power(d_model, -0.5) * np.min([ lr_value = base_lr * np.power(d_model, -0.5) * np.min([
np.power(current_steps, -0.5), np.power(current_steps, -0.5),
np.power(warmup_steps, -1.5) * current_steps]) np.power(warmup_steps, -1.5) * current_steps])
...@@ -27,6 +28,7 @@ noam衰减的numpy实现如下: ...@@ -27,6 +28,7 @@ noam衰减的numpy实现如下:
参数: 参数:
- **d_model** (Variable|int) - 模型的输入、输出向量特征维度。类型可设置为标量Tensor,或int值。 - **d_model** (Variable|int) - 模型的输入、输出向量特征维度。类型可设置为标量Tensor,或int值。
- **warmup_steps** (Variable|int) - 预热步数,类型可设置为标量Tensor,或int值。 - **warmup_steps** (Variable|int) - 预热步数,类型可设置为标量Tensor,或int值。
- **learning_rate** (Variable|float|int,可选) - 初始学习率。如果类型为Variable,则为shape为[1]的Tensor,数据类型为float32或float64;也可以是python的int类型。默认值为1.0。
返回:衰减的学习率 返回:衰减的学习率
...@@ -41,7 +43,8 @@ noam衰减的numpy实现如下: ...@@ -41,7 +43,8 @@ noam衰减的numpy实现如下:
learning_rate = 0.01 learning_rate = 0.01
lr = fluid.layers.learning_rate_scheduler.noam_decay( lr = fluid.layers.learning_rate_scheduler.noam_decay(
1/(warmup_steps *(learning_rate ** 2)), 1/(warmup_steps *(learning_rate ** 2)),
warmup_steps) warmup_steps,
learning_rate)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册