Inizia subitoInizia gratis

Il layer del decoder

Come i transformer encoder, anche i transformer decoder sono composti da più layer che usano multi-head attention e sotto-livelli feed-forward. Prova a combinare questi componenti per costruire una classe DecoderLayer.

Le classi MultiHeadAttention e FeedForwardSubLayer sono a tua disposizione, insieme al tgt_mask che hai creato.

Questo esercizio fa parte del corso

Modelli Transformer con PyTorch

Visualizza corso

Istruzioni dell'esercizio

Completa il metodo forward() per far passare le embedding di input attraverso i layer definiti nel metodo __init__:

  • Esegui il calcolo dell'attenzione usando il tgt_mask fornito e le embedding di input, x, per le matrici query, key e value.
  • Applica il dropout e la prima normalizzazione di layer, norm1.
  • Esegui il passaggio attraverso il sotto-livello feed-forward, ff_sublayer.
  • Applica il dropout e la seconda normalizzazione di layer, norm2.

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

class DecoderLayer(nn.Module):
    def __init__(self, d_model, num_heads, d_ff, dropout):
        super().__init__()
        self.self_attn = MultiHeadAttention(d_model, num_heads)
        self.ff_sublayer = FeedForwardSubLayer(d_model, d_ff)
        self.norm1 = nn.LayerNorm(d_model)
        self.norm2 = nn.LayerNorm(d_model)
        self.dropout = nn.Dropout(dropout)

    def forward(self, x, tgt_mask):
        # Perform the attention calculation
        attn_output = self.____
        # Apply dropout and the first layer normalization
        x = self.____(x + self.____(attn_output))
        # Pass through the feed-forward sublayer
        ff_output = self.____(x)
        # Apply dropout and the second layer normalization
        x = self.____(x + self.____(ff_output))
        return x
Modifica ed esegui il codice