AdditiveAttention
classkeras.layers.AdditiveAttention(use_scale=True, dropout=0.0, **kwargs)
加性注意力层,即Bahdanau风格的注意力.
输入是一个包含2或3个元素的列表:
1. 一个形状为(batch_size, Tq, dim)
的query
张量.
2. 一个形状为(batch_size, Tv, dim)
的value
张量.
3. 一个可选的形状为(batch_size, Tv, dim)
的key
张量.如果没有提供,将使用value
作为key
.
计算步骤如下:
1. 使用query
和key
计算形状为(batch_size, Tq, Tv)
的注意力分数,作为非线性求和
scores = reduce_sum(tanh(query + key), axis=-1)
.
2. 使用分数计算形状为(batch_size, Tq, Tv)
的softmax分布.
3. 使用softmax分布创建value
的线性组合,形状为(batch_size, Tq, dim)
.
参数:
use_scale: 如果为True
,将创建一个标量变量来缩放注意力分数.
dropout: 介于0和1之间的浮点数.注意力分数的丢弃比例.默认为0.0
.
调用参数:
inputs: 以下张量的列表:
- query
: 形状为(batch_size, Tq, dim)
的查询张量.
- value
: 形状为(batch_size, Tv, dim)
的值张量.
- key
: 可选的形状为(batch_size, Tv, dim)
的键张量.如果没有给出,将使用value
作为key
和value
,这是最常见的情况.
mask: 以下张量的列表:
- query_mask
: 形状为(batch_size, Tq)
的布尔掩码张量.如果给出,输出将在mask==False
的位置为零.
- value_mask
: 形状为(batch_size, Tv)
的布尔掩码张量.如果给出,将应用掩码,使得在mask==False
的位置的值不贡献于结果.
return_attention_scores: 布尔值,如果为True
,返回注意力分数(在掩码和softmax之后)作为额外的输出参数.
training: Python布尔值,指示层是否应在训练模式(添加dropout)或推理模式(无dropout)下运行.
use_causal_mask: 布尔值.设置为True
用于解码器自注意力.添加一个掩码,使得位置i
不能关注位置j > i
.这防止了信息从未来流向过去.默认为False
.
输出:
注意力输出,形状为(batch_size, Tq, dim)
.
(可选)掩码和softmax后的注意力分数,形状为(batch_size, Tq, Tv)
.