Ajout de méthodes à la classe MultiHeadAttention
Dans cet exercice, vous allez compléter le reste de la classe MultiHeadAttention à partir de zéro en définissant quatre méthodes :
.split_heads(): fractionner et transformer les plongements d'entrée entre les têtes d'attention.compute_attention(): calculer l'attention produit scalaire pondérée (scaled dot-product) multipliée par la matrice des valeurs.combine_heads(): reconvertir les pondérations d'attention dans le même gabarit que les plongements d'entrée,x.forward(): appeler les autres méthodes pour faire passer les plongements d'entrée à travers chaque étape
torch.nn a été importé sous le nom nn, torch.nn.functional est accessible sous F, et torch est également disponible.
Cette activité fait partie du cours
Modèles Transformer avec PyTorch
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
self.num_heads = num_heads
self.d_model = d_model
self.head_dim = d_model // num_heads
self.query_linear = nn.Linear(d_model, d_model, bias=False)
self.key_linear = nn.Linear(d_model, d_model, bias=False)
self.value_linear = nn.Linear(d_model, d_model, bias=False)
self.output_linear = nn.Linear(d_model, d_model)
def split_heads(self, x, batch_size):
seq_length = x.size(1)
# Split the input embeddings and permute
x = x.____
return x.permute(0, 2, 1, 3)