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 feed-forward, avec une normalisation de couche et un 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.
Cet exercice fait partie du cours
Modèles Transformer avec PyTorch
Instructions
- Complétez la méthode
__init__pour instancierMultiHeadAttention,FeedForwardSubLayeret 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 lesrc_maskfourni et les embeddings d’entrée,x, pour les matrices query, key et value.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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