ПочатиПочніть безкоштовно

Додавання методів до класу 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)
Редагувати та запускати код