Как LLM видят за пределами обученного окна: от RoPE до YaRN
Современные большие языковые модели не могут просто «увидеть» текст длиннее того, на котором обучались, даже если память позволяет. Фундаментальное ограничение заключается в механизме позиционного кодирования. Статья разбирает, как с помощью алгоритмов масштабирования, таких как RoPE, NTK-aware и YaRN, инженеры преодолевают этот барьер, позволяя моделям работать с контекстом в миллион токенов без дообучения и регистрации.

# Увеличение контекста: преодоление ограничений RoPE
Почти все современные большие языковые модели (LLM) используют механизм позиционного кодирования под названием Rotary Position Embedding (RoPE). Вкратце, он работает следующим образом: векторы запроса и ключа содержат пары координат, которые RoPE поворачивает на угол, зависящий от позиции токена в тексте. Разные пары координат вращаются с разной скоростью: быстрые различают соседние слова, медленные — улавливают связи через тысячи токенов. Это подобно набору часов с разным шагом.
Главное свойство RoPE — модель не запоминает абсолютную позицию («токен на N-м месте»), а учится распознавать дистанцию между токенами («токен встретился N позиций назад»)
Почему модель «слепнет» после обученного окна
Когда на модель подаётся текст длиннее её нативного (обученного) контекста, происходят две основные проблемы:
1. Незнакомые углы поворота: Модель сталкивается с комбинациями вращений, которых она не видела во время обучения. Она не знает, как интерпретировать эти данные. 2. Слипание медленных компонентов: На больших расстояниях быстрые компоненты теряют сигнал из-за множества оборотов, и модель полагается на медленные. Однако на огромных масштабах даже медленные компоненты почти не меняются, предоставляя мало информации о различиях.
Кроме того, с ростом длины последовательности растет энтропия внимания: распределение внимания размазывается, и модели сложнее сфокусироваться на важных токенах. Также существует эффект «зависания в середине» (lost-in-the-middle): качество работы резко падает в центре документа, оставаясь высоким в начале и конце.
Дешевые методы масштабирования
Борьба с ограничениями контекста ведется двумя путями: дорогостоящим дообучением на длинных последовательностях и модификацией частот RoPE в реальном времени (inference).
Position Interpolation (PI) Этот метод сжимает позиции токенов пропорционально. Если модель училась до 262K токенов, а нам нужно 1M, все позиции домножаются на дробь (262K / 1M). Проблема PI в том, что он одинаково сжимает и быстрые, и медленные частоты. Из-за этого страдает локальное разрешение: соседние токены начинают выглядеть для модели почти одинаково, и она путается в порядке слов.
NTK-aware scaling Вместо простого сжатия меняется база, из которой считаются частоты поворота. Она возводится в степень, зависящую от размера головы внимания. Это позволяет минимально менять быстрые компоненты (сохраняя точность на коротких дистанциях) и значительно сжимать медленные, расширяя дальний контекст.
YaRN (Yet another RoPE extension) YaRN объединяет идеи PI и NTK-aware с важным уточнением. Для коротковолновых (быстрых) измерений вращение почти не меняется. Для длинноволновых (медленных) применяется линейное сжатие. Промежуточные измерения смешивают оба подхода. Кроме того, YaRN масштабирует логиты внимания перед softmax, компенсируя рост энтропии и предотвращая «размазывание» внимания по всем позициям.
Именно YaRN позволяет расширять контекст в разы дешевле, чем методы, требующие полного переобучения.
Стоимость масштабирования: KV-кэш и вычисления
Хотя пересчет частот RoPE стоит дешево (просто замена таблиц синусов/косинусов), сам факт увеличения контекста несет огромную нагрузку на память и вычисления.
* KV-кэш: Растет линейно с длиной последовательности. Для миллионного контекста он может занимать десятки гигабайт памяти (например, для Qwen3.8-27B — около 68 ГБ в FP16). * Prefill (предварительная обработка): Затраты вычислений растут квадратично относительно длины входа. Без специальных ускорений (flash-attention) обработка миллионного промпта может занимать часы.
Архитектуры с гибридным вниманием (например, Qwen3.8-27B, где только 16 из 64 слоев используют полное внимание) значительно выгоднее, так как они не накапливают исторический контекст во всех слоях.
Практическое применение: когда это нужно?
Расширенное окно на небольшой модели оправдано, если задача сводится к повторяемому действию над текстом: поиск даты в логге, поиск строки в документе, фильтрация тикетов или ретрейнирование кусков текста.
Если же задача требует глубокого сопоставления всей информации (многошаговое рассуждение, выведение заключения из начала и конца текста), расширить контекст на малой модели невозможно. Здесь кроется главный недостаток: просадка качества в середине документа не компенсируется просто масштабированием RoPE. В таких случаях эффективнее использовать RAG (поиск релевантных кусков) или более мощные модели с нативным длинным окном.
Примеры настройки популярных моделей
Инженеры используют YaRN для настройки известных моделей под задачи с длинным контекстом (например, Qwen3.8-27B, Qwen3.5, Gemma 4).
Для модели Qwen3.8-27B настройка выглядит следующим образом, позволяя достичь контекста в ~1 миллион токенов:
json { "rope_type": "yarn", "rope_theta": 10000000, "partial_rotary_factor": 0.25, "factor": 4.0, "original_max_position_embeddings": 262144 }
Аналогичные рецепты применяются для Qwen3.8-Flash-Next и Qwen3.5, где коэффициент масштабирования подстраивается под емкость модели (для 4B модели разумным пределом часто становится 0.5 млн токенов).
Для моделей с гибридным вниманием, таких как Gemma 4 E2B/E4B, используется смешанный подход с разными параметрами для глобального и скользящего внимания.
Итог: технологии масштабирования контекста, такие как YaRN, открывают доступ к работе с огромными потоками данных без необходимости в сложном дообучении. Однако выбор стратегии зависит от задачи: для поиска и классификации достаточно малой модели с растянутым окном, а для глубокого анализа требуется мощность и нативные возможности больших архитектур.