La couche de décodeur
Comme les encodeurs, les décodeurs Transformer sont aussi composés de plusieurs couches qui utilisent l'attention à têtes multiples et des sous‑couches feed‑forward. À vous de combiner ces composants pour construire une classe DecoderLayer.
Les classes MultiHeadAttention et FeedForwardSubLayer sont à votre disposition, ainsi que le tgt_mask que vous avez créé.
Cette activité fait partie du cours
Modèles Transformer avec PyTorch
Instructions de l’exercice
Complétez la méthode forward() pour faire passer les plongements d'entrée à travers les couches définies dans la méthode __init__ :
- Effectuez le calcul d'attention en utilisant le
tgt_maskfourni et les plongements d'entrée,x, pour les matrices requête, clé et valeur. - Appliquez le
dropoutpuis la première normalisation,norm1. - Effectuez la passe dans la sous‑couche feed‑forward,
ff_sublayer. - Appliquez le
dropoutpuis la deuxième normalisation,norm2.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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