Ajouter l'attention croisée à la couche du décodeur
Pour intégrer les piles d'encodeur et de décodeur que vous avez définies auparavant dans un transformeur encodeur-décodeur, vous devez créer un mécanisme d'attention croisée qui servira de pont entre les deux.
La classe MultiHeadAttention que vous avez définie plus tôt est toujours disponible.
Cette activité fait partie du cours
Modèles Transformer avec PyTorch
Instructions de l’exercice
- Définissez un mécanisme d'attention croisée (à l'aide de
MultiHeadAttention) et une troisième normalisation de couche (à l'aide denn.LayerNorm) dans la méthode__init__. - Complétez la passe avant pour ajouter l'attention croisée à la couche du décodeur.
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)
# Define cross-attention and a third layer normalization
self.cross_attn = ____
self.ff_sublayer = FeedForwardSubLayer(d_model, d_ff)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
self.norm3 = ____
self.dropout = nn.Dropout(dropout)
def forward(self, x, y, tgt_mask, cross_mask):
self_attn_output = self.self_attn(x, x, x, tgt_mask)
x = self.norm1(x + self.dropout(self_attn_output))
# Complete the forward pass
cross_attn_output = self.____(____)
x = self.norm2(x + self.dropout(____))
ff_output = self.ff_sublayer(x)
x = self.norm3(x + self.dropout(ff_output))
return x