Modelele Transformer timpurii adăugau un vector static de poziție peste vectorul de cuvânt (Absolute Positional Embeddings). Această metodă avea un mare defect: dacă modelul era antrenat pe texte de maximum 2.048 de tokeni, nu avea nicio idee ce să facă cu poziția 2.049, generând halucinații complete dincolo de lungimea de antrenament.
RoPE (Rotary Position Embedding) a schimbat complet paradigma: în loc să adune un vector de poziție, el rotește vectorii Query și Key în spațiul 2D folosind o matrice de rotație dependentă de distanța relativă dintre două cuvinte. Când două cuvinte sunt apropiate, produsul lor scalar este mare; pe măsură ce se îndepărtează, rotațiile relative encodează precis distanța.
Pentru a extinde contextul la lungimi astronomice (128k–1M tokeni), tehnica YaRN (Yet another RoPE extensioN) scalează dinamic frecvențele de rotație: frecvențele înalte (responsabile de gramatica locală) sunt păstrate intacte, în timp ce frecvențele joase (responsabile de memoria pe termen lung a documentului) sunt comprimate inteligent, prevenind confuzia modelului la texte masive.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
Base Frequency (theta) |
Frecvența de bază a rotației (crescută tipic de la 10.000 la 500.000 sau 1.000.000 pentru contexte lungi). |
Scaling Factor (s) |
Factorul de multiplicare a lungimii contextului (ex. un factor de 8 extinde un context de 4.096 la 32.768 tokeni). |
YaRN Attention Scaling |
Modificarea temperaturii Softmax pentru a compensa creșterea entropiei atenției pe secvențe ultra-lungi. |
Distanță Relativă |
Proprietatea matematică prin care modelul judecă relevanța dintre tokeni pe baza depărtării dintre ei, nu a indexului absolut în fișier. |
Exemple practice și scenarii reale
Exemplul 1: Configurarea parametrului rope_scaling în fișierul config.json al unui model
Cum este instruit un model Llama să folosească YaRN pentru un context de 128k tokeni.
{
"architectures": ["LlamaForCausalLM"],
"max_position_embeddings": 131072,
"rope_theta": 500000.0,
"rope_scaling": {
"type": "yarn",
"factor": 8.0,
"original_max_position_embeddings": 16384
}
}
Rezultat & Impact
Modelul poate citi cărți întregi sau repositorii complete de cod fără pierderea atenției.
Greșeli frecvente și capcane
- Creșterea simplă a parametrului context_length fără ajustarea corespunzătoare a frecvenței rope_theta sau aplicarea unui algoritm de scaling precum YaRN, ceea ce duce la colapsul atenției.
- Presupunerea că un context extins prin RoPE scalează automat memoria GPU; deși logica modelului suportă 128k tokeni, memoria necesară pentru KV Cache rămâne proporțională cu lungimea secvenței.