當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.keras.layers.MultiHeadAttention用法及代碼示例


MultiHeadAttention 層。

繼承自:LayerModule

用法

tf.keras.layers.MultiHeadAttention(
    num_heads, key_dim, value_dim=None, dropout=0.0, use_bias=True,
    output_shape=None, attention_axes=None,
    kernel_initializer='glorot_uniform',
    bias_initializer='zeros', kernel_regularizer=None,
    bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
    bias_constraint=None, **kwargs
)

參數

  • num_heads 注意頭的數量。
  • key_dim 查詢和鍵的每個注意力頭的大小。
  • value_dim 每個注意力頭的價值大小。
  • dropout 輟學概率。
  • use_bias 布爾值,密集層是否使用偏置向量/矩陣。
  • output_shape 輸出張量的預期形狀,除了批次和序列暗淡。如果未指定,則投影回關鍵函數暗淡。
  • attention_axes 應用注意力的軸。 None 表示對所有軸的注意力,但批處理、頭部和特征。
  • kernel_initializer 密集層內核的初始化程序。
  • bias_initializer 密集層偏差的初始化程序。
  • kernel_regularizer 密集層內核的正則化器。
  • bias_regularizer 密集層偏差的正則化器。
  • activity_regularizer 密集層活動的正則化器。
  • kernel_constraint 密集層內核的約束。
  • bias_constraint 密集層內核的約束。

返回

  • attention_output 計算結果,形狀為 (B, T, E) ,其中 T 用於目標序列形狀,如果 output_shapeNone ,則 E 是查詢輸入的最後一個維度。否則,multi-head 輸出將投影到 output_shape 指定的形狀。
  • attention_scores [可選] multi-head 注意力軸上的注意力係數。

這是 multi-headed attention 的實現,如論文“Attention is all you Need”(Vaswani et al., 2017)中所述。如果query , key, value 相同,則為self-attention。 query 中的每個時間步都會處理 key 中的相應序列,並返回一個 fixed-width 向量。

該層首先投影 query , keyvalue 。這些(實際上)是長度為 num_attention_heads 的張量列表,其中相應的形狀是 (batch_size, <query dimensions>, key_dim) , (batch_size, <key/value dimensions>, key_dim) , (batch_size, <key/value dimensions>, value_dim)

然後,查詢和關鍵張量是dot-producted 並縮放。這些被softmaxed以獲得注意力概率。然後通過這些概率對值張量進行插值,然後連接回單個張量。

最後,最後一維為value_dim的結果張量可以進行線性投影並返回。

在自定義層內使用 MultiHeadAttention 時,自定義層必須實現 build() 並調用 MultiHeadAttention 的 _build_from_signature() 。這樣可以在加載模型時正確恢複權重。

在自定義層中使用時。

例子:

使用注意掩碼在兩個序列輸入上執行一維cross-attention。返回額外的注意力權重。

layer = MultiHeadAttention(num_heads=2, key_dim=2)
target = tf.keras.Input(shape=[8, 16])
source = tf.keras.Input(shape=[4, 16])
output_tensor, weights = layer(target, source,
                               return_attention_scores=True)
print(output_tensor.shape)
(None, 8, 16)
print(weights.shape)
(None, 2, 8, 4)

在軸 2 和 3 上的 5D 輸入張量上執行 2D self-attention。

layer = MultiHeadAttention(num_heads=2, key_dim=2, attention_axes=(2, 3))
input_tensor = tf.keras.Input(shape=[5, 3, 4, 16])
output_tensor = layer(input_tensor, input_tensor)
print(output_tensor.shape)
(None, 5, 3, 4, 16)

調用參數:

  • query:詢問Tensor形狀的(B, T, dim).
  • value:價值Tensor形狀的(B, S, dim).
  • key:可選鍵Tensor形狀的(B, S, dim).如果沒有給出,將使用value對彼此而言keyvalue,這是最常見的情況。
  • attention_mask:形狀的布爾掩碼(B, T, S),這會阻止對某些位置的注意。布爾掩碼指定哪些查詢元素可以關注哪些關鍵元素,1 表示關注,0 表示不關注。對於缺少的批次維度和頭部維度,可能會發生廣播。
  • return_attention_scores:一個布爾值,指示輸出是否應該是(attention_output, attention_scores)如果True, 或者attention_output如果False.默認為False.
  • training:Python 布爾值,指示層應該在訓練模式(添加 dropout)還是在推理模式(無 dropout)下運行。默認使用父層/模型的訓練模式,如果沒有父層,則默認為 False(推理)。

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.keras.layers.MultiHeadAttention。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。