Ce este RoPE (Rotary Position Embedding) și YaRN?

Arhitectură și Fundamente Tehnice Su et al. (2021) / Peng et al. (2023)

RoPE codifică poziția tokenilor prin rotirea vectorilor Query și Key; YaRN extinde fereastra de context a modelelor cu RoPE cu un fine-tuning scurt.

Denumire completă

Codificare pozițională prin rotație; extinderea contextului prin interpolarea frecvențelor RoPE

RoPE (Su et al., 2021, lucrarea RoFormer) codifică poziția absolută a fiecărui token printr-o matrice de rotație aplicată vectorilor Query și Key, pe perechi de dimensiuni. Produsul scalar dintre doi vectori rotiți depinde astfel de distanța relativă dintre tokeni. Lucrarea menționează și o descreștere a dependenței dintre tokeni pe măsură ce distanța relativă crește.

Modelele cu RoPE nu generalizează singure dincolo de lungimea pe care au fost antrenate. YaRN („Yet another RoPE extensioN method”, Peng et al., 2023) rezolvă asta cu mai puțin calcul decât metodele anterioare: de 10 ori mai puțini tokeni și de 2,5 ori mai puțini pași de antrenare.

YaRN nu interpolează dimensiunile de frecvență înaltă (lungimea lor de undă este mult mai mică decât contextul), interpolează mereu dimensiunile de frecvență joasă și le amestecă pe cele intermediare. În plus, ajustează temperatura atenției. Cu YaRN, Llama 2 7B și 13B au fost extinse la 64K și 128K de tokeni.

Concepte cheie și caracteristici

Concept / Parametru Descriere practică
rope_theta Frecvența de bază RoPE. Llama 3 a crescut-o la 500.000 pentru context lung.
rope_type: yarn Activează YaRN în configurația modelului (Transformers, vLLM, llama.cpp).
factor (s) De câte ori se extinde contextul față de cel original (de exemplu 4: de la 32.768 la 131.072).
original_max_position_embeddings Lungimea de context pe care a fost antrenat modelul înainte de extindere.
Temperatura atenției În YaRN, √(1/t) = 0,1 · ln(s) + 1.

Exemple practice și scenarii reale

Exemplul 1: Activarea YaRN la Qwen3 (config.json)

Din model card-ul oficial Qwen3: modelul are nativ 32.768 de tokeni, iar autorii au validat 131.072 cu YaRN.

{
  ...,
  "rope_scaling": {
    "rope_type": "yarn",
    "factor": 4.0,
    "original_max_position_embeddings": 32768
  }
}

Exemplul 2: Același lucru la pornirea cu vLLM

vllm serve Qwen/Qwen3-235B-A22B --rope-scaling '{"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":32768}' --max-model-len 131072

Exemplul 3: Un model livrat direct cu YaRN: gpt-oss-120b

Din fișierul config.json publicat de OpenAI pe Hugging Face (fragment).

"max_position_embeddings": 131072,
"rope_theta": 150000,
"rope_scaling": {
  "rope_type": "yarn",
  "factor": 32.0,
  "original_max_position_embeddings": 4096,
  "beta_fast": 32.0,
  "beta_slow": 1.0
}

Greșeli frecvente și capcane

  • Activezi YaRN pentru texte scurte. Documentația Qwen3 avertizează că implementările YaRN statice (factor constant) pot afecta performanța pe texte scurte și nu recomandă YaRN dacă textele nu depășesc de obicei 32.768 de tokeni.
  • Mărești max-model-len fără rope_scaling sau fără un model antrenat pentru acea lungime. Modelele cu RoPE nu generalizează singure peste lungimea de antrenare.
  • Uiți de memorie: un context mai lung înseamnă un KV cache proporțional mai mare.

Noțiuni și module înrudite