0.1.6. Attention
Attention, Glossar, öffnet in neuem Tab
mischt die bisher sichtbaren Positionen in den Residualstrom, Glossar, öffnet in neuem Tab
der aktuellen Position. Layer.attend im Paket model rechnet das. Der Eingang ist der bereits RMS-normalisierte, Glossar, öffnet in neuem Tab
Residualstrom.
Drei Matrizen, jede 16×16, ohne Bias, Glossar, öffnet in neuem Tab :
q = WQ · x
k = WK · x
v = WV · x
MatVec bildet jede Ausgabe als Skalarprodukt einer Zeile mit x. Die Matrizen sind unabhängige Parameter.
- Die Query, Glossar, öffnet in neuem Tab sucht.
- Der Key ist das, woran spätere Positionen diese Stelle wiederfinden.
- Der Value ist der Inhalt, der bei einem Treffer gemischt wird.
Direkt nach der Berechnung hängt attend den vollen Key und den vollen Value an den Cache, Glossar, öffnet in neuem Tab
dieser Schicht. Die Query wird nicht gespeichert. Der Cache gehört zu einem Dokument oder einer Stichprobe und startet leer. Ein neues Dokument ruft resetCache auf.
Vier Köpfe teilen sich die 16 Koordinaten in vier Abschnitte der Länge 4. Kopf h vergleicht nur seinen Abschnitt. Für jede bereits gecachte Position p, einschließlich der aktuellen:
score[p] = Skalarprodukt(q_h, k_h[p]) / sqrt(4)
sqrt(4) ist 2. Danach Softmax, Glossar, öffnet in neuem Tab
über genau diese Scores. Die Gewichte sind positiv und summieren sich zu 1. Eine Position hinter der aktuellen existiert im Cache nicht. Es gibt keine mit Nullen aufgefüllte Zukunft.
Der Kopf bildet daraus den gewichteten Mittelwert seiner Value-Abschnitte. Die vier Kopfausgaben werden aneinandergehängt, und WO bildet sie auf 16 Koordinaten ab. Diese Ausgabe ist das Delta der Attention, noch vor der Residualaddition im Block.
Das Programm druckt die Gewichte von Kopf 0. Im Vorwärtspass, Glossar, öffnet in neuem Tab
von ana hat die letzte bewertete Position vier Gewichte, weil vier Token, Glossar, öffnet in neuem Tab
sichtbar sind: im Referenzlauf 0.2785 0.1918 0.3010 0.2287. Am zweiten Zeichen einer Stichprobe hat die Zeile die Länge 2: das öffnende BOS, Glossar, öffnet in neuem Tab
und das erste gezogene Zeichen. Die gedruckte Summe liegt bei 1.
0.1.7. Block setzt Attention und das vorwärtsgerichtete Netz zusammen.