W standardowym RoPE pozycja pos rotuje pary wymiarów embeddingu z częstotliwością ω_i = 1 / base^(2i/d), gdzie base = 10000. Position Interpolation skaluje samą pozycję: pos → pos/s, co odpowiada przemnożeniu wszystkich częstotliwości przez 1/s — uniformnie. NTK-aware działa inaczej: zachowuje wyrażenie ω_i = 1 / base'^(2i/d), ale przyjmuje base' = base · s^(d/(d-2)). Skutek: dla najwyższych częstotliwości (małe i) ω_i pozostaje bardzo bliskie oryginalnej wartości (ekstrapolacja — model widzi „znane" rotacje), dla najniższych częstotliwości (duże i) ω_i jest mocno redukowane (interpolacja — pozycje 10× dalej mieszczą się w tej samej rotacji). Empiryczny efekt: bez fine-tuningu można rozszerzyć kontekst Llamy z 2k do 4k–8k tokenów przy znacząco mniejszym wzroście perpleksji niż w PI. Wariant „NTK-by-parts" (już z YaRN) dzieli wymiary RoPE na trzy reżimy (ekstrapolacja / przejście / interpolacja) zamiast płynnej zmiany przez modyfikację base.
Position Interpolation (PI) jednolicie skaluje wszystkie wymiary RoPE — co kompresuje także wysokie częstotliwości kodujące lokalne, krótkozasięgowe relacje. To pogarsza jakość modelu szczególnie BEZ fine-tuningu i jest sprzeczne z teorią NTK, według której sieci neuronowe mają „spectral bias" i gorzej uczą się wysokich częstotliwości. Bez NTK-aware, jedynym sposobem na rozszerzenie kontekstu RoPE-LLM było PI + długie douczanie, co zamykało drogę do szybkich eksperymentów społeczności open-source.
Jedyny realny komponent metody — przeliczenie nowej bazy częstotliwości na podstawie scale factor i wymiaru głowy. W wariancie static obliczane raz, w Dynamic NTK per sekwencja.
Oficjalna
Włączenie NTK-aware z jedną, stałą wartością base' lekko obniża jakość modelu dla sekwencji krótszych niż pretreningowa. Dla zastosowań mieszanych (chat + long-doc) jest to widoczne.
NTK-aware bez fine-tuningu dobrze działa do ok. 4× długości pretreningu. Próby skoku do 16×–32× bez douczania powodują widoczną degradację — wtedy lepiej sięgnąć po YaRN/LongRoPE z fine-tuningiem.
Część konfiguracji w bibliotekach pozwala wybrać „linear" (PI) lub „dynamic"/"ntk" — to dwie różne metody, a dla danego modelu trzeba używać tej, na którą został dotreniowany (jeśli w ogóle).
Jacot, Gabriel, Hongler publikują pracę o NTK i „spectral bias" sieci neuronowych — sieci preferują uczenie się niskich częstotliwości, a wysokie są dla nich trudne. Ta intuicja stoi za nazwą metody NTK-aware.
Su et al. publikują Rotary Position Embeddings — kodowanie pozycji przez rotację par wymiarów embeddingów. NTK-aware będzie modyfikacją bazy częstotliwości RoPE.
Meta publikuje PI — pierwszą metodę „cheap context extension". Skaluje pozycje uniformnie. Wymaga fine-tuningu dla pełnej jakości. Stanowi bezpośredni punkt odniesienia dla NTK-aware.
Użytkownik Reddita „bloc97" w /r/LocalLLaMA proponuje NTK-aware Scaled RoPE: zamiast skalować indeksy, zmienić bazę. Działa BEZ fine-tuningu. Społeczność błyskawicznie adoptuje — wpada do llama.cpp, exllama i Hugging Face Transformers w ciągu kilku tygodni.
Społeczność szybko proponuje „Dynamic NTK": base' przeliczane per sekwencja na podstawie aktualnej długości. Likwiduje regresję na krótkich promptach. Staje się domyślnym wariantem w produkcyjnych implementacjach.
Peng, Quesnelle, Fan, Shippole publikują YaRN, który formalizuje i ulepsza NTK-aware: dzieli wymiary na trzy reżimy (ekstrapolacja / przejście / interpolacja) zamiast jednej globalnej bazy, dodaje skalowanie temperatury attention. Bije NTK-aware przy fine-tuningu.
Microsoft pokazuje, że ręczne wzory typu NTK-aware można zastąpić ewolucyjnym wyszukiwaniem niejednorodnych współczynników per wymiar i per pozycja, osiągając kontekst >2M tokenów.
Złożoność czasowa: O(1) narzut (przeliczenie stałej base'). Złożoność przestrzenna: O(1) dodatkowych parametrów.
NTK-aware nie wprowadza realnego bottlenecka. Wszystkie ograniczenia long-context inference (attention O(T²·d), pamięć KV cache O(T·d_kv·layers)) są identyczne jak w bazowym RoPE-Transformerze.
Współczynnik rozszerzenia kontekstu: docelowa długość / długość pretreningu. Wchodzi do wzoru base' = base · s^(d/(d-2)).
Nowa baza RoPE wyliczana ze scale factora. Dla Llama 1 (d=128, base=10000) i s=4: base' ≈ 39370. Ta jedna liczba steruje całą metodą.
Wariant „Dynamic NTK", w którym base' jest przeliczana per sekwencja na podstawie aktualnej długości — zamiast jednej stałej wartości. Likwiduje regresję na krótkich promptach.
NTK-aware to czysto matematyczna modyfikacja kodowania pozycji w gęstym RoPE-Transformerze. Brak routingu, brak warunkowej aktywacji.
Modyfikacja sprowadza się do zmiany jednej stałej (base) przy obliczaniu rotacji RoPE. Brak narzutu obliczeniowego, brak dodatkowych zależności sekwencyjnych.
Metoda sprowadza się do zmiany jednej stałej w obliczeniu rotacji RoPE — działa identycznie na każdym hardware obsługującym RoPE-Transformer.
Dobrze współpracuje z FlashAttention i PagedAttention. Dynamic NTK wymaga tylko przeliczenia stałej raz per request — narzut pomijalny.