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

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

Версия от 16:04, 1 июля 2026; Iaroslav Lyakhov (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Статья написана с использованием LLM Claude Opus 4.8 и проверена участником Iaroslav Lyakhov 20:04, 1 июля 2026 (MSD)


Содержание

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

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

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

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

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

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

где i - номер измерения, d - размерность модели. Разные измерения колеблются с разной частотой, задавая каждой позиции уникальный «отпечаток». Плюс подхода - способность в принципе обобщаться на длины, не встречавшиеся при обучении. Альтернатива - обучаемые позиционные векторы (learned positional embeddings), как в BERT; они гибче, но плохо экстраполируются за пределы максимальной обученной длины.

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

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

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

  • RoPE (Rotary Position Embedding) - поворачивает векторы запросов и ключей на угол, пропорциональный позиции. Скалярное произведение при этом зависит от относительного сдвига. RoPE применяется в моделях LLaMA, GPT-NeoX и стал де-факто стандартом.
  • ALiBi - добавляет к оценкам внимания линейный штраф, растущий с расстоянием; хорошо экстраполируется на длинные контексты.

Эти методы напрямую связаны с проблемой расширения контекстного окна: корректная работа с позициями определяет, насколько далеко модель может «видеть».

См. также

Литература

  • Vaswani A. и др. Advances in Neural Information Processing Systems (NeurIPS). — 2017.
  • Su J. и др. Препринт arXiv:2104.09864. — 2021.
  • Shaw P., Uszkoreit J., Vaswani A. Proc. of NAACL. — 2018.