Was ist RoPE?

Rotary Position Embedding (RoPE) rotiert Vektoren in 2D-Unterräumen basierend auf ihrer Position. Der Schlüssel: Relative Position zwischen zwei Tokens entspricht der Rotationsdifferenz ihrer Embeddings. Dies ermöglicht Zero-Shot-Längen-Extrapolation und wird in Llama, PaLM und GPT-NeoX verwendet.

Steuerung

5
10
0.10

Rotationswinkel

Position 1 (Query)
0.50 rad
Position 2 (Key)
1.00 rad
Relative Rotation
0.50 rad
Skalarprodukt
0.877
Fig. 1 | RoPE Rotation in 2D-Unterraum. Blauer Vektor (Position 1/Query) und orangener Vektor (Position 2/Key) rotieren um verschiedene Winkel. Der Winkelunterschied kodiert ihre relative Position. Das Skalarprodukt ist invariant zur Rotation, hängt aber vom relativen Winkel ab.

RoPE Formel

RoPE(x, m) = [
  cos(m·θ) · x₀ - sin(m·θ) · x₁,
  sin(m·θ) · x₀ + cos(m·θ) · x₁
]

m: Position des Tokens
θ: Rotationsfrequenz (z.B. 1/10000^(2i/d))
x₀, x₁: 2D-Unterraum des Vektors

Warum funktioniert RoPE?

Das Skalarprodukt zwischen Query an Position m und Key an Position n:

q_m · k_n = q · k · cos((m-n)·θ)

Hängt nur von der relativen Position (m-n) ab, nicht von absoluten Positionen! Dies ermöglicht Längen-Extrapolation: Wenn das Modell auf 2K Tokens trainiert wurde, funktioniert es oft auch bei 8K+ Tokens.