Sinusoidales Positional Encoding

Jede Position erhält einen einzigartigen Vektor durch Sinus- und Kosinus-Funktionen verschiedener Frequenzen. Niedrige Dimensionen ändern sich schnell (hohe Frequenz), hohe Dimensionen langsam (niedrige Frequenz). Dies ermöglicht dem Modell, sowohl lokale als auch globale Positionen zu unterscheiden.

Steuerung

64
256

Farbskala

-1.0 (Dunkelblau) 0.0 (Gelb) +1.0 (Dunkelrot)
Fig. 1 | Position Encoding Matrix (Position × Dimension). Jede Zeile entspricht einer Token-Position, jede Spalte einer Embedding-Dimension. Gerade Dimensionen verwenden Sinus, ungerade Kosinus. Beachten Sie die periodischen Streifen: Niedrige Dimensionen (links) oszillieren schnell, hohe Dimensionen (rechts) langsam.

Formel

PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

pos: Position des Tokens (0 bis n-1)
i: Dimensions-Index (0 bis d_model/2)
d_model: Embedding-Dimensionen (z.B. 512)

Warum diese Formel?

  • Eindeutige Kodierung jeder Position
  • Verschiedene Frequenzen für verschiedene Dimensionen
  • Niedrige Dimensionen: Hohe Frequenz (schnelle Änderung)
  • Hohe Dimensionen: Niedrige Frequenz (langsame Änderung)
  • Ermöglicht Verallgemeinerung auf längere Sequenzen
  • Keine trainierbaren Parameter

Muster in der Heatmap

Vertikale Streifen: Zeigen periodische Natur der Sinus/Kosinus-Funktionen. Niedrige Dimensionen haben enge Streifen (hohe Frequenz), hohe Dimensionen breite Streifen (niedrige Frequenz).

Horizontale Variation: Zeigt wie sich Encoding über Positionen ändert. Jede Position hat einen eindeutigen Fingerabdruck.

Verwendung in der Praxis

Position Encoding wird zu Token-Embeddings addiert:

Input = Token_Embedding + Position_Encoding

Original Transformer (2017) verwendet sinusoidales PE. Moderne Modelle nutzen oft:

  • RoPE: Llama, PaLM, GPT-NeoX
  • ALiBi: BLOOM, MPT
  • Learned PE: BERT, GPT-2