Sofortantwort
Positional Encoding einfach erklärt
Gibt Transformern Information über Token-Positionen.
- Kurz gesagt
- Transformer-Attention ist positions-agnostisch – braucht explizite Positionsinfo
- Typischer Einsatz
- Alle Transformer-Modelle, Lange Kontexte, Relative Positionen
- Wichtig zu wissen
- Modern: RoPE, ALiBi für bessere Längen-Generalisierung
Positional Encoding im Überblick
Positional Encoding sagt dem Transformer, wo jedes Token in der Sequenz steht. Ohne diese Information wäre “Hund beißt Mann” identisch zu “Mann beißt Hund” – die Reihenfolge ginge verloren.
Das Problem:
Attention berechnet: Wie relevant ist Token A für Token B?
Aber: Attention ist symmetrisch und positions-agnostisch!
"Der Hund beißt den Mann"
"Der Mann beißt den Hund"
-> Ohne Positionen: Gleiche Attention-Muster 😱
Die Lösung:
Token-Embedding + Positional Encoding = Finales Embedding
"Der" + Position 1 = [0.2, 0.5, ...] + [0.0, 0.1, ...]
"Hund" + Position 2 = [0.8, 0.3, ...] + [0.1, 0.2, ...]
...
Technisch betrachtet
Sinusförmiges Encoding (Original)
PE(pos, 2i) = sin(pos / 10000^(2i/d))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d))
pos = Position in Sequenz
i = Dimension
d = Embedding-Dimension
Varianten
| Methode | Beschreibung | Verwendet in |
|---|---|---|
| Sinusoidal | Feste Sinus/Cosinus | Original Transformer |
| Learned | Trainierbare Embeddings | BERT, GPT-2 |
| RoPE | Rotationen im Embedding-Raum | Llama, Mistral |
| ALiBi | Attention-Bias statt Embedding | MPT, Falcon |
RoPE (Rotary Position Embedding)
# Vereinfacht: Position als Rotation
def apply_rope(x, position):
# Rotationsmatrix basierend auf Position
cos_pos = cos(position * theta)
sin_pos = sin(position * theta)
# Rotation anwenden
x_rotated = x * cos_pos + rotate(x) * sin_pos
return x_rotated
Vorteil: Relative Positionen werden durch Rotation natürlich kodiert. Generalisiert besser auf längere Sequenzen.
Kontextlängen-Erweiterung
Training: 4K Tokens
Inference: 32K Tokens möglich?
Mit RoPE + Position Interpolation:
-> Ja, mit leichtem Qualitätsverlust
-> "YaRN", "NTK-aware" verbessern das weiter