Wektory zapytań i kluczy w mechanizmie uwagi są rotowane o kąt proporcjonalny do pozycji tokenu przed obliczeniem iloczynu skalarnego. Dzięki temu uwaga między tokenami zależy od ich względnych odległości, a nie pozycji bezwzględnych.
Standardowe kodowanie pozycyjne (addytywne lub sinusoidalne) słabo generalizuje na sekwencje dłuższe niż widoczne w treningu. RoPE koduje pozycje przez rotację macierzy, co naturalnie przenosi się na dłuższe sekwencje.
Zbiór częstotliwości θ_i = base^(-2i/d) (base domyślnie 10000) definiujący kąt rotacji dla każdej pary wymiarów. Niskie wymiary rotują szybko, wysokie wolno, tworząc wielorozdzielczą reprezentację pozycji.
Oficjalna
Blokowo-diagonalna macierz obrotu, która obraca pary sąsiednich wymiarów wektora o kąt m·θ_i, gdzie m to pozycja tokenu. Implementowana wydajnie jako operacje element-wise na parach (x, y) → (x·cos − y·sin, x·sin + y·cos).
RoPE jest stosowany wyłącznie do wektorów zapytań i kluczy (nie do wartości V) przed obliczeniem iloczynu skalarnego uwagi. Dzięki temu wynik uwagi zależy od względnej pozycji m−n dwóch tokenów.
RoPE trenowany na sekwencjach do N tokenów degraduje się dla sekwencji >N bez technik ekstrapolacji (Position Interpolation, NTK-aware scaling, YaRN, LongRoPE). Naiwne rozszerzenie kontekstu prowadzi do chaotycznych rozkładów uwagi.
Przy dużych pozycjach kąty rotacji stają się bardzo małe — obliczenia w float16/bfloat16 mogą powodować błędy numeryczne i utratę informacji pozycyjnej.
RoPE obraca pary sąsiednich wymiarów, więc wymiar głowy uwagi musi być parzysty; nieparzysty wymiar wymaga specjalnej obsługi lub częściowego RoPE.
Su i in. proponują kodowanie pozycji przez rotację wektorów Q/K, łącząc pozycję bezwzględną i względną oraz umożliwiając użycie z uwagą liniową.
Wpis „Rotary Embeddings: A Relative Revolution” oraz zastosowanie RoPE w GPT-J i GPT-NeoX rozpowszechniają metodę w dekoderowych LLM.
Przyjęcie RoPE w LLaMA, a następnie w Mistral, Qwen, Gemma i DBRX, ustanawia je domyślnym kodowaniem pozycji w otwartych LLM.
Chen i in. pokazują, że skalowanie indeksów pozycji (interpolacja) rozszerza okno kontekstu modeli opartych na RoPE przy minimalnym dostrajaniu.
YaRN łączy NTK-aware scaling z korektą temperatury uwagi, rozszerzając kontekst modeli RoPE efektywniej niż czysta interpolacja.
LongRoPE stosuje ewolucyjne wyszukiwanie niejednorodnych współczynników skalowania RoPE, rozszerzając okno kontekstu do ponad 2 milionów tokenów.
Złożoność czasowa: O(n · d). Złożoność przestrzenna: O(n · d).
Podstawa częstotliwości (domyślnie 10000). Zwiększanie base wydłuża długości fal i jest podstawą NTK-aware scaling do rozszerzania kontekstu.
Ułamek wymiaru głowy poddawany rotacji. Pełny RoPE obraca 100% wymiarów; niektóre modele (GPT-NeoX) stosują częściowy RoPE (np. 25%).
Wymiar głowy uwagi musi być parzysty, ponieważ RoPE obraca pary wymiarów.
RoPE to deterministyczna transformacja bez routingu ani warunkowej aktywacji.
Rotacja jest stosowana niezależnie do każdego tokenu i każdej pary wymiarów, więc jest w pełni równoległa.
RoPE to element-wise operacje trygonometryczne stosowane do każdego wektora Q i K — w pełni akcelerowane na GPU, często fused z kernelami uwagi (FlashAttention wspiera fuzję RoPE).
RoPE nie wymaga specjalizowanego sprzętu — to tania transformacja działająca na dowolnym akceleratorze i CPU.