Aan de slagGa gratis aan de slag

De decoderlaag

Net als encoder-transformers bestaan decoder-transformers uit meerdere lagen die gebruikmaken van multi-head attention en feed-forward sublayers. Ga aan de slag met het combineren van deze componenten om een DecoderLayer-klasse te bouwen.

De klassen MultiHeadAttention en FeedForwardSubLayer zijn beschikbaar om te gebruiken, samen met de tgt_mask die je hebt gemaakt.

Deze oefening maakt deel uit van de cursus

Transformermodels met PyTorch

Cursus bekijken

Oefeninstructies

Maak de forward()-methode af om de input-embeddings door de lagen te sturen die in de __init__-methode zijn gedefinieerd:

  • Voer de attention-berekening uit met de meegegeven tgt_mask en de input-embeddings x als query-, key- en value-matrices.
  • Pas dropout toe en de eerste layer-normalization, norm1.
  • Voer de pass door de feed-forward sublayer, ff_sublayer, uit.
  • Pas dropout toe en de tweede layer-normalization, norm2.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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
Code bewerken en uitvoeren