transfer-learning

Unter Transfer-Learning versteht man das Übertragen der Ergebnisse eines fertig trainierten neuronalen Netzes auf eine neue Aufgabe. Die fertig trainierten Layer werden dabei entweder konstant gehalten und nur am Output-Layer nachtrainiert, oder es werden einige oder alle Layer auf Basis des aktuellen Trainings-Stands weiter trainiert.

Das Training eines neuen neuronalen Netzes mit einer großen Anzahl von Daten ist rechenintensiv und zeitaufwändig. Insbesondere im Bereich der Erkennung von Objekten in Bildern mit Deep Learning wird eine enorme Rechenleistung benötigt, um das Netz z.B. mit Millionen von Bildern jeweils für viele Trainingszyklen (Epochen) zu trainieren. Ein Convolutional Neural Network (CNN) lernt dabei zunächst die relevanten Strukturen und Formen zu unterscheiden und daraus dann abstraktere Objekte abzuleiten und zu erkennen.

Wenn man ein neues neuronales Netz trainieren möchte, kann es daher sinnvoll sein, mit der Hilfe von Transfer Learning auf diesen bereits gelernten Features eines fertig trainierten Netzes aufzubauen. Dabei werden z.B. die fertig trainierten Layer eines CNN’s übernommen und nur der Output-Layer wird auf die Anzahl der zu erkennenden Objektklassen des neuen Netzes angepasst und nachtrainiert (Fine-Tuning).

Der Vorteil: Das neuronale Netz kann bereits Formen und Strukturen erkennen und unterscheiden, und es muss nur eine neue Zuordnung der Objekt-Klassen lernen.

Alternativ können auch mehrere oder alle Layer des vortrainierten Netzes mit den neuen Daten und Klassen weiter trainiert werden. Als Startpunkt werden dann die gelernten Gewichte des fertig trainierten Netzes verwendet, und nicht zufällig ausgewählte Gewichte, was zu einer deutlichen Verkürzung der Trainingszeit führt. Die Matrix unten zeigt, welche Strategie für ein bestimmtes Problem die richtige ist.

Die Auswahl hängt dabei von den folgenden zwei Faktoren ab:

  • Ähnlichkeit der Datensätze
  • Größe des neuen Datensatzes

Ähnlichkeit der Datensätze

Für die Wahl der richtigen Transfer Learning Strategie ist die Ähnlichkeit der Datensätze sehr wichtig. Mit Ähnlichkeit ist hierbei die Ähnlichkeit der Objekte gemeint, die in Bildern erkannt werden sollen. Wenn z.B. ein fertig trainiertes Convolutional Neural Network in der Lage ist, Hunderassen zu unterscheiden, dann wird es auf dieser Basis auch relativ schnell lernen, Katzenarten zu unterscheiden. Die relevanten Features, die das Netz für die Klassifizierung gelernt hat, werden in sehr ähnlicher Form auch für die neue Aufgabe benötigt.

Wenn dagegen die neue Aufgabe eines auf Hunderassen trainierten Netzes darin besteht, Pflanzenarten zu unterscheiden, dann ist die Ähnlichkeit der Datensätze sehr gering, und es muss eine andere Strategie für die Nutzung von Transfer-Learning gewählt werden.

Größe des neuen Datensatzes

Der zweite wichtige Faktor für die Wahl der richtigen Transfer Learning Strategie ist die Größe des zur Verfügung stehenden Datensatzes für die neue Aufgabe. Stehen nur sehr wenige Daten zum Training zur Verfügung (z.B. nur ein paar tausend Bilder), kann es schnell zu einem Overfitting kommen, und das Nachtrainieren des kompletten Netzes mit diesem kleinen Datensatz wird potentiell zu Problemen führen.

Stehen für das neue neuronale Netz hingegen sehr viele Beispiel-Daten zur Verfügung, kann ein Re-Training des gesamten Netzes Sinn machen – abhängig von der Ähnlichkeit der Datensätze ist dies aber evtl. gar nicht erforderlich. Folgende Matrix zeigt die richtige Transfer-Learning Strategie für die verschiednen Situationen:

Die richtige Transfer Learning Strategie auswählen

Die folgende Matrix zeigt die vier verschiedenen Ausgangs-Situationen und die damit verbundenen Empfehlungen für die Nutzung von Transfer-Learning:

GROSSER DATENSATZ

Fine Tuning

Fine Tuning oder neu trainieren

KLEINER DATENSATZ

Ende des Convolutional Networks

Anfang des Convolutional Networks

ÄHNLICHE DATEN

UNTERSCHIEDLICHE DATEN

Transfer Learning mit ähnlichen Daten und kleinem Datensatz

