Was ist die Positionscodierung im Transformatormodell?


22

Ich bin neu bei ML und dies ist meine erste Frage hier. Tut mir leid, wenn meine Frage albern ist.

Ich versuche, das Papier zu lesen und zu verstehen. Achtung ist alles, was Sie brauchen, und darin befindet sich ein Bild:

Geben Sie hier die Bildbeschreibung ein

Ich weiß nicht, was Positionscodierung ist. Durch das Anhören einiger YouTube-Videos habe ich herausgefunden, dass es sich um eine Einbettung handelt, die sowohl die Bedeutung als auch die Position eines Wortes enthält und etwas mit sin(x) oder c o s ( x ) zu tun hat.cos(x)

aber ich konnte nicht verstehen, was genau es ist und wie genau es das tut. Also bin ich hier, um Hilfe zu bekommen. Danke im Voraus.

Antworten:


27

wpos[0,L1]w=(w0,,wL1)ewdmodel=4

ew=ew+[sin(pos100000),cos(pos100000),sin(pos100002/4),cos(pos100002/4)]=ew+[sin(pos),cos(pos),sin(pos100),cos(pos100)]

wobei die Formel für die Positionscodierung wie folgt lautet: mit (also ) im Originalpapier.

PE(pos,2i)=sin(pos100002i/dmodel),
PE(pos,2i+1)=cos(pos100002i/dmodel).
dmodel=512i[0,255]

Diese Technik wird verwendet, weil in der vorgeschlagenen Architektur keine Vorstellung von der Wortreihenfolge (1. Wort, 2. Wort, ..) vorhanden ist. Alle Wörter der Eingabesequenz werden dem Netzwerk ohne spezielle Reihenfolge oder Position zugeführt (im Gegensatz zu herkömmlichen RNN- oder ConvNet-Architekturen). Daher hat das Modell keine Ahnung, wie die Wörter angeordnet sind. Folglich wird jeder Worteinbettung ein positionsabhängiges Signal hinzugefügt, um dem Modell zu helfen, die Reihenfolge der Wörter zu berücksichtigen. Basierend auf Experimenten vermeidet dieser Zusatz nicht nur die Zerstörung der Einbettungsinformationen, sondern fügt auch die wichtigen Positionsinformationen hinzu. Im Fall von RNNs geben wir die Wörter nacheinander an RNN weiter, dh das te Wort wird in Schritt eingespeist , was dem Modell hilft, die Reihenfolge der Wörter zu berücksichtigen.nn

Dieser Artikel von Jay Alammar erklärt das Papier mit hervorragenden Visualisierungen. Leider ist das Beispiel für die Positionscodierung derzeit falsch (es verwendet für die erste Hälfte der Einbettungsdimensionen und für die zweite Hälfte, anstatt für gerade Indizes und für ungerade Indizes zu verwenden).sincossincos


1
Sie haben auch diesen ausgezeichneten Artikel, der sich ausschließlich auf die Einbettung von Positionen konzentriert: kazemnejad.com/blog/…
Yohan Obadia

6

Die Positionscodierung ist eine Re-Darstellung der Werte eines Wortes und seiner Position in einem Satz (vorausgesetzt, dies ist nicht das Gleiche wie am Ende oder in der Mitte am Anfang).

Sie müssen jedoch berücksichtigen, dass Sätze beliebig lang sein können. Daher ist es nicht sinnvoll, "X" als drittes Wort im Satz zu sagen, wenn Sätze unterschiedlicher Länge vorhanden sind: Das dritte Wort in einem 3-Wort-Satz ist vollständig anders als 3. in einem 20-Wort-Satz.

Was ein Positionscodierer tut, ist, Hilfe von der zyklischen Natur der Funktionen und zu erhalten, um Informationen über die Position eines Wortes in einem Satz zurückzugeben.sin(x)cos(x)


2
Vielen Dank. Könnten Sie näher erläutern, wie dieser Positionsgeber dies mit und ? sincos
Peyman

1

Um andere Antworten zu ergänzen, berechnet die RefA-Implementierung von OpenAI diese im natürlichen Protokollbereich (um die Genauigkeit zu verbessern, glaube ich. Ich bin mir nicht sicher, ob sie das Protokoll in Basis 2 hätten verwenden können). Sie haben sich die Kodierung nicht ausgedacht. Hier ist die PE-Nachschlagetabellengenerierung, die in C als For-For-Schleife umgeschrieben wurde:

int d_model = 512, max_len = 5000;
double pe[max_len][d_model];

for (int i = 0; i < max_len; i++) {
   for (int k = 0; k < d_model; k = k + 2) {
      double div_term = exp(k * -log(10000.0) / d_model);
      pe[i][k] = sin(i * div_term);
      pe[i][k + 1] = cos(i * div_term);
   }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.