Wie ein Netz seine Fehler verkleinert
Ein neuronales Netz lernt, indem es seine Gewichte in kleinen Schritten so verändert, dass sein Fehler sinkt. Das Verfahren heißt Gradientenabstieg.
Es ist die Grundlage fast jedes Trainings. Hier üben wir es an einem einzigen Gewicht: dem Preis, den ein Fahrradverleih je Stunde nimmt.
Am Ende dieser Lektion
Notiz
Ich kann erklären, wie ein Netz mit Verlust, Gradient und Lernrate aus seinen Fehlern lernt.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Verlust | eine Zahl, die misst, wie falsch das Netz liegt | |
| Gradient | zeigt, wie stark der Verlust bei einer Änderung des Gewichts steigt | |
| Lernrate | wie groß jeder Schritt ist | 0.05 |
| Gradientenabstieg | Gewichte Schritt für Schritt gegen den Gradienten bewegen | |
| Backpropagation | der Fehler wird rückwärts durch die Schichten gereicht |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Der Verlust misst, wie falsch das Netz liegt
Zuerst braucht das Netz eine Zahl für seinen Fehler. Sie heißt Verlust.
Ein häufiger Verlust ist der mittlere quadrierte Fehler. Für jede Zeile nehmen Sie die Vorhersage minus die richtige Antwort und quadrieren das. Dann bilden Sie den Mittelwert. Je kleiner der Verlust, desto besser das Netz.
Der Verlust für zwei Gewichte
docker exec jupyter python3 -c "print(((0 - 2) ** 2 + (0 - 4) ** 2) / 2, ((0.5 - 2) ** 2 + (1.0 - 4) ** 2) / 2)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der Gradient zeigt die Richtung des Anstiegs
Stellen Sie sich den Verlust als Hügellandschaft vor. Das Gewicht ist Ihr Standort. Der Gradient sagt, wie steil es dort bergauf geht.
Das Netz geht darum entgegengesetzt, bergab. Ein Schritt lautet: neues Gewicht gleich altes Gewicht minus Lernrate mal Gradient. Bei mehreren Schichten reicht die Backpropagation den Fehler rückwärts durch das Netz, damit jedes Gewicht seinen Gradienten bekommt.
Beispiel: drei Schritte mit Lernrate 0,05
| Schritt | Gewicht w | Verlust | Gradient | Neues Gewicht |
|---|---|---|---|---|
| 1 | 0 | 10 | -10 | 0 + 0,05 mal 10 = 0,5 |
| 2 | 0,5 | 5,625 | -7,5 | 0,5 + 0,375 = 0,875 |
| 3 | 0,875 | 3,164 | -5,625 | 0,875 + 0,281 = 1,156 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Gradientenabstieg in Python
# Das Netz soll den Preis je Stunde lernen. Die Daten: 1 Stunde 2 Euro, 2 Stunden 4 Euro.
stunden = [1, 2]
preise = [2, 4]
w = 0.0
rate = 0.05
for schritt in range(3):
gradient = 0.0
verlust = 0.0
for n in range(len(stunden)):
fehler = w * stunden[n] - preise[n]
gradient = gradient + 2 * fehler * stunden[n] / len(stunden)
verlust = verlust + fehler * fehler / len(stunden)
print("Schritt", schritt, "w =", w, "Verlust =", verlust)
w = w - rate * gradient
# Setzen Sie rate auf 0.5 und beobachten Sie den Verlust.
Der erste Schritt von Hand
docker exec jupyter python3 -c "print(0 - 0.05 * -10)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Lernrate: nicht zu klein, nicht zu groß
Die Lernrate bestimmt die Schrittgröße. Ist sie zu klein, braucht das Training sehr lange.
Ist sie zu groß, springt das Gewicht über das Ziel hinaus. Mit Rate 0,5 steht w nach dem ersten Schritt bei 5. Der Verlust steigt dort auf 22,5 statt zu sinken. Eine gute Rate verkleinert den Verlust in jedem Schritt.
Ein häufiger Fehler
Warnung
Viele addieren den Gradienten zum Gewicht. Der Gradient zeigt aber bergauf, der Verlust würde steigen. Ziehen Sie ihn darum ab: neues Gewicht gleich altes minus Lernrate mal Gradient.