La couche de décodeur
Comme les transformeurs encodeurs, les transformeurs décodeurs sont également composés de plusieurs couches qui utilisent l’attention multi‑têtes et des sous‑couches feed‑forward. Essayez 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éé.
Cet exercice fait partie du cours
Modèles Transformer avec PyTorch
Instructions
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éexpour les matrices requête, clé et valeur. - Appliquez le
dropoutpuis la première normalisation de couche,norm1. - Effectuez le passage dans la sous‑couche feed‑forward,
ff_sublayer. - Appliquez le
dropoutpuis la deuxième normalisation de couche,norm2.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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