Keras 3 API 文件 / 層 API / 注意力層 / AdditiveAttention 層

AdditiveAttention 層

[原始碼]

AdditiveAttention 類別

keras.layers.AdditiveAttention(use_scale=True, dropout=0.0, **kwargs)

Additive 注意力層,又稱 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. 使用分數計算 softmax 分佈,形狀為 (batch_size, Tq, Tv)。3. 使用 softmax 分佈創建 value 的線性組合,形狀為 (batch_size, Tq, dim)

參數

  • 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:布林值,若為 True,則將注意力分數(在遮罩和 softmax 之後)作為額外的輸出參數返回。
  • training:Python 布林值,指示層應在訓練模式(添加 dropout)還是推論模式(不添加 dropout)下運行。
  • use_causal_mask:布林值。對於解碼器自注意力,設定為 True。添加一個遮罩,使得位置 i 無法關注位置 j > i。這可以防止資訊從未來流向過去。預設為 False

輸出:形狀為 (batch_size, Tq, dim) 的注意力輸出。(可選)遮罩和 softmax 之後的注意力分數,形狀為 (batch_size, Tq, Tv)