Gradientenabstieg und Backpropagation in Python
Trainieren heißt, die Gewichte so anzupassen, dass der Verlust sinkt. Der Gradient zeigt, in welche Richtung der Verlust wächst, also macht der Gradientenabstieg kleine Schritte in die Gegenrichtung. Backpropagation berechnet diesen Gradienten mit der Kettenregel für jedes Gewicht.
Das Konzept in einfachen Worten
Trainieren heißt, die Gewichte so anzupassen, dass der Verlust sinkt. Der Gradient zeigt, in welche Richtung der Verlust wächst, also macht der Gradientenabstieg kleine Schritte in die Gegenrichtung. Backpropagation berechnet diesen Gradienten mit der Kettenregel für jedes Gewicht.
Trainiere ein Neuron mit Gradientenabstieg: Finde mit der Kettenregel heraus, wie jedes Gewicht den Verlust beeinflusst, und gehe bergab.
Die wichtigsten Ideen
- Der Gradient ist die Steigung des Verlusts bezüglich jedes Gewichts.
- Die Lernrate bestimmt die Schrittweite: zu groß schießt über das Ziel hinaus, zu klein ist langsam.
- Backpropagation wendet die Kettenregel von der Ausgabe zurück bis zur ersten Schicht an.
- Eine Epoche ist ein Durchlauf durch alle Trainingsdaten.
Wann wird dieser Ansatz verwendet?
- Verstehen, was in neuronalen Netzen und KI-Bibliotheken passiert.
- Die Idee lernen, bevor du sie in den passenden Challenges umsetzt.
- Dich auf Kurse zu maschinellem Lernen, Vorstellungsgespräche und Projekte vorbereiten.
Selbst ausprobieren
Klicke auf Start, um zu trainieren. Die Gerade nähert sich den Punkten, während der orange Pfad auf der Verlustlandschaft bergab zum tiefsten Punkt läuft.
Beispielcode
# Train one neuron y = w * x + b to fit points on the line y = 2x + 1.
data = [(0, 1), (1, 3), (2, 5), (3, 7)]
w, b = 0.0, 0.0
learning_rate = 0.05
for epoch in range(1, 201):
grad_w = grad_b = 0.0
for x, y in data:
error = (w * x + b) - y # prediction minus target
# Chain rule: d(error²)/dw = 2 * error * x, d(error²)/db = 2 * error
grad_w += 2 * error * x
grad_b += 2 * error
# Step against the gradient to make the loss smaller.
w -= learning_rate * grad_w / len(data)
b -= learning_rate * grad_b / len(data)
if epoch in (1, 10, 50, 200):
loss = sum(((w * x + b) - y) ** 2 for x, y in data) / len(data)
print(f"epoch {epoch:>3}: w={w:.3f} b={b:.3f} loss={loss:.4f}")
Erwartete Ausgabe
epoch 1: w=0.850 b=0.400 loss=7.0587
epoch 10: w=2.009 b=0.958 loss=0.0009
epoch 50: w=2.005 b=0.989 loss=0.0000
epoch 200: w=2.000 b=1.000 loss=0.0000
So funktioniert es
Für jeden Punkt ist der Fehler die Vorhersage minus das Ziel. Die Kettenregel liefert den Gradienten des quadratischen Fehlers, 2·error·x für w und 2·error für b. Wird über die Daten gemittelt und gegen den Gradienten geschritten, nähern sich w und b den Werten 2 und 1, und der Verlust fällt fast auf 0.
Ändere die Werte und führe das Programm im CodeUtility Python Online-Compiler aus, ohne Python lokal zu installieren.
Übungsaufgaben
Verändere Eingaben und Randfälle, bevor du die Lösung mit größeren Datenmengen testest.
- Ändere Eingaben oder Gewichte und sage die Ausgabe vor dem Ausführen voraus.
- Gib die Zwischenwerte aus, um jeden Rechenschritt zu verfolgen.
- Löse die verlinkten Challenges unten, um die Idee selbst umzusetzen.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
- Ableitungen von Aktivierungsfunktionen Berechne die Ableitung von Sigmoid, ReLU, Leaky ReLU oder tanh an jedem Wert, die Steigungen, die Backpropagation braucht. Einfach
- Gradienten eines einzelnen Neurons Nutze die Kettenregel, um herauszufinden, wie sich der Verlust mit jedem Gewicht und dem Bias eines Sigmoid-Neurons ändert. Mittel
- Backpropagation in einem zweischichtigen Netz Berechne alle Gradienten der Gewichte und Biases eines Netzes mit einer verborgenen Sigmoid-Schicht und einer Sigmoid-Ausgabe. Schwierig
- Ein Neuron mit Gradientenabstieg trainieren Wiederhole Vorwärtsdurchlauf, Gradienten und Gewichtsaktualisierung, um einem Sigmoid-Neuron anhand von Beispielen etwas beizubringen. Mittel
- Ein neuronales Netz trainieren, das XOR löst Alles zusammen: Trainiere ein 2-2-1-Sigmoid-Netz mit Backpropagation, bis es XOR lernt. Schwierig