AdditiveAttention 类keras.layers.AdditiveAttention(use_scale=True, dropout=0.0, **kwargs)
Additive attention layer,又称 Bahdanau 风格的 attention。
输入是一个包含 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 计算 attention 分数,形状为 (batch_size, Tq, Tv),作为非线性求和 scores = reduce_sum(tanh(query + key), axis=-1)。2. 使用分数计算 softmax 分布,形状为 (batch_size, Tq, Tv)。3. 使用 softmax 分布创建 value 的线性组合,形状为 (batch_size, Tq, dim)。
参数
True,将创建一个标量变量来缩放注意力分数。0.0。调用参数
query:形状为 (batch_size, Tq, dim) 的 Query 张量。value:形状为 (batch_size, Tv, dim) 的 Value 张量。key:可选的形状为 (batch_size, Tv, dim) 的 Key 张量。如果未提供,则将 value 用于 key 和 value,这是最常见的情况。query_mask:形状为 (batch_size, Tq) 的布尔掩码张量。如果提供,输出将在 mask==False 的位置为零。value_mask:形状为 (batch_size, Tv) 的布尔掩码张量。如果提供,将应用掩码,使得 mask==False 的位置上的值不会对结果产生贡献。True,则将注意力分数(经过掩码和 softmax 后)作为额外的输出参数返回。True 用于 decoder self-attention。添加一个掩码,使得位置 i 不能 attending 到位置 j > i。这可以防止信息从未来流向过去。默认为 False。输出:形状为 (batch_size, Tq, dim) 的 Attention 输出。(可选)掩码和 softmax 后的 Attention 分数,形状为 (batch_size, Tq, Tv)。