Почти все современные LLM кодируют позицию токена поворотом векторов в слое внимания. Этот подход называется RoPE (Rotary Position Embedding) и лежит в основе многих архитектур, включая GPT-4o, Claude 3.5 Sonnet и Llama 3.1. Механизм работает так: вектор запроса и вектор ключа состоят из пар координат, каждую из которых RoPE поворачивает на угол, зависящий от позиции токена. Разные пары вращаются с разной скоростью: быстрые различают соседние слова, медленные отвечают за дальние связи. Вместе они образуют набор часов с разным шагом — от секундной до часовой стрелки.

Главное свойство RoPE — относительность: при сравнении запроса и ключа важна не абсолютная позиция, а расстояние между ними. Модель учится распознавать паттерны вида «что-то похожее встречалось примерно N токенов назад». Однако при инференсе на последовательности длиннее обученного окна возникают проблемы: модель встречает невиданные углы поворота, медленные компоненты слипаются, а энтропия внимания растет, размазывая softmax по большему числу позиций.

МетодПринципПреимуществаНедостатки
Position InterpolationСжатие всех позиций пропорциональноПростота реализацииПадает локальное разрешение
NTK-aware scalingИзменение базы частот с учетом размерностиСохраняет точность на коротких дистанцияхСложнее в настройке

Дополнительно, независимо от RoPE, у моделей есть особенность, похожая на человеческую память: качество обработки данных зависит от их места в тексте. Исследования показывают, что модели хорошо воспринимают начало и конец документа, но теряют середину, и с ростом объема текста это ухудшается. Поэтому часто в рассуждениях моделей встречается шаг «now read in the middle» — попытка обойти эту проблему.

Для борьбы с ограничением окна есть два подхода: дообучение на длинных последовательностях (дорого и долго) и модификация частот RoPE на лету (дешево и сердито). Второй подход включает два основных метода. Position Interpolation (PI) пересчитывает позиции так, чтобы они уместились в обученный диапазон: каждую позицию домножают на дробь, где числитель — исходный максимум, знаменатель — новая длина. Это сжимает и быстрые, и медленные частоты одинаково, из-за чего падает локальное разрешение: соседние токены становятся почти неразличимы.

NTK-aware scaling работает иначе: меняется база частот, причем не линейно, а в степени, зависящей от размерности головы внимания. Быстрые компоненты почти не меняются, сохраняя точность на коротких дистанциях, а медленные сжимаются сильнее, позволяя дальним расстояниям влезать в обученный диапазон. Это перераспределение углов поворота между измерениями дает лучший баланс.

Выбор между методами зависит от задачи: если нужна работа с очень длинными текстами и важна точность на локальном уровне, NTK предпочтительнее. PI проще в реализации, но может потребовать дообучения для восстановления качества. В любом случае, расширение контекста без регистрации и СМС — это практический инструмент для разработчиков, работающих с большими документами, кодом или аналитикой.