Ist es möglich, ein neuronales Netzwerk schrittweise zu trainieren?


23

Ich möchte ein neuronales Netzwerk trainieren, in dem die Ausgabeklassen nicht von Anfang an (alle) definiert sind. Weitere Klassen werden später basierend auf eingehenden Daten eingeführt. Dies bedeutet, dass ich jedes Mal, wenn ich eine neue Klasse einführe, das NN neu trainieren muss.

Wie kann ich einen NN inkrementell trainieren, ohne die zuvor in den vorherigen Trainingsphasen erfassten Informationen zu vergessen?

Antworten:


10

Ich möchte dem bereits Gesagten hinzufügen, dass Ihre Frage einen wichtigen Begriff des maschinellen Lernens berührt, der als Transferlernen bezeichnet wird . In der Praxis trainieren nur sehr wenige Personen ein gesamtes Faltungsnetzwerk von Grund auf (mit zufälliger Initialisierung), da es zeitaufwendig und relativ selten ist, über einen Datensatz mit ausreichender Größe zu verfügen.

Moderne ConvNets benötigen 2-3 Wochen, um auf mehreren GPUs in ImageNet zu trainieren. Daher ist es üblich, dass Benutzer ihre endgültigen ConvNet-Checkpoints zum Nutzen anderer freigeben, die die Netzwerke zur Feinabstimmung verwenden können. Beispielsweise verfügt die Caffe-Bibliothek über einen Modell-Zoo, in dem Personen ihre Netzwerkgewichte teilen.

Wenn Sie ein ConvNet für die Bilderkennung benötigen, sollten Sie unabhängig von Ihrer Anwendungsdomäne in Betracht ziehen, ein vorhandenes Netzwerk zu verwenden. Beispielsweise ist VGGNet eine häufige Wahl.

Bei der Durchführung des Transfer-Lernens sind einige Dinge zu beachten :

  • Einschränkungen von trainierten Modellen. Beachten Sie, dass Sie bei der Verwendung eines vorab geschulten Netzwerks möglicherweise geringfügige Einschränkungen hinsichtlich der Architektur haben, die Sie für Ihr neues Dataset verwenden können. Beispielsweise können Sie Conv-Layer nicht willkürlich aus dem vortrainierten Netzwerk entfernen. Einige Änderungen sind jedoch unkompliziert: Aufgrund der gemeinsamen Nutzung von Parametern können Sie auf einfache Weise ein vorab trainiertes Netzwerk mit Bildern unterschiedlicher räumlicher Größe ausführen. Dies ist bei Conv / Pool-Layern deutlich zu erkennen, da deren Vorwärtsfunktion unabhängig von der räumlichen Größe des Eingabevolumens ist (solange die Schritte „passen“).

  • Lernraten. Es ist üblich, eine geringere Lernrate für ConvNet-Gewichte zu verwenden, die feinabgestimmt werden, im Vergleich zu den (zufällig initialisierten) Gewichten für den neuen linearen Klassifikator, der die Klassenbewertungen Ihres neuen Datensatzes berechnet. Dies liegt daran, dass wir davon ausgehen, dass die ConvNet-Gewichte relativ gut sind, sodass wir sie nicht zu schnell und zu stark verzerren möchten (insbesondere, während der neue darüberliegende lineare Klassifikator durch zufällige Initialisierung trainiert wird).

Zusätzliche Referenz, wenn Sie an diesem Thema interessiert sind: Wie übertragbar sind Features in tiefen neuronalen Netzen?


Transferlernen ist nicht die einzige Möglichkeit, inkrementelles Lernen durchzuführen.
Nr.

7

Hier ist eine Möglichkeit, wie Sie das tun können.

Nachdem Sie Ihr Netzwerk trainiert haben, können Sie seine Gewichte auf der Festplatte speichern. Auf diese Weise können Sie diese Gewichte laden, wenn neue Daten verfügbar sind, und das Training praktisch dort fortsetzen, wo Sie das letzte Training abgebrochen haben. Da diese neuen Daten jedoch möglicherweise mit zusätzlichen Klassen verbunden sind, können Sie das Netzwerk jetzt mit zuvor gespeicherten Gewichten vor dem Training oder der Feinabstimmung bearbeiten. Das Einzige, was Sie zu diesem Zeitpunkt tun müssen, ist, die letzte (n) Ebene (n) an die neuen Klassen anzupassen, die jetzt mit dem Eintreffen Ihres neuen Datensatzes eingeführt wurden, am wichtigsten sind die zusätzlichen Klassen (z. B. wenn Ihre letzte Ebene) Sie hatten anfangs 10 Klassen, und jetzt haben Sie 2 weitere Klassen gefunden. Im Rahmen Ihrer Vorschulung / Feinabstimmung ersetzen Sie diese durch 12 Klassen. Kurz gesagt, wiederholen Sie diesen Kreis:

Wiederholen


Wenn Sie nur die neuen Klassen in der letzten Ebene aufnehmen (Trainingsklassen + neue Klassen), kann das Modell nicht angepasst werden, da wir (nur) mit den neuen Klassen trainieren möchten und das Modell ein Array mit der Form (Training + das Neue) erwartet Klassen, ).
Joel Carneiro
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.