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