Methoden toevoegen aan de klasse MultiHeadAttention
In deze oefening bouw je de rest van de klasse MultiHeadAttention helemaal zelf door vier methoden te definiëren:
.split_heads(): splits en transformeer de input-embeddings over de attention-heads.compute_attention(): bereken de scaled dot-product attention-gewichten, vermenigvuldigd met de values-matrix.combine_heads(): transformeer de attention-uitvoer terug naar dezelfde vorm als de input-embeddings,x.forward(): roep de andere methoden aan om de input-embeddings door elk proces te sturen
torch.nn is geïmporteerd als nn, torch.nn.functional is beschikbaar als F, en torch is ook beschikbaar.
Deze oefening maakt deel uit van de cursus
Transformermodels met PyTorch
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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)