YaRN modyfikuje rotacje RoPE w sposób zależny od częstotliwości („NTK-by-parts"): wymiary o wysokiej częstotliwości (kodujące lokalne, krótkozasięgowe relacje) są ekstrapolowane bez interpolacji, wymiary o niskiej częstotliwości (kodujące zależności długozasięgowe) są interpolowane jak w Position Interpolation, a pośrednie wymiary płynnie przechodzą między tymi reżimami. Dodatkowo do logitów attention dodawany jest stały współczynnik temperatury (skalowanie 1/sqrt(t) ~ log(s)) korygujący entropię uwagi przy dłuższych sekwencjach. Tak zmodyfikowany model dotreniowuje się na małej porcji długich sekwencji (rząd ~0.1% tokenów pretreningu), aby ustabilizować jakość. Wariant „Dynamic-YaRN" pozwala stosować skalowanie tylko wtedy, gdy długość sekwencji rzeczywiście przekracza długość pretreningu, co minimalizuje regresję na krótkich promptach.
Modele LLM oparte o RoPE drastycznie tracą jakość, gdy długość kontekstu przekracza długość użytą w pretreningu — pozycje spoza zakresu treningu nie były nigdy widziane, a naiwne ekstrapolowanie RoPE prowadzi do rozpadu uwagi. Wcześniejsze metody (Position Interpolation, NTK-aware interpolation) wymagały dłuższego fine-tuningu lub gorzej radziły sobie z perpleksją na bardzo długich kontekstach.
YaRN bez chociaż krótkiego dotrenowania na długich sekwencjach daje znacząco gorszą jakość niż wariant z fine-tuningiem — szczególnie na zadaniach „needle in a haystack".
Stałe włączenie YaRN dla wszystkich długości wejścia może lekko obniżyć jakość modelu na krótkich promptach (poniżej długości pretreningu).
Część implementacji ogranicza się do samej interpolacji RoPE (NTK-by-parts) i pomija skalowanie temperatury — wówczas wyniki są bliższe NTK-aware niż pełnemu YaRN.
Su i in. wprowadzają RoPE — kodowanie pozycji przez rotację par wymiarów embeddingów, fundament dla całej linii prac nad ekstensjami kontekstu.
Chen i in. (Meta) pokazują, że liniowe skalowanie indeksów pozycji RoPE pozwala rozszerzyć kontekst Llamy po krótkim fine-tuningu. Pierwszy przełom w „cheap context extension".
Społeczność (Reddit user „bloc97") proponuje NTK-aware interpolację: zamiast jednolicie skalować indeksy, modyfikuje się bazę RoPE, zachowując ostrość lokalnych wymiarów. Bez fine-tuningu działa lepiej niż PI.
Peng, Quesnelle, Fan, Shippole publikują YaRN (arXiv:2309.00071). Łączą NTK-by-parts (różne reżimy interpolacji per pasmo częstotliwości) ze skalowaniem temperatury attention, dotreniowują na ~0.1% tokenów pretreningu i biją Position Interpolation oraz wcześniejsze NTK-aware metody na długich kontekstach.
Autorzy publikują otwarte modele Llama 2 7B/13B dotreniowane YaRN do okien 64k i 128k, które stają się popularnymi referencjami dla long-context open-source LLM.
Praca zostaje opublikowana na ICLR 2024, a YaRN staje się de facto standardem ekstensji kontekstu w open-source LLM (Qwen, Mistral-derived models, DeepSeek-V2/V3, Yi-200k, wiele dotreningów Llamy).
Współczynnik rozszerzenia kontekstu: docelowa długość kontekstu / długość pretreningu. Np. dla Llama 2 (4k) → 32k mamy s=8.
Stały współczynnik mnożący logity attention (1/sqrt(t) z zalecaną zależnością log-typu od scale factor). Koryguje entropię uwagi przy dłuższych sekwencjach.
Progi rozdzielające wymiary RoPE na trzy reżimy: czysta ekstrapolacja (wysokie częstotliwości), strefa przejściowa i czysta interpolacja (niskie częstotliwości).
Liczba tokenów długiej sekwencji potrzebnych do dotrenowania modelu z YaRN. W oryginalnej pracy wystarczy rząd ~0.1% tokenów pretreningu.
YaRN to modyfikacja kodowania pozycyjnego w gęstym Transformerze. Sam mechanizm jest deterministyczny, nie wprowadza routingu ani warunkowej aktywacji.
YaRN nie zmienia kosztu obliczeniowego pojedynczego attention — modyfikuje wyłącznie sposób wyliczenia rotacji RoPE oraz skalowanie temperatury. Równoległość jest dokładnie taka jak w standardowym Transformerze z RoPE.
YaRN to czysto algorytmiczna modyfikacja kodowania pozycyjnego i skalowania attention — nie wymaga żadnych specjalnych instrukcji sprzętowych ani zmian kerneli.
Modele YaRN dotreniowuje się na standardowych klastrach GPU; długi kontekst zwykle korzysta z FlashAttention/PagedAttention, które dobrze wykorzystują tensor cores.