KerasHub:預訓練模型 / API 文件 / 模型層 / TransformerDecoder 層

TransformerDecoder 層

[原始碼]

TransformerDecoder 類別

keras_hub.layers.TransformerDecoder(
    intermediate_dim,
    num_heads,
    dropout=0,
    activation="relu",
    layer_norm_epsilon=1e-05,
    kernel_initializer="glorot_uniform",
    bias_initializer="zeros",
    normalize_first=False,
    **kwargs
)

Transformer 解碼器。

此類別遵循論文 Attention is All You Need 中 transformer 解碼器層的架構。使用者可以實例化此類別的多個實例來堆疊解碼器。

預設情況下,此層會將因果遮罩應用於解碼器注意力層。您也可以在呼叫期間直接將填充或注意力遮罩傳遞給此層,例如使用 decoder_padding_maskdecoder_attention_mask

此層可以使用一個或兩個輸入來呼叫。輸入的數量在所有呼叫中必須一致。選項如下:layer(decoder_sequence):不會在解碼器區塊中建立交叉注意力。這在建構「僅解碼器」transformer(例如 GPT-2)時很有用。layer(decoder_sequence, encoder_sequence):交叉注意力將在解碼器區塊中建立。這在建構「編碼器-解碼器」transformer(例如 Attention is All You Need 中描述的原始 transformer 模型)時很有用。

參數

  • intermediate_dim:int,前饋網路的隱藏層大小。
  • num_heads:int,MultiHeadAttention 中的 head 數量。
  • dropout:float。dropout 值,由 MultiHeadAttention 和前饋網路共享。預設值為 0.
  • activation:string 或 keras.activations。前饋網路的激活函數。預設值為 "relu"
  • layer_norm_epsilon:float。層歸一化組件中的 eps 值。預設值為 1e-5
  • kernel_initializer:string 或 keras.initializers 初始化器。用於密集層和多頭注意力層的 kernel 初始化器。預設值為 "glorot_uniform"
  • bias_initializer:string 或 keras.initializers 初始化器。用於密集層和多頭注意力層的 bias 初始化器。預設值為 "zeros"
  • normalize_first:bool。如果為 True,則注意力層和中間密集層的輸入將被歸一化(類似於 GPT-2)。如果設定為 False,則注意力層和中間密集層的輸出將被歸一化(類似於 BERT)。預設值為 False
  • **kwargs:傳遞給 keras.layers.Layer 的其他關鍵字參數,包括 nametrainabledtype 等。

範例

# Create a single transformer decoder layer.
decoder = keras_hub.layers.TransformerDecoder(
    intermediate_dim=64, num_heads=8)

# Create a simple model containing the decoder.
decoder_input = keras.Input(shape=(10, 64))
encoder_input = keras.Input(shape=(10, 64))
output = decoder(decoder_input, encoder_input)
model = keras.Model(
    inputs=(decoder_input, encoder_input),
    outputs=output,
)

# Call decoder on the inputs.
decoder_input_data = np.random.uniform(size=(2, 10, 64))
encoder_input_data = np.random.uniform(size=(2, 10, 64))
decoder_output = model((decoder_input_data, encoder_input_data))

參考文獻


[原始碼]

call 方法

TransformerDecoder.call(
    decoder_sequence,
    encoder_sequence=None,
    decoder_padding_mask=None,
    decoder_attention_mask=None,
    encoder_padding_mask=None,
    encoder_attention_mask=None,
    self_attention_cache=None,
    self_attention_cache_update_index=None,
    cross_attention_cache=None,
    cross_attention_cache_update_index=None,
    use_causal_mask=True,
    training=None,
)

TransformerDecoder 的前向傳遞。

參數

  • decoder_sequence:一個 Tensor。解碼器輸入序列。
  • encoder_sequence:一個 Tensor。編碼器輸入序列。對於僅解碼器模型(如 GPT2),應保留為 None。一旦模型在沒有 encoder_sequence 的情況下被呼叫一次,您就不能再次使用 encoder_sequence 呼叫它。
  • decoder_padding_mask:一個布林 Tensor,解碼器序列的填充遮罩,形狀必須為 [batch_size, decoder_sequence_length]
  • decoder_attention_mask:一個布林 Tensor。自訂的解碼器序列遮罩,形狀必須為 [batch_size, decoder_sequence_length, decoder_sequence_length]
  • encoder_padding_mask:一個布林 Tensor,編碼器序列的填充遮罩,形狀必須為 [batch_size, encoder_sequence_length]
  • encoder_attention_mask:一個布林 Tensor。自訂的編碼器序列遮罩,形狀必須為 [batch_size, encoder_sequence_length, encoder_sequence_length]
  • self_attention_cache:一個密集浮點 Tensor。自注意力層中 key/value 對的快取。形狀為 [batch_size, 2, max_seq_len, num_heads, key_dims]
  • self_attention_cache_update_index:一個 int 或 int Tensor,用於更新 self_attention_cache 的索引。通常,這是解碼期間正在處理的當前 token 的索引。
  • cross_attention_cache:一個密集浮點 Tensor。交叉注意力層中 key/value 對的快取。形狀為 [batch_size, 2, S, num_heads, key_dims]
  • cross_attention_cache_update_index:一個 int 或 int Tensor,用於更新 cross_attention_cache 的索引。通常,這可以是 0(計算整個 cross_attention_cache),或 None(重複使用先前計算的 cross_attention_cache)。
  • use_causal_mask:bool,預設為 True。如果為 true,則因果遮罩(遮蔽未來輸入)將應用於解碼器序列。
  • training:一個布林值,指示該層應在訓練模式還是推論模式下運作。

返回

  • 取決於呼叫參數,以下三者之一:
  • outputs,如果 self_attention_cacheNone
  • (outputs, self_attention_cache),如果設定了 self_attention_cache 且該層沒有交叉注意力。
  • (outputs, self_attention_cache, cross_attention_cache),如果設定了 self_attention_cachecross_attention_cache 且該層具有交叉注意力。