Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen How to Generate Sinusförmiges Positions-Encoding | Understanding Transformer Foundations
Transformer für Natural Language Processing

bookHow to Generate Sinusförmiges Positions-Encoding

Swipe um das Menü anzuzeigen

Sinusförmige Positionskodierung ermöglicht es dem Transformer-Modell, die Wortreihenfolge und Position zu erfassen, obwohl es keine rekurrenten oder sequenzbewussten Schichten verwendet. Jede Position wird durch ein einzigartiges Muster von Sinus- und Kosinuswerten dargestellt, die sich über die Einbettungsdimensionen verteilen.

Im Folgenden betrachten wir den Code dazu.

1234567891011121314151617
import numpy as np def get_sinusoidal_positional_encoding(seq_length, embed_dim): position = np.arange(seq_length)[:, np.newaxis] div_term = np.exp( np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim) ) pe = np.zeros((seq_length, embed_dim)) pe[:, 0::2] = np.sin(position * div_term) pe[:, 1::2] = np.cos(position * div_term) return pe # Example usage: seq_length = 6 embed_dim = 8 encoding = get_sinusoidal_positional_encoding(seq_length, embed_dim) print(encoding)
copy

Der Code zur Erzeugung der sinusförmigen Positionskodierung lässt sich Schritt für Schritt nachvollziehen:

1. Erstellen des Positionsarrays

position = np.arange(seq_length)[:, np.newaxis]
  • Erstellt einen Spaltenvektor, bei dem jede Zeile eine Position in der Eingabesequenz darstellt, beginnend bei 0.
  • Bei einer Sequenz mit sechs Tokens sieht dieses Array als Spalte wie folgt aus: [0, 1, 2, 3, 4, 5].

2. Berechnung des Frequenzskalierungsfaktors

div_term = np.exp(
    np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim)
)
  • Berechnet einen Skalierungsfaktor für jede gerade Einbettungsdimension.
  • Die Skalierung sorgt dafür, dass jede Dimension eine andere Frequenz erhält, sodass die Kodierung sowohl kurz- als auch langfristige Positionsmuster erfassen kann.
  • Die Verwendung von 10000.0 verteilt die Frequenzen, sodass Positionsänderungen jede Dimension unterschiedlich beeinflussen.

3. Initialisierung der Positionskodierungsmatrix

pe = np.zeros((seq_length, embed_dim))
  • Erstellt eine mit Nullen gefüllte Matrix mit einer Zeile pro Position und einer Spalte pro Einbettungsdimension.

4. Befüllen der Matrix mit Sinus- und Kosinuswerten

pe[:, 0::2] = np.sin(position * div_term)
pe[:, 1::2] = np.cos(position * div_term)
  • Für gerade Spalten wird der Sinus von position * div_term eingetragen.
  • Für ungerade Spalten wird der Kosinus von position * div_term eingetragen.
  • Durch diesen Wechsel erhält jede Position eine einzigartige Kombination von Werten, und das Muster verändert sich gleichmäßig über Positionen und Dimensionen hinweg.

5. Rückgabe der Positionskodierung

return pe
  • Die resultierende Matrix liefert eine eindeutige Kodierung für jede Position in der Sequenz.
  • Diese Kodierung kann zu den Wort-Embeddings addiert werden, sodass das Transformer-Modell die Reihenfolge der Tokens erkennt.
question mark

Welche der folgenden Aussagen zur sinusförmigen Positionskodierung sind zutreffend?

Wählen Sie alle richtigen Antworten aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 7

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 1. Kapitel 7
some-alt