wpos∈[0,L−1]w=(w0,⋯,wL−1)ewdmodel=4e′w=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
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)
quelle
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:
quelle