Wenn die zu erkennenden Objekte ähnliche Strukturen aufweisen (z.B. Hunde vs. Katzen) und für die neue Aufgabe nur ein kleiner Datensatz zur Verfügung steht, kann man einfach den Output Layer durch einen neuen ersetzen, dessen Neuronen-Anzahl der Zahl der neu zu erkennenden Klassen entspricht.

Alle anderen Layer werden komplett beibehalten und nicht weiter trainiert, und nur der neue Output-Layer wird mit zufällig gewählten Gewichten initialisiert und mit dem kleinen Datensatz trainiert. Dabei durchlaufen die neuen Daten natürlich zunächst die vortrainierten und fixierten Layer, die bereits die relevanten Strukturen und Formen erkennen können. Der Output dieser Layer wird dann in den neuen Output-Layer eingespeist, und dessen Gewichte werden im Verlaufe des Trainings für die Erkennung der neuen Klassen optimiert.

Der Trainingsaufwand ist durch dieses Vorgehen sehr gering und die Ergebnisse sind oft extrem gut, insbesondere im Vergleich zu allen Versuchen, ein „frisches“ neuronales Netz nur auf Basis des kleinen Datensatzes komplett neu zu trainieren.

Transfer Learning mit unterschiedlichen Daten und kleinem Datensatz

Wenn die zu erkennenden Objekte eher unterschiedlich sind und nur ein kleiner Datensatz für das neue Problem zur Verfügung steht, wird eine bloße Ersetzung des Output-Layers keine großen Erfolge bringen. Die vom fertig trainierten Netz gelernten Abstraktionen auf den höheren Ebenen bringen hier keinen Mehrwert.

Eine mögliche Alternative besteht in diesem Szenario darin, nur die vorderen Layer des fertig trainierten neuronalen Netzes beizubehalten, und die Layer mit den höheren Abstraktionen abzuschneiden. In den vorderen Layern lernt ein Convolutional Neural Network z.B. zunächst einfache Formen und Muster zu unterscheiden. Erst in den späteren Layern werden diese Informationen zu Objekten abstrahiert.

Man kann daher bei einem kleinen Datensatz mit sehr geringer Ähnlichkeit zu den Objekten des fertig trainierten Netzes einfach die hinteren Layer abschneiden und sie direkt durch einen Fully Connected Layer mit einer Anzahl von Neuronen der die Anzahl der neu zu erkennenden Objekt-Klassen entspricht ersetzen. Man kann auf diese Art die anhand von vielen Millionen Bildern gelernten Low Level Features (kleine Details des Bildes, wie Linien oder Punkte) für die Verarbeitung von Bildern für die Klassifizierung eines neuen und kleinen Datensatzes mit deutlich abweichenden Objekten verwenden.

Transfer Learning mit ähnlichen Daten und einem großen Datensatz

Bei einem großen Datensatz mit ähnlichen Daten kann das komplette fertig trainierte neuronale Netz als Ausgangsbasis verwendet werden. Lediglich die Größe des Output-Layers muss auf die neue Zahl der zu erkennenden Klassen angepasst und mit zufälligen Gewichten initialisiert werden. Die vorher gelernten Gewichte aller anderen Layer werden nicht fixiert und dienen als Ausgangsbasis für das weitere Training.

Da bei einer großen Datenmenge die Gefahr des Overfittings nicht sehr groß ist, können alle Layer mit den neuen Daten nachtrainiert werden. Da die Ausgangsbasis ein fertig trainiertes Netz ist, das ähnliche Objekte erkennen konnte, wird die Trainingszeit extrem verkürzt und die Ergebnisse sind in der Regel mindestens so gut, als hätte man ein komplett neues neuronales Netz „from the scratch“ trainiert – was allerdings deutlich viel mehr Zeit und Rechenleistung gekostet hätte.

Transfer Learning mit unterschiedlichen Daten und einem großen Datensatz

Bei einem großen Satz von Daten mit im Vergleich zum fertig trainierten Netz sehr unterschiedlichen Objekten, gibt es zwei mögliche Strategien:

Die erste Möglichkeit besteht darin, genau wie im Fall einer großen Datenmenge mit ähnlichen Daten, nur den Output-Layer auszutauschen und durch einen neuen zu ersetzen, dessen Größe der Anzahl zu erkennender Klassen entspricht. Dann wird das komplette Netz mit den vorher gelernten Gewichten als Ausgangsbasis mit den neuen Daten trainiert.

Auch wenn die Daten recht unterschiedlich sind, kann sich in vielen Fällen die Trainigszeit druch diese Strategie deutlich verkürzen lassen. Sollte dieser Ansatz nicht gut funktionieren, kann man alternativ nur die Struktur des fertig trainierten Netzes verwenden, die Gewichte in allen Layern aber zufällig initialisieren und dann komplett neu trainieren.