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.
RoPE trenowany na sekwencjach do N tokenów degraduje się dla sekwencji >N bez technik ekstrapolacji (YaRN, LongRoPE, NTK-aware scaling). Naiwne rozszerzenie kontekstu prowadzi do chaotycznych uwag.
Przy dużych pozycjach (np. pozycja 100k) kąty rotacji stają się bardzo małe — obliczenia w float16/bfloat16 mogą powodować błędy numeryczne. Zalecane: obliczenia RoPE w float32, cast do bf16 po aplikacji.
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 attention (FlashAttention-3 wspiera RoPE fusion).