CommencezCommencez gratuitement

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

Voir le cours

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 de nn.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
Modifier et exécuter le code