Добавление методов в класс MultiHeadAttention
В этом упражнении вы построите оставшуюся часть класса MultiHeadAttention с нуля, определив четыре метода:
.split_heads(): разбивает входные эмбеддинги (векторные представления) и распределяет их между головами внимания.compute_attention(): вычисляет масштабированное скалярное произведение весов внимания, умноженных на матрицу значений.combine_heads(): преобразует веса внимания обратно в форму, совпадающую с формой входных эмбеддинговx.forward(): вызывает остальные методы и пропускает входные эмбеддинги через каждый из этапов обработки
torch.nn импортирован как nn, torch.nn.functional доступен как F, а также доступен torch.
Это упражнение является частью курса
Трансформерные модели с PyTorch
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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)