Ein Netz, das nur die Übungsdaten auswendig lernt
Überanpassung heißt: Ein Netz liegt auf den Daten, mit denen es trainiert wurde, sehr gut und auf neuen Daten schlecht. Es hat die Beispiele auswendig gelernt, statt das Muster zu finden.
Wer das erkennt, kann es verringern, zum Beispiel mit frühem Stoppen. Sonst glaubt ein Verleih einer Vorhersage, die im Alltag nicht hält.
Am Ende dieser Lektion
Notiz
Ich kann Überanpassung an zwei Verlustkurven erkennen und verringern.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Trainingsdaten | die Zeilen, aus denen das Netz lernt | |
| Validierungsdaten | zurückgehaltene Zeilen, die nur prüfen | |
| Überanpassung | gut auf bekannten Daten, schlecht auf neuen | |
| Epoche | ein Durchlauf über alle Trainingszeilen | |
| Frühes Stoppen | das Training beenden, wenn die Validierung nicht mehr besser wird | |
| Geduld | wie viele Epochen ohne Besserung abgewartet werden | 2 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Zwei Datenmengen zeigen, ob ein Netz wirklich lernt
Man teilt die Zeilen in zwei Mengen. Die Trainingsdaten benutzt das Netz zum Lernen. Die Validierungsdaten sieht es nie beim Lernen. Es wird nur daran geprüft.
Nach jeder Epoche misst man den Verlust auf beiden Mengen. Der Verlust auf den Trainingsdaten sinkt fast immer. Der Verlust auf den Validierungsdaten sagt, wie gut das Netz mit neuen Zeilen umgeht.
Beispiel: Verlust nach jeder Epoche
| Epoche | Training | Validierung | Bild |
|---|---|---|---|
| 1 | 0,90 | 0,95 | Beide sinken |
| 2 | 0,60 | 0,70 | Beide sinken |
| 3 | 0,42 | 0,55 | Beide sinken |
| 4 | 0,30 | 0,50 | Bester Wert der Validierung |
| 5 | 0,22 | 0,52 | Validierung steigt wieder |
| 6 | 0,16 | 0,58 | Lücke wächst |
| 8 | 0,09 | 0,75 | Deutliche Überanpassung |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die beste Epoche finden
# Verlust je Epoche: Training und Validierung.
training = [0.90, 0.60, 0.42, 0.30, 0.22, 0.16, 0.12, 0.09]
validierung = [0.95, 0.70, 0.55, 0.50, 0.52, 0.58, 0.66, 0.75]
beste = 0
for n in range(len(validierung)):
if validierung[n] < validierung[beste]:
beste = n
print("Beste Epoche:", beste + 1)
print("Validierungsverlust dort:", validierung[beste])
print("Trainingsverlust am Ende:", training[-1])
# Ändern Sie 0.52 in 0.45 und starten Sie erneut.
Frühes Stoppen beendet das Training zur rechten Zeit
Beim frühen Stoppen beobachtet man den Validierungsverlust. Wird er mehrere Epochen lang nicht besser, hört das Training auf.
Die Zahl dieser Epochen heißt Geduld. Mit Geduld 2 stoppt das Training in der Tabelle in Epoche 6, denn Epoche 5 und 6 waren nicht besser als Epoche 4. Behalten wird das Netz aus Epoche 4.
Weitere Mittel gegen Überanpassung
Mehr Trainingsdaten helfen am meisten. Ein kleineres Netz hat weniger Parameter zum Auswendiglernen. Bei Dropout schaltet man beim Training zufällig einige Neuronen ab, damit sich keines auf ein anderes verlässt.
Auch ein größeres Netz ist nicht automatisch besser. Das Lab zeigt es gleich.
Drei Netzgrößen an den Tagen des Verleihs
docker exec jupyter python3 steps/network.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele halten den Trainingsverlust für das Maß der Güte. Er sinkt aber auch bei Überanpassung weiter. Beurteilen Sie ein Netz darum immer an Daten, die es beim Lernen nie gesehen hat.