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).