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
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_masken de input-embeddingsxals query-, key- en value-matrices. - Pas
dropouttoe en de eerste layer-normalization,norm1. - Voer de pass door de feed-forward sublayer,
ff_sublayer, uit. - Pas
dropouttoe 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