Позиционное кодирование: откуда модель знает порядок
к эмбеддингу токена добавляют эмбеддинг его позиции, чтобы модель знала, где слово стоит.
Зачем это нужно
Эмбеддинг слова сам по себе не говорит, в каком месте предложения оно стоит. Позиция передаётся отдельным вектором.
Как это работает
Простейший способ — абсолютные позиционные эмбеддинги. Для каждой позиции до максимальной длины заводится вектор, как для слова, и они учатся вместе с остальными параметрами. Минус: позиции в конце окна видны модели реже, поэтому их векторы хуже обучены.
Альтернатива — синусы и косинусы разной частоты, как в оригинальной статье. Такие векторы работают для длин, которых не было в обучении, и отражают связи между соседними позициями. Современные модели часто используют RoPE: он кодирует относительную позицию прямо внутри attention на каждом слое.
Пример
Для предложения «Janet will back the bill» позиции 1–5 добавляются к эмбеддингам слов поэлементно. Итоговый вектор каждого токена содержит и слово, и его место.
Что запомнить
- Позиционный эмбеддинг складывается с эмбеддингом токена.
- Обученные позиции хуже работают на концах окна.
- Синусоиды и RoPE помогают с длинами и относительными позициями.
Где читать дальше
- SLP3, гл. 7 «Transformers and Pretraining», раздел 7.4