Skip to main content
Entwickler Themen
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

0.1.6. Attention

Attention

Attention mischt die bisher sichtbaren Positionen in den Residualstrom der aktuellen Position. Layer.attend im Paket model rechnet das. Der Eingang ist der bereits RMS-normalisierte Residualstrom.

Drei Projektionen

Drei Matrizen, jede 16×16, ohne Bias:

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 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 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.

Ein Kopf

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 ü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 von ana hat die letzte bewertete Position vier Gewichte, weil vier Token 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 und das erste gezogene Zeichen. Die gedruckte Summe liegt bei 1.

Weiter

0.1.7. Block setzt Attention und das vorwärtsgerichtete Netz zusammen.