Aan de slagGa gratis aan de slag

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

Cursus bekijken

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)
Code bewerken en uitvoeren