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

Autograd

Keine Bibliothek differenziert den Vorwärtspass. autograd zeichnet jede elementare Operation als eigenen Skalar auf und schiebt die Kettenregel zurück. Attention, RMSNorm und der Verlust haben keine handgeschriebene Ableitung. Sie bestehen nur aus den Operationen unten.

Die Entscheidung für diesen Skalargraphen steht im Repository: ADR 0001 (extern) . Eine verschmolzene Matrixmultiplikation rechnet dieselbe Kettenregel. Sie ist nur nicht mehr eine Liste von Knoten, die man einzeln lesen kann.

Ein Skalar

Data ist der Wert im Vorwärtspass. Grad sammelt die Ableitung des Dokumentverlusts und startet bei 0. An jedem berechneten Knoten hängen bis zu zwei Eingänge und die lokale partielle Ableitung, festgehalten mit den Werten des Vorwärtspasses.

Operation Wert lokale Ableitung
Add a + b 1 und 1
Mul a * b b und a
Pow a^c mit konstantem c c · a^(c-1)
Log ln(a) 1/a
Exp exp(a) der Ergebniswert
ReLU max(0, a) 1 wenn a > 0, sonst 0
Neg -a −1
Sub a - b 1 und −1
Div a / b 1/b und -a/b²

Go kann + für einen Skalar nicht umdefinieren. Der Vorwärtspass ruft diese Methoden auf. Dot, MatVec und AddVec sind Schleifen aus Mul und Add.

Parameter legt einen trainierbaren Skalar an und sortiert ihn nicht in die Liste des aktuellen Dokuments ein. Literal ist eine Konstante, zum Beispiel das abgezogene Maximum im Softmax, 1e-5 in der RMSNorm oder die Wurzel der Kopfbreite. Das Maximum im Softmax bleibt eine Konstante, weil die Verteilung nur von Differenzen abhängt.

Rückwärts

Graph hängt jeden berechneten Knoten in Erzeugungsreihenfolge an. Ein Eingang entsteht vor dem Knoten, der ihn benutzt. Backward setzt die Ableitung des Verlusts auf 1 und läuft die Liste von hinten nach vorn:

Eingang.Grad += lokale Ableitung * Knoten.Grad

Das += ist nötig. Eine Parameterkoordinate speist viele Produkte über mehrere Positionen. Überschreiben würde nur die letzte Nutzung behalten. Knoten mit Grad 0 addieren nichts Wirksames. Das betrifft abgeschaltete ReLU-Einheiten.

Nach dem Schritt setzt Adam Grad wieder auf 0. Der nächste Dokumentgraph addiert in dasselbe Feld. Ohne das Löschen würde der Schritt eine Summe verfolgen, die zum aktuellen Verlust nicht mehr passt. Zwischenwerte verschwinden mit dem Graphen. FinishSequence und Backward lassen die Parameter stehen.

Die Prüfung

TestLossGradientMatchesFiniteDifference baut das Netz in Referenzbreite, bewertet ein kurzes Dokument, läuft rückwärts und vergleicht je ein Gewicht aus WQ und aus FC1 mit

(L(w+ε) - L(w-ε)) / (2ε)

Der Test lädt keine Namensliste und trainiert nicht. Er prüft die Zahl, nicht die private Anordnung der Knoten. Ein Gewicht ohne Gradient wird übersprungen, damit eine geschlossene ReLU den Vergleich nicht auf die triviale Null setzt.

Weiter

0.1.11. Training benutzt diesen Gradienten in einem Adam-Schritt.