Многоголовый механизм внимания
-
class torch.nn.MultiheadAttention(embed_dim, num_heads, dropout=0.0, bias=True, add_bias_kv=False, add_zero_attn=False, kdim=None, vdim=None, batch_first=False, device=None, dtype=None)[source] -
Позволяет модели совместно обращать внимание на информацию из различных подпространств представлений, как описано в статье: Внимание — это всё, что вам нужно.
Многоголовое внимание определяется как:
где .
nn.MultiHeadAttentionбудет использовать оптимизированные реализацииscaled_dot_product_attention()по возможности.В дополнение к поддержке новой функции
scaled_dot_product_attention(), для ускорения вывода, MHA будет использовать быстрый вывод с поддержкой вложенных тензоров, если:- вычисляется самовнимание (т.е.,
query,key, иvalueявляются одним и тем же тензором). - входные данные сгруппированы (3D) с
batch_first==True - либо вычисление градиента отключено (используя
torch.inference_modeилиtorch.no_grad) или аргумент тензораrequires_gradотсутствует - обучение отключено (используя
.eval()) -
add_bias_kvравноFalse -
add_zero_attnравноFalse -
batch_firstравноTrueи входные данные сгруппированы -
kdimиvdimравныembed_dim - если передается вложенный тензор, то ни
key_padding_mask, ниattn_maskне передаются - автоматическое масштабирование отключено
Если используется оптимизированная реализация быстрого вывода, можно передать вложенный тензор для
query/key/valueдля более эффективного представления заполнения, чем использование маски заполнения. В этом случае будет возвращен вложенный тензор, и можно ожидать дополнительного ускорения, пропорционального доле заполнения входных данных.- Параметры
-
- embed_dim – Общая размерность модели.
-
num_heads – Количество параллельных головок внимания. Обратите внимание, что
embed_dimбудет разделен наnum_heads(т.е. каждая головка будет иметь размерembed_dim // num_heads). -
dropout – Вероятность отбрасывания для
attn_output_weights. По умолчанию:0.0(без отбрасывания). -
bias – Если указано, добавляет смещение к слоям проектирования входных / выходных данных. По умолчанию:
True. -
add_bias_kv – Если указано, добавляет смещение к последовательностям ключей и значений по оси dim=0. По умолчанию:
False. -
add_zero_attn – Если указано, добавляет новую группу нулей к последовательностям ключей и значений по оси dim=1. По умолчанию:
False. -
kdim – Общее количество признаков для ключей. По умолчанию:
None(используетkdim=embed_dim). -
vdim – Общее количество признаков для значений. По умолчанию:
None(используетvdim=embed_dim). -
batch_first – Если
True, то входные и выходные тензоры предоставляются как (пакет, последовательность, признак). По умолчанию:False(последовательность, пакет, признак).
Примеры:
>>> multihead_attn = nn.MultiheadAttention(embed_dim, num_heads) >>> attn_output, attn_output_weights = multihead_attn(query, key, value)
-
forward(query, key, value, key_padding_mask=None, need_weights=True, attn_mask=None, average_attn_weights=True, is_causal=False)[source]
- вычисляется самовнимание (т.е.,
-
- Параметры
-
-
query (Tensor) – Векторы запросов формы для неразбитого входного сигнала, при
batch_first=Falseили приbatch_first=True, где — длина целевой последовательности, — размер пакета, и — размерность вложений запросаembed_dim. Запросы сравниваются с парами ключ-значение для получения результата. Более подробную информацию см. в статье «Attention Is All You Need». -
key (Tensor) – Векторы ключей формы для неразбитого входного сигнала, при
batch_first=Falseили приbatch_first=True, где — длина исходной последовательности, — размер пакета, и — размерность вложений ключейkdim. Более подробную информацию см. в статье «Attention Is All You Need». -
value (Tensor) – Векторы значений формы для неразбитого входного сигнала, при
batch_first=Falseили приbatch_first=True, где — длина исходной последовательности, — размер пакета, и — размерность вложений значенийvdim. Более подробную информацию см. в статье «Attention Is All You Need». -
key_padding_mask (Optional[Tensor]) — При указании маска формы , указывающая, какие элементы в
keyнужно игнорировать с целью внимания (т. е. обрабатывать как «заполнитель»). Для неразбитогоquery, форма должна быть . Поддерживаются бинарные и числовые маски. Для бинарной маски значениеTrueуказывает, что соответствующее значениеkeyбудет проигнорировано для целей внимания. Для числовой маски оно будет непосредственно добавлено к соответствующему значениюkey. -
need_weights (bool) — При указании возвращает
attn_output_weightsв дополнение кattn_outputs. Установитеneed_weights=Falseдля использования оптимизированногоscaled_dot_product_attentionи достижения наилучшей производительности для MHA. По умолчанию:True. -
attn_mask (Optional[Tensor]) — При указании 2D или 3D маска, предотвращающая внимание к определенным позициям. Должна иметь форму или , где — размер пакета, — длина целевой последовательности, и — длина исходной последовательности. 2D маска будет транслироваться по пакету, а 3D маска допускает различную маску для каждой записи в пакете. Поддерживаются бинарные и числовые маски. Для бинарной маски значение
Trueуказывает, что соответствующая позиция не допускает внимания. Для числовой маски значения маски будут добавлены к весу внимания. Если и attn_mask, и key_padding_mask указаны, их типы должны совпадать. -
average_attn_weights (bool) — Если True, указывает, что возвращаемое
attn_weightsдолжно быть усреднено по головам. В противном случаеattn_weightsпредоставляются отдельно для каждой головы. Обратите внимание, что этот флаг действует только приneed_weights=True. По умолчанию:True(т. е. усреднение весов по головам)
-
query (Tensor) – Векторы запросов формы для неразбитого входного сигнала, при
-
-
is_causal (bool) – Если указано, применяется маскировка причинно-следственной связи как маска внимания. По умолчанию:
False. Предупреждение:is_causalдаёт подсказку, чтоattn_maskявляется маской причинно-следственной связи. Неправильные подсказки могут привести к неверному выполнению, включая обратную совместимость.
-
is_causal (bool) – Если указано, применяется маскировка причинно-следственной связи как маска внимания. По умолчанию:
- Тип возвращаемого значения
- Выходные данные:
-
-
attn_output - Выходы внимания формы при невведённом размере пакета, при
batch_first=Falseили приbatch_first=True, где — длина целевой последовательности, — размер пакета, и — размерность встраиванияembed_dim. -
attn_output_weights - Возвращается только при
need_weights=True. Еслиaverage_attn_weights=True, возвращает средневзвешенные по головам веса внимания формы при невведённом размере пакета или , где — размер пакета, — длина целевой последовательности, и — длина исходной последовательности. Еслиaverage_attn_weights=False, возвращает веса внимания на голову формы при невведённом размере пакета или .
Примечание
batch_firstаргумент игнорируется для невведённых входных данных. -
attn_output - Выходы внимания формы при невведённом размере пакета, при
-
merge_masks(attn_mask, key_padding_mask, query)[source] -
Определить тип маски и объединить маски при необходимости. Если предоставлена только одна маска, эта маска и соответствующий тип маски будут возвращены. Если предоставлены обе маски, обе маски будут расширены до формы
(batch_size, num_heads, seq_len, seq_len), объединены с логическимorи возвращён тип маски 2:param attn_mask: маска внимания формы(seq_len, seq_len), тип маски 0 :param key_padding_mask: маска заполнения формы(batch_size, seq_len), тип маски 1 :param query: векторы запроса формы(batch_size, seq_len, embed_dim)- Возвращаемое значение
-
объединённая маска mask_type: объединённый тип маски (0, 1 или 2)
- Тип возвращаемого значения
-
merged_mask
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nn.MultiheadAttention.html