Menambahkan metode ke kelas MultiHeadAttention
Dalam latihan ini, Anda akan membangun sisa kelas MultiHeadAttention dari awal dengan mendefinisikan empat metode:
.split_heads(): membagi dan mentransformasikan embedding masukan di antara head attention.compute_attention(): menghitung bobot scaled dot-product attention yang dikalikan dengan matriks values.combine_heads(): mentransformasikan kembali bobot attention ke bentuk yang sama seperti embedding masukan,x.forward(): memanggil metode lainnya untuk meneruskan embedding masukan melalui setiap proses
torch.nn telah diimpor sebagai nn, torch.nn.functional tersedia sebagai F, dan torch juga tersedia.
Latihan ini adalah bagian dari kursus
Model Transformer dengan PyTorch
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
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)