Keras 3 API 文档 / 层 API / 注意力层 / AdditiveAttention 层

AdditiveAttention 层

[源文件]

AdditiveAttention

keras.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. 使用 querykey 计算形状为 (batch_size, Tq, Tv) 的注意力分数,计算方式为非线性求和 scores = reduce_sum(tanh(query + key), axis=-1)。 2. 使用分数计算形状为 (batch_size, Tq, Tv) 的 softmax 分布。 3. 使用 softmax 分布创建形状为 (batch_size, Tq, dim)value 的线性组合。

参数

  • use_scale: 如果为 True,将创建一个标量变量来缩放注意力分数。
  • dropout: 介于 0 和 1 之间的浮点数。用于丢弃注意力分数单元的比例。默认为 0.0

调用参数

  • inputs: 包含以下张量的列表
    • query: 形状为 (batch_size, Tq, dim) 的 Query 张量。
    • value: 形状为 (batch_size, Tv, dim) 的 Value 张量。
    • key: 可选的 形状为 (batch_size, Tv, dim) 的 Key 张量。如果未提供,value 将同时用作 keyvalue,这是最常见的情况。
  • mask: 包含以下张量的列表
    • query_mask: 形状为 (batch_size, Tq) 的布尔掩码张量。如果提供,输出在 mask==False 的位置将为零。
    • value_mask: 形状为 (batch_size, Tv) 的布尔掩码张量。如果提供,将应用掩码,使得在 mask==False 位置上的值不参与结果计算。
  • return_attention_scores: bool 类型,如果为 True,则将注意力分数(经过掩码和 softmax 后)作为额外的输出参数返回。
  • training: Python 布尔值,指示层应处于训练模式(添加 dropout)还是推理模式(无 dropout)。
  • use_causal_mask: 布尔值。对于解码器自注意力,设置为 True。添加一个掩码,使得位置 i 无法关注位置 j > i。这可以防止信息从未来流向过去。默认为 False

输出:形状为 (batch_size, Tq, dim) 的注意力输出。(可选)形状为 (batch_size, Tq, Tv) 的经过掩码和 softmax 后的注意力分数。