НачатьНачать бесплатно

Создание класса MultiHeadAttention

Теперь, когда вы определили классы для создания токенных и позиционных эмбеддингов (векторных представлений), пришло время определить класс для выполнения многоголового внимания. Для начала задайте параметры, необходимые для вычисления внимания, а также линейные слои: три для преобразования входных эмбеддингов в матрицы запросов, ключей и значений, и один — для проецирования объединённых весов внимания обратно в эмбеддинги.

torch.nn импортирован как nn.

Это упражнение является частью курса

Трансформерные модели с PyTorch

Посмотреть курс

Инструкции к упражнению

  • Вычислите размерность эмбеддинга, которую будет обрабатывать каждая голова внимания, — head_dim.
  • Определите три входных слоя (для запроса, ключа и значения) и один выходной слой; отключите параметр смещения для входных слоёв.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

class MultiHeadAttention(nn.Module):
    def __init__(self, d_model, num_heads):
        super().__init__()
        # Calculate the dimensions each head will process
        self.num_heads = num_heads
        self.d_model = d_model
        self.head_dim = ____
        # Define the three input layers and one output layer
        self.query_linear = nn.Linear(____, ____, bias=False)
        self.key_linear = nn.Linear(____)
        self.value_linear = ____
        self.output_linear = ____
Редактировать и запускать код