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 之間的浮點數。要丟棄的注意力分數單元比例。預設為 0.0
  • seed:在 dropout 的情況下用作隨機種子的 Python 整數。
  • score_mode:用於計算注意力分數的函數,選項為 {"dot", "concat"}"dot" 指的是查詢和鍵向量之間的點積。"concat" 指的是 querykey 向量串聯的雙曲正切。

調用參數

  • inputs:以下張量列表
    • query:形狀為 (batch_size, Tq, dim) 的查詢張量。
    • value:形狀為 (batch_size, Tv, dim) 的值張量。
    • key:可選的形狀為 (batch_size, Tv, dim) 的鍵張量。如果未給定,將使用 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 之後的注意力分數。