Rotationspositionseinbettung (RoPE)
Rotary Position Embedding (RoPE) ist ein Artikel mit dem TitelRoformer: Verbesserter Transformator mit Rotray-Positionseinbettung„Eine Positionskodierungsmethode, die die Abhängigkeit relativer Positionsinformationen in die Selbstaufmerksamkeit integrieren und die Leistung der Transformatorarchitektur verbessern kann.Es handelt sich um eine Positionskodierung, die in großen Modellen weit verbreitet ist, beispielsweise in Llama, Baichuan, ChatGLM, Qwen usw. Aufgrund von Einschränkungen bei den Rechenressourcen werden die meisten aktuellen großen Modelle mit kleineren Kontextlängen trainiert. Wenn während der Inferenz die Vortrainingslänge überschritten wird, wird die Leistung des Modells erheblich reduziert. Infolgedessen sind viele Arbeiten entstanden, die auf der RoPE-Längenextrapolation basieren und darauf abzielen, großen Modellen zu ermöglichen, über die Länge vor dem Training hinaus bessere Ergebnisse zu erzielen. Daher ist es für die Längenextrapolation des RoPE-Basismodells von entscheidender Bedeutung, die zugrunde liegenden Prinzipien von RoPE zu verstehen.
Das Grundprinzip von RoPE
Das Grundprinzip von RoPE besteht darin, jede Position als Rotationsvektor zu kodieren, dessen Länge und Richtung mit den Positionsinformationen in Beziehung stehen. Insbesondere kodiert RoPE für eine Sequenz der Länge n jede Position i als Rotationsvektor pe_i, der wie folgt definiert ist:
pe_i = (sin(iOmega), cos(iOmega))
Hier ist Omega ein Hyperparameter, der die Frequenz des Rotationsvektors steuert.
Vorteile von RoPE
Was RoPE einzigartig macht, ist seine Fähigkeit, explizite relative Positionsabhängigkeiten nahtlos in den Selbstaufmerksamkeitsmechanismus des Modells zu integrieren. Dieser dynamische Ansatz hat drei Vorteile:
- Flexibilität bei der Sequenzlänge: Herkömmliche Positionseinbettungen erfordern normalerweise die Definition einer maximalen Sequenzlänge, was ihre Anpassungsfähigkeit einschränkt. Andererseits ist RoPE sehr flexibel. Es kann Positionseinbettungen im laufenden Betrieb für Sequenzen beliebiger Länge generieren.
- Reduzieren Sie Abhängigkeiten zwischen Token: RoPE ist sehr intelligent bei der Modellierung der Beziehungen zwischen Token. Wenn die Token in der Sequenz weiter voneinander entfernt sind, reduziert RoPE auf natürliche Weise die Token-Abhängigkeiten zwischen ihnen. Dieses allmähliche Verblassen entspricht eher der Art und Weise, wie Menschen Sprache verstehen.
- Verbesserte Selbstaufmerksamkeit: RoPE stattet den linearen Selbstaufmerksamkeitsmechanismus mit einer relativen Positionskodierung aus, einer Funktion, die bei der herkömmlichen absoluten Positionskodierung nicht vorhanden ist. Diese Verbesserung ermöglicht eine präzisere Nutzung von Token-Einbettungen.

Implementierung der Rotationskodierung (entnommen aus Roformer)
Die traditionelle absolute Positionskodierung entspricht der Angabe, dass ein Wort unabhängig vom Kontext an Position 3, 5 oder 7 erscheint. Im Gegensatz,Mithilfe von RoPE kann das Modell verstehen, wie Wörter miteinander in Beziehung stehen.Es erkennt, dass Wort A häufig nach Wort B und vor Wort C erscheint. Dieses dynamische Verständnis verbessert die Leistung des Modells.
Implementierung von RoPE
Analysieren Sie den Code für die Rotational Position Encoding (RoPE), um zu verstehen, wie er implementiert wird.
precompute_theta_pos_frequencies
Die Funktion berechnet einen speziellen RoPE-Wert. Definieren Sie zunächst einetheta
Die zu kontrollierenden HyperparameterRotationsamplitude. Kleinere Werte erzeugen kleinere Rotationen. Es verwendet dann die BerechnungGruppendrehwinkeltheta
. Die Funktion erstellt außerdem eine Liste von Positionen in der Sequenz und berechnet den Drehwinkel, indem sie das äußere Produkt der Positionsliste und des Drehwinkels nimmt.Der Betrag, um den jede Position gedreht werden soll. Schließlich wandelt es diese Werte in komplexe Zahlen in Polarkoordinatenform mit fester Größe um, die wie eine Chiffre zur Darstellung von Position und Drehung dienen.apply_rotary_embeddings
Die Funktion nimmt numerische Werte und ergänzt sie mit Rotationsinformationen. Es gibt zunächst den Wert einDie letzte Dimension ist unterteilt inStellt den Real- und Imaginärteil dar von. Diese Paare werden dann zu einer einzigen komplexen Zahl kombiniert. Als nächstes die FunktionMultiplizieren Sie die vorberechnete komplexe Zahl mit der Eingabe, wodurch die Rotation effektiv angewendet wird. Abschließend werden die Ergebnisse wieder in reale Zahlen umgewandelt und die Daten werden neu geformt, um sie für die weitere Verarbeitung vorzubereiten.
Verweise
【1】https://www.bolzjb.com/archives/PiBBdbZ7.html