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

注意力层

[源文件]

Attention

keras.layers.Attention(
    use_scale=False, score_mode="dot", dropout=0.0, seed=None, **kwargs
)

点积注意力层,也称为 Luong-style 注意力。

输入是包含 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)。 2. 使用得分计算 softmax 分布,形状为 (batch_size, Tq, Tv)。 3. 使用 softmax 分布创建 value 的线性组合,形状为 (batch_size, Tq, dim)

参数

  • use_scale: 如果为 True,将创建一个标量变量来缩放注意力得分。
  • dropout: 0 到 1 之间的浮点数。注意力得分要丢弃的单元比例。默认为 0.0
  • seed: 一个 Python 整数,在应用 dropout 时用作随机种子。
  • score_mode: 用于计算注意力得分的函数,可选值为 {"dot", "concat"}"dot" 表示 query 和 key 向量之间的点积。"concat" 表示 querykey 向量拼接后的双曲正切。

调用参数

  • 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)。(可选) 掩码和 softmax 后的注意力得分,形状为 (batch_size, Tq, Tv)