Додавання методів до класу MultiHeadAttention
У цій вправі ви побудуєте решту класу MultiHeadAttention з нуля, визначивши чотири методи:
.split_heads(): розділяє та перетворює вхідні вкладення між головами attention.compute_attention(): обчислює масштабовану увагу на основі скалярного добутку та множить її на матрицю значень.combine_heads(): перетворює ваги уваги назад у ту саму форму, що й вхідні вкладенняx.forward(): викликає інші методи, щоб пропустити вхідні вкладення через кожен етап
torch.nn імпортовано як nn, torch.nn.functional доступний як F, і torch також доступний.
Ця вправа є частиною курсу
Моделі Transformer з 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)