Архитектуры моделей
22 просмотра
RoPE
Rotary Positional Encoding
RoPE (Rotary Positional Encoding) — метод кодирования позиций токенов в Transformer через вращение в комплексном пространстве. Стандарт для LLM: поддерживает экстраполяцию на длины, невиданные при обучении.
Что такое RoPE
RoPE (Su et al., 2021) — метод позиционного кодирования, который кодирует абсолютную позицию через вращение вектора запроса/ключа, при этом скалярное произведение зависит только от относительной позиции.
Идея
Вместо добавления позиционного вектора к эмбеддингу (как в оригинальном Transformer), RoPE вращает вектор на угол, пропорциональный позиции:
q_rotated = R(θ, position) × q
k_rotated = R(θ, position) × k
Где R(θ, pos) — матрица вращения:
θ_i = base^(-2i/d) (base обычно = 10000)
Преимущества
- Относительные позиции кодируются через скалярное произведение
- Экстраполяция — модель работает на длинах больше, чем видела при обучении
- Эффективность — O(d) вычислений, совмещается с attention
- Декай с расстоянием — далёкие токены получают меньший вес
Кто использует RoPE
LLaMA (все версии), Mistral, Qwen, Gemma, Phi, CodeLlama — практически все современные LLM.
Расширение контекста через RoPE
- Позиционная интерполяция — сжать позиции в обученный диапазон
- YaRN — NTK-aware scaling + temperature scaling
- Dynamic NTK — адаптивное масштабирование base в зависимости от длины
# YaRN в vLLM
llm = LLM(
model="meta-llama/Llama-3-8B",
rope_scaling={"type": "yarn", "factor": 4.0},
max_model_len=32768, # 4× от обученного 8K
)
Связанные термины
Является частью