Архитектуры моделей 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)

Преимущества

  1. Относительные позиции кодируются через скалярное произведение
  2. Экстраполяция — модель работает на длинах больше, чем видела при обучении
  3. Эффективность — O(d) вычислений, совмещается с attention
  4. Декай с расстоянием — далёкие токены получают меньший вес

Кто использует 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
)

Связанные термины

Является частью

Попробуйте на практике

Арендуйте GPU и запустите ML-модели в Intelion Cloud

Начать работу