You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mindspore.nn.MultiHeadAttention.rst 5.0 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. .. 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)
  2. 论文 `Attention Is All You Need <https://arxiv.org/pdf/1706.03762v5.pdf>`_ 中所述的多头注意力的实现。给定src_seq_length长度的query向量,tgt_seq_length长度的key向量和value,注意力计算流程如下:
  3. .. math:
  4. MultiHeadAttention(query, key, vector) = Dropout(Concat(head_1, \dots, head_h)W^O)
  5. 其中, `head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)` 。注意:输出层的投影计算中带有偏置参数。
  6. 如果query tensor、key tensor和value tensor相同,则上述即为自注意力机制的计算过程。
  7. **参数:**
  8. - **batch_size** (int) - 表示训练批次的大小。
  9. - **src_seq_length** (int) - 表示query向量的序列长度。
  10. - **tgt_seq_length** (int) - 表示key向量和value向量的序列长度。
  11. - **hidden_size** (int) - 表示输入的向量大小。
  12. - **num_heads** (int) - 表示注意力机制中头的数量。
  13. - **hidden_dropout_rate** (float) - 表示最后dense输出的丢弃率。默认值:0.1
  14. - **attention_dropout_rate** (float) - 表示注意力score的丢弃率。默认值:0.1
  15. - **compute_dtype** (dtype.Number) - 表示dense中矩阵乘法的计算类型。默认值:dtype.float16。其值应为dtype.float32或dtype.float16。
  16. - **param_init_type** (dtype.Number) - 表示模块的参数初始化类型。默认值:dtype.float32。其值应为dtype.float32或dtype.float16。
  17. - **softmax_compute_type** (dtype.Number) - 表示softmax计算模块的类型。默认值:dtype.float32。 其值应为dtype.float32或dtype.float16。
  18. - **use_past** (bool) - 使用过去状态进行计算,用于增量预测。例如,如果我们有两个单词,想生成十个或以上单词。我们只需要计算一次这两个单词的状态,然后逐个生成下一个单词。当use_past为True时,有两个步骤可以执行预测。
  19. 第一步是通过 `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
  20. - **parallel_config** (OpParallelConfig) - 表示并行配置。默认值为 `default_dpmp_config` ,表示一个带有参数的 `OpParallelConfig` 实例。
  21. **输入:**
  22. - **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)。
  23. - **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)。
  24. - **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)。
  25. - **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)。
  26. - **key_past** (Tensor) - shape为(batch_size, num_heads, size_per_head, tgt_seq_length)的Float16 tensor, 表示过去所计算的key向量。
  27. 当use_past为True时,需要传入非None值用于增量预测。默认值为None。
  28. - **value_past** (Tensor) - shape为(batch_size, num_heads, tgt_seq_length, size_per_head)的Float16 tensor,表示过去所计算的value向量。
  29. 当use_past为True时,需要传入非None值用于增量预测。默认值为None。
  30. - **batch_valid_length** (Tensor) - shape为(batch_size,)的Int32 tensor,表示已经计算的token索引。
  31. 当use_past为True时,需要传入非None值用于增量预测。默认值为None。
  32. **输出:**
  33. Tuple,表示一个包含(`output`, `layer_present`)的元组。
  34. - **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)。
  35. - **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的元组。