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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником ~~~~}} {{TOCright}} '''Позиционное ...)
 
(1 промежуточная версия не показана)
Строка 1: Строка 1:
-
{{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником [[Участник:Iaroslav Lyakhov|Iaroslav Lyakhov]] 20:04, 1 июля 2026 (MSD)}}
+
{{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником [[Участник:Iaroslav Lyakhov|Iaroslav Lyakhov]] 19:40, 5 июля 2026 (MSD)}}
{{TOCright}}
{{TOCright}}
-
'''Позиционное кодирование''' (англ. ''positional encoding'') - способ передать [[Трансформер|трансформеру]] информацию о порядке элементов во входной последовательности. Поскольку [[Механизм внимания|механизм внимания]] сам по себе не учитывает позиции токенов, без позиционного кодирования модель воспринимала бы предложение как «мешок слов». Этот компонент - необходимая часть любой трансформерной архитектуры.
+
'''Позиционное кодирование''' (англ. ''positional encoding'') - способ сообщить [[Трансформер|трансформеру]] порядок элементов во входной последовательности. Сам по себе [[Механизм внимания|механизм внимания]] не различает позиции токенов, поэтому без позиционного кодирования модель воспринимала бы предложение как неупорядоченный «мешок слов». Это делает позиционное кодирование обязательной частью любой трансформерной архитектуры, а способ его реализации сильно влияет на то, насколько длинный текст модель способна обрабатывать.
== Зачем это нужно ==
== Зачем это нужно ==
-
[[Рекуррентная нейронная сеть|Рекуррентные сети]] обрабатывают текст последовательно, поэтому порядок в них заложен естественным образом. Трансформер же обрабатывает все токены одновременно, а операция внимания '''перестановочно-инвариантна''': если поменять местами слова, множество попарных связей не изменится. Между тем «собака укусила человека» и «человек укусил собаку» - разные по смыслу фразы. Позиционное кодирование восстанавливает утраченный порядок: в одних методах - добавляя к [[Embedding|векторному представлению]] каждого [[Токенизация|токена]] информацию о его позиции, в других - модифицируя само вычисление внимания.
+
[[Рекуррентная нейронная сеть|Рекуррентные сети]] читают текст по одному элементу, поэтому порядок в них заложен самой процедурой. Трансформер же обрабатывает все токены одновременно, а операция внимания '''перестановочно-инвариантна''': если переставить входные векторы местами, множество их попарных скалярных произведений не изменится, а значит, не изменится и результат внимания. Между тем «собака укусила человека» и «человек укусил собаку» - разные по смыслу фразы. Позиционное кодирование восстанавливает утраченный порядок: в одних методах - добавляя к [[Embedding|векторному представлению]] каждого [[Токенизация|токена]] информацию о его номере, в других - модифицируя само вычисление внимания.
== Абсолютное кодирование ==
== Абсолютное кодирование ==
-
В исходной работе «Attention Is All You Need» к эмбеддингу токена на позиции <tex>pos</tex> прибавляется вектор с синусоидальными компонентами:
+
При абсолютном кодировании каждой позиции сопоставляется свой вектор, который прибавляется к эмбеддингу токена.
 +
 
 +
'''Синусоидальное кодирование.''' В исходной работе «Attention Is All You Need» вектор позиции задан фиксированными функциями синуса и косинуса разных частот:
::<tex>PE_{(pos,2i)} = \sin\!\left(\frac{pos}{10000^{2i/d}}\right), \qquad PE_{(pos,2i+1)} = \cos\!\left(\frac{pos}{10000^{2i/d}}\right)</tex>
::<tex>PE_{(pos,2i)} = \sin\!\left(\frac{pos}{10000^{2i/d}}\right), \qquad PE_{(pos,2i+1)} = \cos\!\left(\frac{pos}{10000^{2i/d}}\right)</tex>
-
где <tex>i</tex> - номер измерения, <tex>d</tex> - размерность модели. Разные измерения колеблются с разной частотой, задавая каждой позиции уникальный «отпечаток». Плюс подхода - способность в принципе обобщаться на длины, не встречавшиеся при обучении. Альтернатива - '''обучаемые''' позиционные векторы (learned positional embeddings), как в [[BERT]]; они гибче, но плохо экстраполируются за пределы максимальной обученной длины.
+
где <tex>pos</tex> - номер позиции, <tex>i</tex> - номер измерения, <tex>d</tex> - размерность модели. Разные измерения колеблются с разной частотой, поэтому каждая позиция получает уникальный «отпечаток», а относительные сдвиги выражаются через линейные комбинации синусов и косинусов. Плюс подхода - формулы определены для любой позиции, поэтому в принципе можно подавать последовательности длиннее, чем при обучении.
 +
 
 +
'''Обучаемое кодирование.''' Альтернатива - завести отдельный обучаемый вектор для каждой позиции (learned positional embeddings), как в [[BERT]]. Такой способ гибче, но у него жёсткий потолок: для позиций дальше максимальной обученной длины векторов просто нет, и модель не умеет их обрабатывать.
== Относительное кодирование ==
== Относительное кодирование ==
-
Часто важна не абсолютная позиция, а '''расстояние''' между токенами. Относительное позиционное кодирование (Shaw et al., 2018; Transformer-XL) встраивает информацию о взаимном сдвиге прямо в вычисление внимания, что улучшает работу с длинными текстами.
+
Часто важна не абсолютная позиция токена, а '''расстояние''' между двумя токенами. Относительное позиционное кодирование (Shaw et al., 2018; Transformer-XL) встраивает информацию о взаимном сдвиге прямо в вычисление весов внимания. Это лучше отражает природу языка (согласование слов зависит от их близости, а не от абсолютных номеров) и заметно улучшает работу с длинными текстами.
== Современные подходы ==
== Современные подходы ==
-
* '''RoPE''' (Rotary Position Embedding) - поворачивает векторы запросов и ключей на угол, пропорциональный позиции. Скалярное произведение при этом зависит от относительного сдвига. RoPE применяется в моделях LLaMA, GPT-NeoX и стал де-факто стандартом.
+
'''RoPE''' (Rotary Position Embedding) кодирует позицию поворотом. Векторы запроса и ключа разбиваются на пары координат, и каждая пара поворачивается на угол, пропорциональный позиции:
-
* '''ALiBi''' - добавляет к оценкам внимания линейный штраф, растущий с расстоянием; хорошо экстраполируется на длинные контексты.
+
 
 +
::<tex>R_{\theta, m} = \begin{pmatrix}\cos m\theta & -\sin m\theta\\[2pt] \sin m\theta & \cos m\theta\end{pmatrix}</tex>
 +
 
 +
После поворота скалярное произведение запроса и ключа зависит только от их '''относительного''' сдвига, а не от абсолютных позиций. RoPE удачно совмещает достоинства абсолютного и относительного подходов, применяется в моделях LLaMA, GPT-NeoX и стал фактическим стандартом.
 +
 
 +
'''ALiBi''' (Attention with Linear Biases) вообще не добавляет позиционных векторов, а просто вычитает из оценок внимания штраф, линейно растущий с расстоянием между токенами. Метод дешёв и хорошо экстраполируется на длины, не встречавшиеся при обучении.
-
Эти методы напрямую связаны с проблемой расширения [[Контекстное обучение|контекстного окна]]: корректная работа с позициями определяет, насколько далеко модель может «видеть».
+
== Позиционное кодирование и длина контекста ==
 +
Именно от способа кодирования позиций зависит, насколько далеко модель может «видеть». Обучаемые абсолютные векторы жёстко ограничивают длину; синусоиды, RoPE и ALiBi экстраполируются лучше. Практический запрос на всё более длинное [[Контекстное обучение|контекстное окно]] породил приёмы «растягивания» уже обученных позиций - интерполяцию позиционных индексов и модификации RoPE (например, NTK-масштабирование и YaRN), позволяющие увеличить контекст без полного переобучения.
== См. также ==
== См. также ==
Строка 31: Строка 41:
== Литература ==
== Литература ==
-
* {{статья |автор=Vaswani A. и др. |часть=Attention Is All You Need |заглавие=Advances in Neural Information Processing Systems (NeurIPS) |год=2017 |ссылка=https://arxiv.org/abs/1706.03762}}
+
* {{статья |автор=Vaswani A. и др. |заглавие=Attention Is All You Need |издание=Advances in Neural Information Processing Systems (NeurIPS) |год=2017 |ссылка=https://arxiv.org/abs/1706.03762}}
-
* {{статья |автор=Su J. и др. |часть=RoFormer: Enhanced Transformer with Rotary Position Embedding |заглавие=Препринт arXiv:2104.09864 |год=2021 |ссылка=https://arxiv.org/abs/2104.09864}}
+
* {{статья |автор=Shaw P., Uszkoreit J., Vaswani A. |заглавие=Self-Attention with Relative Position Representations |издание=Proc. of NAACL |год=2018 |ссылка=https://arxiv.org/abs/1803.02155}}
-
* {{статья |автор=Shaw P., Uszkoreit J., Vaswani A. |часть=Self-Attention with Relative Position Representations |заглавие=Proc. of NAACL |год=2018 |ссылка=https://arxiv.org/abs/1803.02155}}
+
* {{статья |автор=Su J. и др. |заглавие=RoFormer: Enhanced Transformer with Rotary Position Embedding |издание=Neurocomputing |том=568 |страницы=127063 |год=2024 |ссылка=https://arxiv.org/abs/2104.09864}}
 +
* {{статья |автор=Press O., Smith N. A., Lewis M. |заглавие=Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation (ALiBi) |издание=Proc. of ICLR |год=2022 |ссылка=https://arxiv.org/abs/2108.12409}}
[[Категория:Машинное обучение]]
[[Категория:Машинное обучение]]
[[Категория:Нейронные сети]]
[[Категория:Нейронные сети]]

Текущая версия

Статья написана с использованием 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.