TransformerDecoderLayer

class paddle.nn.TransformerDecoderLayer ( d_model, nhead, dim_feedforward, dropout=0.1, activation=’relu’, attn_dropout=None, act_dropout=None, normalize_before=False, weight_attr=None, bias_attr=None ) [源代码]

Transformer解码器层

Transformer解码器层由三个子层组成:多头自注意力机制、编码-解码交叉注意力机制(encoder-decoder cross attention)和前馈神经网络。如果 normalize_beforeTrue,则对每个子层的输入进行层标准化(Layer Normalization),对每个子层的输出进行dropout和残差连接(residual connection)。否则(即 normalize_beforeFalse),则对每个子层的输入不进行处理,只对每个子层的输出进行dropout、残差连接(residual connection)和层标准化(Layer Normalization)。

参数:

  • d_model (int) - 输入输出的维度。

  • nhead (int) - 多头注意力机制的Head数量。

  • dim_feedforward (int) - 前馈神经网络中隐藏层的大小。

  • dropout (float,可选) - 对三个子层的输出进行处理的dropout值。默认值:0.1。

  • activation (str,可选) - 前馈神经网络的激活函数。默认值:relu

  • attn_dropout (float,可选) - 多头自注意力机制中对注意力目标的随机失活率。如果为 Noneattn_dropout = dropout。默认值:None

  • act_dropout (float,可选) - 前馈神经网络的激活函数后的dropout。如果为 Noneact_dropout = dropout。默认值:None

  • normalize_before (bool, 可选) - 设置对每个子层的输入输出的处理。如果为 True,则对每个子层的输入进行层标准化(Layer Normalization),对每个子层的输出进行dropout和残差连接(residual connection)。否则(即为 False),则对每个子层的输入不进行处理,只对每个子层的输出进行dropout、残差连接(residual connection)和层标准化(Layer Normalization)。默认值:False

  • weight_attr (ParamAttr|tuple,可选) - 指定权重参数属性的对象。如果是 tuple,多头自注意力机制的权重参数属性使用 weight_attr[0],编码-解码交叉注意力机制的权重参数属性使用 weight_attr[1],前馈神经网络的权重参数属性使用 weight_attr[2]。如果该值是 ParamAttr,则多头自注意力机制、编码-解码交叉注意力机制和前馈神经网络的权重参数属性都使用 ParamAttr。默认值:None,表示使用默认的权重参数属性。具体用法请参见 ParamAttr

  • bias_attr (ParamAttr|tuple|bool,可选)- 指定偏置参数属性的对象。如果是 tuple,多头自注意力机制的偏置参数属性使用 bias_attr[0],编码-解码交叉注意力机制的偏置参数属性使用 bias_attr[1],前馈神经网络的偏置参数属性使用 bias_attr[2]。如果该值是 ParamAttr,则多头自注意力机制、编码-解码交叉注意力机制和前馈神经网络的偏置参数属性都使用 ParamAttr。如果该参数为 bool 类型,只支持为 False,表示没有偏置参数。默认值:None,表示使用默认的偏置参数属性。具体用法请参见 ParamAttr

代码示例

  1. import paddle
  2. from paddle.nn import TransformerDecoderLayer
  3. # decoder input: [batch_size, tgt_len, d_model]
  4. dec_input = paddle.rand((2, 4, 128))
  5. # encoder output: [batch_size, src_len, d_model]
  6. enc_output = paddle.rand((2, 6, 128))
  7. # self attention mask: [batch_size, n_head, tgt_len, tgt_len]
  8. self_attn_mask = paddle.rand((2, 2, 4, 4))
  9. # cross attention mask: [batch_size, n_head, tgt_len, src_len]
  10. cross_attn_mask = paddle.rand((2, 2, 4, 6))
  11. decoder_layer = TransformerDecoderLayer(128, 2, 512)
  12. output = decoder_layer(dec_input,
  13. enc_output,
  14. self_attn_mask,
  15. cross_attn_mask) # [2, 4, 128]