CommencezCommencez gratuitement

La couche d'encodeur du transformer

Avec une classe FeedForwardSubLayer définie, vous avez toutes les pièces nécessaires pour définir une classe EncoderLayer. Rappelez-vous que la couche d'encodeur se compose généralement d'un mécanisme d'attention multi-têtes et d'une sous-couche à propagation avant (feed-forward) avec normalisation de couche et abandon (dropout) appliqués aux entrées et sorties de la sous-couche.

Les classes que vous avez déjà définies sont à votre disposition avec les mêmes noms, ainsi que torch et torch.nn sous le nom nn.

Cette activité fait partie du cours

Modèles Transformer avec PyTorch

Voir le cours

Instructions de l’exercice

  • Complétez la méthode __init__ pour instancier MultiHeadAttention, FeedForwardSubLayer et deux normalisations de couche.
  • Complétez la méthode forward() en remplissant le mécanisme d'attention multi-têtes et la sous-couche feed-forward; pour le mécanisme d'attention, utilisez le src_mark fourni et les intégrations d'entrée, x, pour les matrices query, key et value.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

class EncoderLayer(nn.Module):
    def __init__(self, d_model, num_heads, d_ff, dropout):
        super().__init__()
        # Instantiate the layers
        self.self_attn = ____(d_model, num_heads)
        self.ff_sublayer = ____(d_model, d_ff)
        self.norm1 = ____
        self.norm2 = ____
        self.dropout = nn.Dropout(dropout)

    def forward(self, x, src_mask):
        # Complete the forward method
        attn_output = self.____
        x = self.norm1(x + self.dropout(attn_output))
        ff_output = self.____
        x = self.norm2(x + self.dropout(ff_output))
        return x
Modifier et exécuter le code