Interaktiv · Reines JavaScript

Neuronale Netze, Bit für Bit

Fünf von Grund auf geschriebene Modelle, live im Browser trainiert. Zeichne eine Ziffer, generiere Text und sieh zu, was passiert, wenn die Gewichte Bits verlieren.

01

Ein Netz trainieren

Die Gewichte starten zufällig. Klicke auf Trainieren, sieh zu, wie der Loss sinkt, und zeichne dann eine Ziffer, um das Netz zu testen. Wechsle das Modell oder schalte reduzierte Präzision ein, um zu sehen, wie die Genauigkeit abnimmt.

0.030
Präzision
Epoche 0/30
Loss -
Testgenauigkeit -
Eingabe
Zeichne eine Ziffer
Was das Netz sieht28 × 28 Pixel
Aktivierungen
Linien zeigen die stärksten Beiträge zur Vorhersage
Ausgabewahrscheinlichkeiten
Gewichte der ersten Schicht
+ −
Trainingsverlauf
Trainings-Loss (links) Testgenauigkeit (rechts)

Der Loss wird auf den Trainingsbildern gemessen, die Genauigkeit auf ungesehenen Testbildern. Sinkt der Loss weiter, während die Genauigkeit stagniert, lernt das Netz seine 2'000 Trainingsbilder auswendig, statt allgemeinere Merkmale zu lernen (Overfitting).

Klicke auf Trainieren, um das Lernen zu starten 784 → 128 → 64 → 10
02

Wie es lernt

Das Standardmodell ist ein mehrschichtiges Perzeptron, trainiert auf MNIST. Deine Zeichnung wird auf 28 × 28 verkleinert, zu 784 Zahlen abgeflacht und durch drei Schichten von Gewichten geschickt. Das Training passt jedes Gewicht so an, dass der Vorhersagefehler kleiner wird.

Kein Framework

Vorwärtsdurchlauf, Backpropagation und SGD sind in reinem JavaScript geschrieben. Kein TensorFlow, kein ONNX, kein WebAssembly.

Das Training im Browser verwendet 2'000 MNIST-Bilder (200 pro Klasse) mit Mini-Batch-SGD. «Vortrainiert laden» setzt Gewichte ein, die in PyTorch auf dem vollständigen Datensatz mit 60'000 Bildern trainiert wurden.

Ein Trainingsschritt
// vorwärts, pro Schicht
z = W · x + bMatrix-Vektor-Produkt
a = max(0, z)ReLU
// rückwärts
dz = p − ySoftmax + Kreuzentropie
dW = dz ⊗ aTGradienten der Gewichte
// Aktualisierung
W −= lr · dWGradientenabstieg
03

Weniger Bits

Gewichte sind meist 32-Bit-Gleitkommazahlen. Die Quantisierung speichert jedes mit weniger Bits und spart so Speicher und Rechenaufwand, was auf Smartphones und Mikrocontrollern zählt.

Schalte oben Präzision ein und ziehe den Bit-Regler. Bei 8 Bit hält die Genauigkeit. Bei 4 Bit ist das Modell 8× kleiner, beginnt aber nachzulassen. Bei 2 Bit hat jedes Gewicht nur noch einen von vier Werten, und die Vorhersagen zerfallen.

Die Exponentialfunktionen der Softmax lassen sich schlecht quantisieren, deshalb behalten die meisten «integer-only»-Modelle sie in Gleitkomma. Diese Demo probiert I-BERT (Polynomapproximation), Softermax (Basis 2) und den Shift-Trick aus.

Beim Vision Transformer und beim GPT werden die Attention-Werte vor der Softmax quantisiert. Der Shift-Schalter nutzt die Verschiebungsinvarianz softmax(z + c) = softmax(z): Das Abziehen des Mittelwerts zentriert die Werte um null und erlaubt eine engere Anpassung. Am deutlichsten zeigt sich der Unterschied im Text des GPT bei wenigen Bits.

Symmetrische Quantisierung
scale = max|w| / (2b−1 − 1)Schrittweite
q = round(w / scale)gespeicherte Ganzzahl
ŵ = q × scalerekonstruiert, verlustbehaftet
04 · ETH Zürich, Integrated Systems Laboratory

Softmax in Ganzzahlarithmetik

Eine Semesterarbeit bei Prof. Dr. Luca Benini: Softmax in MobileBERT für reine Ganzzahl-Inferenz optimieren und dabei die Genauigkeit bis hinunter zu 4 Bit halten.

Abb. 1 · Der Engpass Exponentialfunktion

Exponentialfunktionen sind in Festkomma-Hardware teuer, deshalb approximieren wir sie mit Polynomen zweiten Grades.

Abb. 2 · Der Treppeneffekt 8 Bit

Weniger Bits machen aus dem Signal eine Treppe. Ziehe den Regler, um den L1-Fehler wachsen zu sehen.

256 Stufen L1-Fehler: 0.0000
Abb. 3 · Attention unter Quantisierung
8 Bit

Quantisierung mit wenigen Bits verzerrt die Attention-Muster. Der Shift-Trick (Schalter) zentriert die Logits um null, was engeres Clipping und höhere Genauigkeit bei 4 und 5 Bit erlaubt.

Volle Präzision (FP32)

Quantisiert

Verglichene Methoden

I-BERT

Approximiert Exponentialfunktionen mit reinen Ganzzahl-Polynomen und Zweierpotenz-Shifts.

Softermax

Basis 2 mit Online-Normalisierung, was mehrere Durchläufe über die Daten vermeidet.

ITAmax

Wählt optimale Skalierungsfaktoren, indem es sich auf schmale Eingabebereiche konzentriert.

Abb. 4 · Genauigkeit auf SST-2
Original-I-BERT Optimiert (Shift)