mindspore/docs/api/api_python/transformer/mindspore.nn.MultiHeadAtten...

47 lines
4.9 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. py:class:: mindspore.nn.transformer.MultiHeadAttention(batch_size, src_seq_length, tgt_seq_length, hidden_size, num_heads, hidden_dropout_rate=0.1, attention_dropout_rate=0.1, compute_dtype=mstype.float16, softmax_compute_type=mstype.float32, param_init_type=mstype.float32, use_past=False, parallel_config=default_dpmp_config)
论文 `Attention Is All You Need <https://arxiv.org/pdf/1706.03762v5.pdf>`_ 中所述的多头注意力的实现。给定src_seq_length长度的query向量tgt_seq_length长度的key向量和value注意力计算流程如下
.. math:
MultiHeadAttention(query, key, vector) = Dropout(Concat(head_1, \dots, head_h)W^O)
其中, `head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)` 。注意:输出层的投影计算中带有偏置参数。
如果query tensor、key tensor和value tensor相同则上述即为自注意力机制的计算过程。
**参数:**
- **batch_size** (int) - 表示训练批次的大小。
- **src_seq_length** (int) - 表示query向量的序列长度。
- **tgt_seq_length** (int) - 表示key向量和value向量的序列长度。
- **hidden_size** (int) - 表示输入的向量大小。
- **num_heads** (int) - 表示注意力机制中头的数量。
- **hidden_dropout_rate** (float) - 表示最后dense输出的丢弃率。默认值0.1
- **attention_dropout_rate** (float) - 表示注意力score的丢弃率。默认值0.1
- **compute_dtype** (dtype.Number) - 表示dense中矩阵乘法的计算类型。默认值dtype.float16。其值应为dtype.float32或dtype.float16。
- **param_init_type** (dtype.Number) - 表示模块的参数初始化类型。默认值dtype.float32。其值应为dtype.float32或dtype.float16。
- **softmax_compute_type** (dtype.Number) - 表示softmax计算模块的类型。默认值dtype.float32。 其值应为dtype.float32或dtype.float16。
- **use_past** (bool) - 使用过去状态进行计算用于增量预测。例如如果我们有两个单词想生成十个或以上单词。我们只需要计算一次这两个单词的状态然后逐个生成下一个单词。当use_past为True时有两个步骤可以执行预测。
第一步是通过 `model.add_flags_recursive(is_first_iteration=True)` 将is_first_iteration设为True并传递完整的输入。然后通过 `model.add_flags_recursive(is_first_iteration=False)` 将is_first_iteration设为False。此时传递step的输入tensor并对其进行循环。默认值False
- **parallel_config** (OpParallelConfig) - 表示并行配置。默认值为 `default_dpmp_config` ,表示一个带有参数的 `OpParallelConfig` 实例。
**输入:**
- **query_tensor** (Tensor) - use_past为False或is_first_iteration为True时表示shape为(batch_size, src_seq_length, hidden_size)或(batch_size * src_seq_length, hidden_size)的query向量。否则shape必须为(batch_size, 1, hidden_size)。
- **key_tensor** (Tensor) - use_past为False或is_first_iteration为True时表示shape为(batch_size, tgt_seq_length, hidden_size)或(batch_size * tgt_seq_length, hidden_size)的key向量。否则shape必须为(batch_size, 1, hidden_size)。
- **value_tensor** (Tensor) - use_past为False或is_first_iteration为True时表示shape为(batch_size, tgt_seq_length, hidden_size)或(batch_size * tgt_seq_length, hidden_size)的value向量。否则shape必须为(batch_size, 1, hidden_size)。
- **attention_mask** (Tensor) - use_past为False或is_first_iteration为True时表示shape为(batch_size, src_seq_length, tgt_seq_length)的注意力掩码矩阵。否则shape必须为(batch_size, 1, tgt_seq_length)。
- **key_past** (Tensor) - shape为(batch_size, num_heads, size_per_head, tgt_seq_length)的Float16 tensor 表示过去所计算的key向量。
当use_past为True时需要传入非None值用于增量预测。默认值为None。
- **value_past** (Tensor) - shape为(batch_size, num_heads, tgt_seq_length, size_per_head)的Float16 tensor表示过去所计算的value向量。
当use_past为True时需要传入非None值用于增量预测。默认值为None。
- **batch_valid_length** (Tensor) - shape为(batch_size,)的Int32 tensor表示已经计算的token索引。
当use_past为True时需要传入非None值用于增量预测。默认值为None。
**输出:**
Tuple表示一个包含(`output`, `layer_present`)的元组。
- **output** (Tensor) - Tensor。use_past为False或is_first_iteration为True时表示shape为(batch_size, src_seq_length, hidden_size)或(batch_size * src_seq_length, hidden_size)的层输出的float tensor。否则shape将为(batch_size, 1, hidden_size)。
- **layer_present** (Tuple) - 表示shape为((batch_size, num_heads, size_per_head, tgt_seq_length)或(batch_size, num_heads, tgt_seq_length, size_per_head))的投影key向量和value向量的Tensor的元组。