Ich versuche, ein tiefes neuronales Netzwerk für die Klassifizierung mithilfe der Rückausbreitung zu trainieren. Insbesondere verwende ich ein Faltungs-Neuronales Netzwerk zur Bildklassifizierung unter Verwendung der Tensor Flow-Bibliothek. Während des Trainings habe ich ein seltsames Verhalten und frage mich nur, ob dies typisch ist oder ob ich möglicherweise etwas falsch mache.
Mein neuronales Faltungsnetzwerk hat also 8 Schichten (5 Faltungsnetzwerke, 3 vollständig verbundene). Alle Gewichte und Verzerrungen werden mit kleinen Zufallszahlen initialisiert. Dann stelle ich eine Schrittgröße ein und trainiere mit Mini-Batches mit dem Adam Optimizer von Tensor Flow.
Das seltsame Verhalten, von dem ich spreche, ist, dass für ungefähr die ersten 10 Schleifen durch meine Trainingsdaten der Trainingsverlust im Allgemeinen nicht abnimmt. Die Gewichte werden aktualisiert, aber der Trainingsverlust bleibt ungefähr auf dem gleichen Wert und steigt manchmal zwischen Minibatches und fällt manchmal ab. Es bleibt eine Weile so und ich habe immer den Eindruck, dass der Verlust niemals abnehmen wird.
Dann nimmt der Trainingsverlust plötzlich dramatisch ab. Beispielsweise steigt die Trainingsgenauigkeit innerhalb von ungefähr 10 Schleifen durch die Trainingsdaten von ungefähr 20% auf ungefähr 80%. Von da an läuft alles gut zusammen. Das gleiche passiert jedes Mal, wenn ich die Trainingspipeline von Grund auf neu ausführe. Unten sehen Sie eine Grafik, die einen Beispiellauf veranschaulicht.
Ich frage mich also, ob dies ein normales Verhalten beim Training tiefer neuronaler Netze ist, wobei es eine Weile dauert, bis man "einspringt". Oder ist es wahrscheinlich, dass ich etwas falsch mache, was diese Verzögerung verursacht?
Vielen Dank!
Antworten:
Die Tatsache, dass der Algorithmus eine Weile zum "Kick-In" gebraucht hat, ist nicht besonders überraschend.
Im Allgemeinen sind die Zielfunktionen, die hinter neuronalen Netzen optimiert werden sollen, stark multimodal. Daher gibt es keinen Grund zu der Annahme, dass Sie einen steilen Abstieg beginnen werden, es sei denn, Sie haben einen cleveren Satz von Anfangswerten für Ihr Problem. Daher wandert Ihr Optimierungsalgorithmus fast zufällig, bis er ein ziemlich steiles Tal findet, auf das er absteigen kann. Sobald dies gefunden wurde, sollten Sie erwarten, dass die meisten gradientenbasierten Algorithmen sofort beginnen, sich auf den bestimmten Modus zu beschränken, dem sie am nächsten liegen.
quelle