Wie ein neuronales Netz rechnet
Von einem Neuron zur Schicht zum Netz: was tatsächlich passiert, wenn Daten hindurchfließen, und warum Tiefe etwas anderes bewirkt als Breite.
Die Idee
Ein Neuron bekommt mehrere Zahlen, multipliziert jede mit einem eigenen Gewicht, addiert alles zusammen, gibt einen Versatz dazu und schickt das Ergebnis durch eine einfache Funktion, die alles Negative auf null setzt. Das ist alles.
Eine Schicht ist eine Reihe solcher Neuronen nebeneinander. Ein Netz ist eine Folge von Schichten. Die erste Schicht sieht die Rohdaten, jede weitere sieht, was die vorige daraus gemacht hat.
Was Tiefe bewirkt
Bei einem Bild erkennt die erste Schicht Helligkeitssprünge, die zweite daraus Ecken, die dritte einfache Formen, die vierte Objektteile. Jede Ebene setzt die Bausteine der vorigen zusammen. Deshalb heißt es tiefes Lernen.
Ein Netz von Hand
import numpy as np
rng = np.random.default_rng(0)
def relu(x): return np.maximum(0, x)
# He-Initialisierung: Standardabweichung sqrt(2/fan_in). Mit falscher
# Initialisierung stirbt das Signal ueber die Schichten hinweg ab.
def schicht(fan_in, fan_out):
return (rng.normal(0, np.sqrt(2 / fan_in), (fan_in, fan_out)),
np.zeros(fan_out))
W1, b1 = schicht(784, 256)
W2, b2 = schicht(256, 128)
W3, b3 = schicht(128, 10)
x = rng.normal(size=(32, 784)) # 32 Bilder à 28x28
a1 = relu(x @ W1 + b1)
a2 = relu(a1 @ W2 + b2)
logits = a2 @ W3 + b3 # 32 x 10, noch keine Wahrscheinlichkeiten
for name, a in [("a1", a1), ("a2", a2)]:
print(name, "Mittel", round(float(a.mean()), 3),
"Anteil null", round(float((a == 0).mean()), 3))Der Anteil der Nullen ist die wichtigste Diagnose beim Bau eines Netzes. Liegt er über 90 Prozent, sind viele Neuronen tot und tragen nichts mehr bei.
Die Parameterzahl
| Schicht | Eingang | Ausgang | Parameter |
|---|---|---|---|
| 1 | 784 | 256 | 200.960 |
| 2 | 256 | 128 | 32.896 |
| 3 | 128 | 10 | 1.290 |
| Summe | 235.146 |
Die Formel
Ohne σ wäre W⁽²⁾(W⁽¹⁾x + b⁽¹⁾) + b⁽²⁾ = (W⁽²⁾W⁽¹⁾)x + (W⁽²⁾b⁽¹⁾ + b⁽²⁾),
also wieder eine einzige lineare Abbildung. Zwanzig Schichten hätten exakt
dieselbe Ausdruckskraft wie eine.
Initialisierung
Der Grund ist eine Varianzrechnung: Bei ReLU ist im Mittel die Hälfte der
Ausgänge null, was die Varianz halbiert. Der Faktor 2 gleicht das aus. Ohne diese
Korrektur fällt die Aktivierungsvarianz je Schicht um die Hälfte und ist nach
zwanzig Schichten auf 2⁻²⁰ ≈ 1e-6 gefallen.
Universelle Approximation, richtig gelesen
Der Satz besagt, dass ein Netz mit einer verborgenen Schicht jede stetige Funktion auf einem kompakten Bereich beliebig genau annähern kann. Was er nicht besagt:
- Wie viele Neuronen dafür nötig sind. Die Zahl kann exponentiell in der Eingabedimension wachsen.
- Ob das Training diese Gewichte findet. Der Satz ist eine Existenzaussage.
- Ob die Näherung außerhalb des betrachteten Bereichs gilt. Sie gilt nicht.
Praktisch ist der Satz deshalb kein Argument für flache Netze. Tiefe Netze erreichen dieselbe Genauigkeit mit exponentiell weniger Neuronen, weil sie Merkmale wiederverwenden statt sie nebeneinander zu stellen.
Passende Kurse und Quellen
Batch Normalization
Warum das Normalisieren von Zwischenwerten tiefes Training überhaupt erst stabil macht.
Für alle, die wissen wollen, warum Normalisierung tiefes Training erst möglich macht.
Deep Learning
Das Standardwerk von Goodfellow, Bengio und Courville, frei lesbar. Mathematisch dicht, vollständig, und in den Grundlagenteilen zeitlos.
Für den systematischen Zugang. Als Nachschlagewerk stark, als Einstieg zu dicht.
Deep Learning Specialization
Fünf Kurse von den Grundlagen neuronaler Netze bis zu Sequenzmodellen. Ausführlich, mit Programmierübungen, und in Teilen älter als die aktuelle Praxis.
Für alle mit Programmierkenntnissen, die den Bereich vollständig durcharbeiten wollen.
Dive into Deep Learning
Lehrbuch mit ausführbarem Code neben jeder Herleitung. Jedes Kapitel lässt sich als Notebook öffnen und nachrechnen.
Für alle, die beim Lesen mitrechnen wollen; jedes Kapitel lässt sich als Notizbuch öffnen.
Netron
Öffnet eine Modelldatei und zeichnet ihren Aufbau. Die schnellste Art zu sehen, was in einem gelieferten Modell tatsächlich steckt.
Für den schnellen Blick in ein geliefertes Modell, bevor man es in Betrieb nimmt.
Neuronale Netze, visuell erklärt
Von der einzelnen Gewichtung über Gradientenabstieg bis zum Aufmerksamkeitsmechanismus. Die beste verfügbare Anschauung für das, was die Formeln beschreiben.
Vor dem ersten Lehrbuch anzusehen, nicht danach. Spart Wochen an Verwirrung.
Practical Deep Learning for Coders
Beginnt mit einem lauffähigen Modell in der ersten Stunde und liefert die Theorie danach. Der kürzeste Weg von Python-Grundkenntnissen zum eigenen trainierten Modell.
Für Ungeduldige mit Python-Kenntnissen: das erste eigene Modell läuft in der ersten Stunde.
PyTorch-Tutorials
Die offiziellen Anleitungen, von der ersten Tensoroperation bis zum verteilten Training. Kurz, lauffähig und laufend aktualisiert.
Für den Einstieg in die Bibliothek, in der der Großteil der Forschung geschrieben ist.
TensorFlow Playground
Ein neuronales Netz im Browser, mit Reglern für Schichten, Aktivierung und Lernrate. Man sieht in Sekunden, was jede Stellschraube tut.
Für alle, die sehen wollen, was Lernrate, Schichten und Aktivierung tatsächlich bewirken.
Understanding Deep Learning
Modernes Lehrbuch mit ungewöhnlich klaren Abbildungen, das Transformer und Diffusionsmodelle bereits vollständig behandelt. Frei als PDF.
Für den modernen Einstieg; behandelt Transformer und Diffusion bereits vollständig.