MultiHeadAttention 层。
用法
tf.keras.layers.MultiHeadAttention(
num_heads, key_dim, value_dim=None, dropout=0.0, use_bias=True,
output_shape=None, attention_axes=None,
kernel_initializer='glorot_uniform',
bias_initializer='zeros', kernel_regularizer=None,
bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
bias_constraint=None, **kwargs
)参数
-
num_heads注意头的数量。 -
key_dim查询和键的每个注意力头的大小。 -
value_dim每个注意力头的价值大小。 -
dropout辍学概率。 -
use_bias布尔值,密集层是否使用偏置向量/矩阵。 -
output_shape输出张量的预期形状,除了批次和序列暗淡。如果未指定,则投影回关键函数暗淡。 -
attention_axes应用注意力的轴。None表示对所有轴的注意力,但批处理、头部和特征。 -
kernel_initializer密集层内核的初始化程序。 -
bias_initializer密集层偏差的初始化程序。 -
kernel_regularizer密集层内核的正则化器。 -
bias_regularizer密集层偏差的正则化器。 -
activity_regularizer密集层活动的正则化器。 -
kernel_constraint密集层内核的约束。 -
bias_constraint密集层内核的约束。
返回
-
attention_output计算结果,形状为(B, T, E),其中T用于目标序列形状,如果output_shape为None,则E是查询输入的最后一个维度。否则,multi-head 输出将投影到output_shape指定的形状。 -
attention_scores[可选] multi-head 注意力轴上的注意力系数。
这是 multi-headed attention 的实现,如论文“Attention is all you Need”(Vaswani et al., 2017)中所述。如果query , key, value 相同,则为self-attention。 query 中的每个时间步都会处理 key 中的相应序列,并返回一个 fixed-width 向量。
该层首先投影 query , key 和 value 。这些(实际上)是长度为 num_attention_heads 的张量列表,其中相应的形状是 (batch_size, <query dimensions>, key_dim) , (batch_size, <key/value dimensions>, key_dim) , (batch_size, <key/value dimensions>, value_dim) 。
然后,查询和关键张量是dot-producted 并缩放。这些被softmaxed以获得注意力概率。然后通过这些概率对值张量进行插值,然后连接回单个张量。
最后,最后一维为value_dim的结果张量可以进行线性投影并返回。
在自定义层内使用 MultiHeadAttention 时,自定义层必须实现 build() 并调用 MultiHeadAttention 的 _build_from_signature() 。这样可以在加载模型时正确恢复权重。
在自定义层中使用时。
例子:
使用注意掩码在两个序列输入上执行一维cross-attention。返回额外的注意力权重。
layer = MultiHeadAttention(num_heads=2, key_dim=2)
target = tf.keras.Input(shape=[8, 16])
source = tf.keras.Input(shape=[4, 16])
output_tensor, weights = layer(target, source,
return_attention_scores=True)
print(output_tensor.shape)
(None, 8, 16)
print(weights.shape)
(None, 2, 8, 4)
在轴 2 和 3 上的 5D 输入张量上执行 2D self-attention。
layer = MultiHeadAttention(num_heads=2, key_dim=2, attention_axes=(2, 3))
input_tensor = tf.keras.Input(shape=[5, 3, 4, 16])
output_tensor = layer(input_tensor, input_tensor)
print(output_tensor.shape)
(None, 5, 3, 4, 16)
调用参数:
query:询问Tensor形状的(B, T, dim).value:价值Tensor形状的(B, S, dim).key:可选键Tensor形状的(B, S, dim).如果没有给出,将使用value对彼此而言key和value,这是最常见的情况。attention_mask:形状的布尔掩码(B, T, S),这会阻止对某些位置的注意。布尔掩码指定哪些查询元素可以关注哪些关键元素,1 表示关注,0 表示不关注。对于缺少的批次维度和头部维度,可能会发生广播。return_attention_scores:一个布尔值,指示输出是否应该是(attention_output, attention_scores)如果True, 或者attention_output如果False.默认为False.training:Python 布尔值,指示层应该在训练模式(添加 dropout)还是在推理模式(无 dropout)下运行。默认使用父层/模型的训练模式,如果没有父层,则默认为 False(推理)。
相关用法
- Python tf.keras.layers.Multiply用法及代码示例
- Python tf.keras.layers.MaxPool3D用法及代码示例
- Python tf.keras.layers.MaxPool2D用法及代码示例
- Python tf.keras.layers.Masking用法及代码示例
- Python tf.keras.layers.Maximum用法及代码示例
- Python tf.keras.layers.Minimum用法及代码示例
- Python tf.keras.layers.MaxPool1D用法及代码示例
- Python tf.keras.layers.InputLayer用法及代码示例
- Python tf.keras.layers.serialize用法及代码示例
- Python tf.keras.layers.Dropout用法及代码示例
- Python tf.keras.layers.maximum用法及代码示例
- Python tf.keras.layers.LayerNormalization用法及代码示例
- Python tf.keras.layers.Conv2D用法及代码示例
- Python tf.keras.layers.RepeatVector用法及代码示例
- Python tf.keras.layers.Activation用法及代码示例
- Python tf.keras.layers.Conv1D用法及代码示例
- Python tf.keras.layers.experimental.preprocessing.PreprocessingLayer.adapt用法及代码示例
- Python tf.keras.layers.CategoryEncoding用法及代码示例
- Python tf.keras.layers.subtract用法及代码示例
- Python tf.keras.layers.experimental.preprocessing.HashedCrossing用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.layers.MultiHeadAttention。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
