Позиционное кодирование

Материал из MachineLearning.

Перейти к: навигация, поиск
Статья написана с использованием LLM Claude Opus 4.8 и проверена участником Iaroslav Lyakhov 19:40, 5 июля 2026 (MSD)


Содержание

Позиционное кодирование (англ. positional encoding) - способ сообщить трансформеру порядок элементов во входной последовательности. Сам по себе механизм внимания не различает позиции токенов, поэтому без позиционного кодирования модель воспринимала бы предложение как неупорядоченный «мешок слов». Это делает позиционное кодирование обязательной частью любой трансформерной архитектуры, а способ его реализации сильно влияет на то, насколько длинный текст модель способна обрабатывать.

Зачем это нужно

Рекуррентные сети читают текст по одному элементу, поэтому порядок в них заложен самой процедурой. Трансформер же обрабатывает все токены одновременно, а операция внимания перестановочно-инвариантна: если переставить входные векторы местами, множество их попарных скалярных произведений не изменится, а значит, не изменится и результат внимания. Между тем «собака укусила человека» и «человек укусил собаку» - разные по смыслу фразы. Позиционное кодирование восстанавливает утраченный порядок: в одних методах - добавляя к векторному представлению каждого токена информацию о его номере, в других - модифицируя само вычисление внимания.

Абсолютное кодирование

При абсолютном кодировании каждой позиции сопоставляется свой вектор, который прибавляется к эмбеддингу токена.

Синусоидальное кодирование. В исходной работе «Attention Is All You Need» вектор позиции задан фиксированными функциями синуса и косинуса разных частот:

PE_{(pos,2i)} = \sin\!\left(\frac{pos}{10000^{2i/d}}\right), \qquad PE_{(pos,2i+1)} = \cos\!\left(\frac{pos}{10000^{2i/d}}\right)

где pos - номер позиции, i - номер измерения, d - размерность модели. Разные измерения колеблются с разной частотой, поэтому каждая позиция получает уникальный «отпечаток», а относительные сдвиги выражаются через линейные комбинации синусов и косинусов. Плюс подхода - формулы определены для любой позиции, поэтому в принципе можно подавать последовательности длиннее, чем при обучении.

Обучаемое кодирование. Альтернатива - завести отдельный обучаемый вектор для каждой позиции (learned positional embeddings), как в BERT. Такой способ гибче, но у него жёсткий потолок: для позиций дальше максимальной обученной длины векторов просто нет, и модель не умеет их обрабатывать.

Относительное кодирование

Часто важна не абсолютная позиция токена, а расстояние между двумя токенами. Относительное позиционное кодирование (Shaw et al., 2018; Transformer-XL) встраивает информацию о взаимном сдвиге прямо в вычисление весов внимания. Это лучше отражает природу языка (согласование слов зависит от их близости, а не от абсолютных номеров) и заметно улучшает работу с длинными текстами.

Современные подходы

RoPE (Rotary Position Embedding) кодирует позицию поворотом. Векторы запроса и ключа разбиваются на пары координат, и каждая пара поворачивается на угол, пропорциональный позиции:

R_{\theta, m} = \begin{pmatrix}\cos m\theta & -\sin m\theta\\[2pt] \sin m\theta & \cos m\theta\end{pmatrix}

После поворота скалярное произведение запроса и ключа зависит только от их относительного сдвига, а не от абсолютных позиций. RoPE удачно совмещает достоинства абсолютного и относительного подходов, применяется в моделях LLaMA, GPT-NeoX и стал фактическим стандартом.

ALiBi (Attention with Linear Biases) вообще не добавляет позиционных векторов, а просто вычитает из оценок внимания штраф, линейно растущий с расстоянием между токенами. Метод дешёв и хорошо экстраполируется на длины, не встречавшиеся при обучении.

Позиционное кодирование и длина контекста

Именно от способа кодирования позиций зависит, насколько далеко модель может «видеть». Обучаемые абсолютные векторы жёстко ограничивают длину; синусоиды, RoPE и ALiBi экстраполируются лучше. Практический запрос на всё более длинное контекстное окно породил приёмы «растягивания» уже обученных позиций - интерполяцию позиционных индексов и модификации RoPE (например, NTK-масштабирование и YaRN), позволяющие увеличить контекст без полного переобучения.

См. также

Литература

  • Vaswani A. и др. Attention Is All You Need // Advances in Neural Information Processing Systems (NeurIPS). — 2017.
  • Shaw P., Uszkoreit J., Vaswani A. Self-Attention with Relative Position Representations // Proc. of NAACL. — 2018.
  • Su J. и др. RoFormer: Enhanced Transformer with Rotary Position Embedding // Neurocomputing. — 2024. — Т. 568. — С. 127063.
  • Press O., Smith N. A., Lewis M. Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation (ALiBi) // Proc. of ICLR. — 2022.