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

注意力层

[源代码]

Attention

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

点积注意力层,又名 Luong 风格注意力。

输入是一个包含 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 之间的浮点数。注意力分数的 dropout 比率。默认为 0.0
  • seed: 在使用 dropout 的情况下,用作随机种子的 Python 整数。
  • 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: 布尔值,如果为 True,则返回注意力分数(在掩码和 softmax 之后)作为额外的输出参数。
  • training: Python 布尔值,指示该层应以训练模式(添加 dropout)还是推理模式(无 dropout)运行。
  • use_causal_mask: 布尔值。对于解码器自注意力,设置为 True。添加一个掩码,使得位置 i 不能关注位置 j > i。这可以防止信息从未来流向过去。默认为 False

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