Lägga till metoder i klassen MultiHeadAttention
I den här övningen bygger du resten av klassen MultiHeadAttention från grunden genom att definiera fyra metoder:
.split_heads(): delar upp och transformerar indatainbäddningarna mellan uppmärksamhetshuvudena.compute_attention(): beräknar de skalade skalarproduktsvikterna multiplicerade med värdesmatrisen.combine_heads(): transformerar uppmärksamhetsvikterna tillbaka till samma form som indatainbäddningarna,x.forward(): anropar de övriga metoderna för att skicka indatainbäddningarna genom varje steg
torch.nn har importerats som nn, torch.nn.functional är tillgängligt som F, och torch är också tillgängligt.
Den här övningen är en del av kursen
Transformermodeller med PyTorch
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)