提交 a2a68369 编写于 作者: D DuYao 提交者: hong

update GRUUnit Chinese document (#1341)

* update gru, test=document_fix

* update, test=develop

* update, test=document_fix

* update, test=document_fix

* update, test=document_fix

* update, test=document_fix

* update, refer to the corresponding static graph api, test=document_fix
上级 143ae863
......@@ -5,62 +5,49 @@ GRUUnit
.. py:class:: paddle.fluid.dygraph.GRUUnit(name_scope, size, param_attr=None, bias_attr=None, activation='tanh', gate_activation='sigmoid', origin_mode=False, dtype='float32')
GRU单元层。GRU执行步骤基于如下等式:
该接口用于构建 ``GRU(Gated Recurrent Unit)`` 类的一个可调用对象,具体用法参照 ``代码示例`` 。其用于完成单个时间步内GRU的计算,支持以下两种计算方式:
如果origin_mode为True,则该运算公式来自论文
`Learning Phrase Representations using RNN Encoder-Decoder for Statistical
Machine Translation <https://arxiv.org/pdf/1406.1078.pdf>`_ 。
公式如下:
.. math::
u_t=actGate(xu_t+W_{u}h_{t-1}+b_u)
.. math::
r_t=actGate(xr_t+W_{r}h_{t-1}+b_r)
.. math::
m_t=actNode(xm_t+W_{c}dot(r_t,h_{t-1})+b_m)
.. math::
h_t=dot((1-u_t),m_t)+dot(u_t,h_{t-1})
如果origin_mode为False,则该运算公式来自论文
如果origin_mode为True,则使用的运算公式来自论文
`Learning Phrase Representations using RNN Encoder Decoder for Statistical Machine Translation <https://arxiv.org/pdf/1406.1078.pdf>`_ 。
.. math::
u_t & = actGate(xu_{t} + W_u h_{t-1} + b_u)\\
r_t & = actGate(xr_{t} + W_r h_{t-1} + b_r)\\
m_t & = actNode(xm_t + W_c dot(r_t, h_{t-1}) + b_m)\\
h_t & = dot((1-u_t), h_{t-1}) + dot(u_t, m_t)
GRU单元的输入包括 :math:`z_t` , :math:`h_{t-1}` 。在上述等式中, :math:`z_t` 会被分割成三部分: :math:`xu_t` 、 :math:`xr_t` 和 :math:`xm_t` 。
这意味着要为一批输入实现一个全GRU层,我们需要采用一个全连接层,才能得到 :math:`z_t=W_{fc}x_t` 。
:math:`u_t` 和 :math:`r_t` 分别代表了GRU神经元的update gates(更新门)和reset gates(重置门)。
和LSTM不同,GRU少了一个门(它没有LSTM的forget gate)。但是它有一个叫做中间候选隐藏状态(intermediate candidate hidden output)的输出,
记为 :math:`m_t` 。 该层有三个输出: :math:`h_t, dot(r_t,h_{t-1})` 以及 :math:`u_t,r_t,m_t` 的连结(concatenation)。
u_t & = act_g(W_{ux}x_{t} + W_{uh}h_{t-1} + b_u)\\
r_t & = act_g(W_{rx}x_{t} + W_{rh}h_{t-1} + b_r)\\
\tilde{h_t} & = act_c(W_{cx}x_{t} + W_{ch}(r_t \odot h_{t-1}) + b_c)\\
h_t & = u_t \odot h_{t-1} + (1-u_t) \odot \tilde{h_t}
如果origin_mode为False,则使用的运算公式来自论文
`Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling <https://arxiv.org/pdf/1412.3555.pdf>`_ 。
公式如下:
参数:
- **name_scope** (str) – 该类的名称
- **size** (int) – 输入数据的维度
- **param_attr** (ParamAttr|None) – 可学习的隐藏层权重矩阵的参数属性。
注意:
- 该权重矩阵形为 :math:`(T×3D)` , :math:`D` 是隐藏状态的规模(hidden size)
- 该权重矩阵的所有元素由两部分组成, 一是update gate和reset gate的权重,形为 :math:`(D×2D)` ;二是候选隐藏状态(candidate hidden state)的权重矩阵,形为 :math:`(D×D)`
如果该函数参数值为None或者 ``ParamAttr`` 类中的属性之一,gru_unit则会创建一个 ``ParamAttr`` 类的对象作为param_attr。如果param_attr没有被初始化,那么会由Xavier来初始化它。默认值为None
- **bias_attr** (ParamAttr|bool|None) - GRU的bias变量的参数属性。形为 :math:`(1x3D)` 的bias连结(concatenate)在update gates(更新门),reset gates(重置门)以及candidate calculations(候选隐藏状态计算)中的bias。如果值为False,那么上述三者将没有bias参与运算。若值为None或者 ``ParamAttr`` 类中的属性之一,gru_unit则会创建一个 ``ParamAttr`` 类的对象作为 bias_attr。如果bias_attr没有被初始化,那它会被默认初始化为0。默认值为None。
- **activation** (str) – 神经元 “actNode” 的激励函数(activation)类型。默认类型为‘tanh’
- **gate_activation** (str) – 门 “actGate” 的激励函数(activation)类型。 默认类型为 ‘sigmoid’。
- **dtype** (str) – 该层的数据类型,默认为‘float32’。
.. math::
u_t & = act_g(W_{ux}x_{t} + W_{uh}h_{t-1} + b_u)\\
r_t & = act_g(W_{rx}x_{t} + W_{rh}h_{t-1} + b_r)\\
\tilde{h_t} & = act_c(W_{cx}x_{t} + W_{ch}(r_t \odot h_{t-1}) + b_c)\\
h_t & = (1-u_t) \odot h_{t-1} + u_t \odot \tilde{h_t}
返回: hidden value(隐藏状态的值),reset-hidden value(重置隐藏状态值),gate values(门值)
返回类型: 元组(tuple)
其中, :math:`x_t` 为当前时间步的输入,:math:`h_{t-1}` 为前一时间步的隐状态 ``hidden``; :math:`u_t` 、 :math:`r_t` 、 :math:`\tilde{h_t}` 和 :math:`h_t` 分别代表了GRU单元中update gate(更新门)、reset gate(重置门)、candidate hidden(候选隐状态)和隐状态输出; :math:`\odot` 为逐个元素相乘;
:math:`W_{uh}, b_u` 、 :math:`W_{rh}, b_r` 和 :math:`W_{ch}, b_c` 分别代表更新门、重置门和候选隐状态在计算时使用的权重矩阵和偏置。在实现上,三个权重矩阵合并为一个维度为 :math:`[D, D \times 3]` 的Tensor存放。
参数:
- **name_scope** (str) – 该类的名称。
- **size** (int) – 输入数据的维度大小。
- **param_attr** (ParamAttr,可选) – 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。
**注意**
- 权重参数维度为 :math:`[T, 3×D]` , :math:`D` 是隐藏状态的规模(hidden size), 其值与输入size相关,计算方式为size除以3取整 。
- 权重参数矩阵所有元素由两部分组成, 一是update gate和reset gate的权重,维度为 :math:`[D, 2×D]` 的2D Tensor,数据类型可以为float32或float64;二是候选隐藏状态(candidate hidden state)的权重矩阵,维度为 :math:`[D, D]` 的2D Tensor,数据类型可以为float32或float64。
- **bias_attr** (ParamAttr,可选) - 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。
- **activation** (str,可选) – 公式中 :math:`act_c` 激活函数的类型。可以为'identity'、'sigmoid'、'tanh'、'relu'四种激活函数设置值。默认值为'tanh'。
- **gate_activation** (str,可选) – 公式中 :math:`act_g` 激活函数的类型。可以为'identity'、'sigmoid'、'tanh'、'relu'四种激活函数设置值。默认值为'sigmoid'。
- **origin_mode** (bool) – 指明要使用的GRU计算方式,两种计算方式具体差异见公式描述。默认值为False。
- **dtype** (str,可选) – 该层的数据类型,可以为'float32', 'float64'。默认值为'float32'。
返回:
None.
**代码示例**
.. code-block:: python
......@@ -73,13 +60,21 @@ GRU单元的输入包括 :math:`z_t` , :math:`h_{t-1}` 。在上述等式中
D = 5
T = sum(lod[0])
input = numpy.random.rand(T, 3 * D).astype('float32')
hidden_input = numpy.random.rand(T, D).astype('float32')
with fluid.dygraph.guard():
x = numpy.random.random((3, 32, 32)).astype('float32')
gru = fluid.dygraph.GRUUnit('gru', size=D * 3)
dy_ret = gru(
base.to_variable(input), base.to_variable(hidden_input))
base.to_variable(input), base.to_variable(hidden_input))
属性
::::::::::::
.. py:attribute:: weight
本层的可学习参数,类型为 ``Parameter``
.. py:attribute:: bias
本层的可学习偏置,类型为 ``Parameter``
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册