РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
444 of 769 menu

Функция scaled_dot_product_attention

Функция scaled_dot_product_attention из модуля torch.nn.functional вычисляет внимание на основе скалярного произведения запроса и ключа с последующим масштабированием. Она принимает тензоры запроса q, ключа k и значения v, а также необязательную маску attn_mask и коэффициент dropout. Функция оптимизирована для работы с графическими процессорами и поддерживает эффективные реализации для различных архитектур.

Синтаксис

torch.nn.functional.scaled_dot_product_attention( q, k, v, attn_mask=None, dropout_p=0.0, is_causal=False, scale=None )

Пример

Давайте вычислим внимание для простых тензоров запроса, ключа и значения:

import torch import torch.nn.functional as F torch.manual_seed(0) q = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) k = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) v = torch.tensor([[5.0, 6.0], [7.0, 8.0]]) res = F.scaled_dot_product_attention(q, k, v) print(res)

Результат выполнения кода:

tensor([ [5.5906, 6.5906], [6.3072, 7.3072], ])

Пример

Рассмотрим использование маски для скрытия определённых позиций:

import torch import torch.nn.functional as F torch.manual_seed(0) q = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) k = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) v = torch.tensor([[5.0, 6.0], [7.0, 8.0]]) mask = torch.tensor([[0.0, -float('inf')], [0.0, 0.0]]) res = F.scaled_dot_product_attention(q, k, v, attn_mask=mask) print(res)

Результат выполнения кода:

tensor([ [5.1290, 6.1290], [6.3072, 7.3072], ])

Пример

Применим каузальную маску для авторегрессивного моделирования:

import torch import torch.nn.functional as F torch.manual_seed(0) q = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) k = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) v = torch.tensor([[5.0, 6.0], [7.0, 8.0]]) res = F.scaled_dot_product_attention(q, k, v, is_causal=True) print(res)

Результат выполнения кода:

tensor([ [5.5906, 6.5906], [6.3072, 7.3072], ])

Пример

Изменим коэффициент масштабирования для управления значениями внимания:

import torch import torch.nn.functional as F torch.manual_seed(0) q = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) k = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) v = torch.tensor([[5.0, 6.0], [7.0, 8.0]]) res = F.scaled_dot_product_attention(q, k, v, scale=0.5) print(res)

Результат выполнения кода:

tensor([ [5.5167, 6.5167], [6.6529, 7.6529], ])

Пример

Добавим dropout для регуляризации модели:

import torch import torch.nn.functional as F torch.manual_seed(0) q = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) k = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) v = torch.tensor([[5.0, 6.0], [7.0, 8.0]]) res = F.scaled_dot_product_attention(q, k, v, dropout_p=0.5) print(res)

Результат выполнения кода:

tensor([ [ 0.0000, 0.0000], [12.6143, 14.6143], ])

Смотрите также

  • функцию softmax,
    которая применяется для нормализации весов внимания
  • функцию cosine_similarity,
    которая вычисляет косинусное сходство между векторами
  • функцию dropout,
    которая применяет регуляризацию путем обнуления элементов
  • функцию multi_head_attention_forward,
    которая реализует многоголовое внимание
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить