CommencerCommencer gratuitement

Ajouter la cross-attention à la couche de décodeur

Pour intégrer les piles d’encodeur et de décodeur que vous avez définies précédemment dans un transformeur encodeur–décodeur, vous devez créer un mécanisme de cross-attention qui fera le lien entre les deux.

La classe MultiHeadAttention que vous avez définie auparavant est toujours disponible.

Cet exercice fait partie du cours

Modèles Transformer avec PyTorch

Afficher le cours

Instructions

  • Définissez un mécanisme de cross-attention (avec MultiHeadAttention) et une troisième normalisation de couche (avec nn.LayerNorm) dans la méthode __init__.
  • Complétez la passe avant pour ajouter la cross-attention à la couche de décodeur.

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)
        # 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