Egal in welchem Kontext. Wenn wir neuronale Netze verwenden, sollten wir imm von vortrainierten Netzen ausgehen und das Konzept von Transfer-Learning nutzen, anstatt mit zufälligen Werten für die Parameter bzw. Gewichte im Netz zu beginnen. Durch den Einsatz von vortrainierten Netzen kommen wir etwa mit einem 1/1000 der Anzahl an erforderlichen Trainingsdatensätzen aus.

Aber was mache ich, wenn es in meiner spezifischen fachlichen Domäne keine oder nur sehr wenige vortrainierte Modell gibt? So stellt das Feld der medizinischen Bilddaten zwar ein großes Anwendungsgebiet für Computer Vision Projekte dar, gleichzeitig gibt es aber bislang nur sehr wenige vortrainierte Modelle. In einem kürzlich erschienenen Paper - Transfusion: Understanding Transfer Learning for Medical Imaging - gingen die Autoren dieser Frage nach und kamen zu dem Ergebnis, dass bereits die Verwendung von einigen der untersten Layers eines vortrainierten ImageNet-Models die Trainingsgeschwindigkeit wie auch die spätere Genauigkeit des eigenen Modells massiv positiv beeinflussen können. Dennoch ist die finale Auswirkung im medizinischen Bereich nicht herausragend.

Aus diesem Grund benötigen wir ein alternatives Konzept, das besser funktioniert, ohne Unmengen an Trainingsdaten zu benötigen. Diese Möglichkeit bietet uns Self-Supervised-Learning.

Die grundlegenden Ideen dazu fasste Jürgen Schmidhuber in dem Paper Making the World Differentiable bereits im Jahr 1989 zusammen. Auch das Paper Learning Classification with Unlabeled Data stellte einen ähnlichen Ansatz 1994 vor. Die Autoren verwendeten die Labels einer Quelle von Daten gleichzeitig für eine andere. Beispielsweise Audio- und Videodaten: Hört man in den Audiodaten “Muuh“-Laute können diese für Bilddaten, auf denen Kühe zu sehen sind, als Labels verwendet werden.

Self-Supervised-Learning bildet auch das Herzstück von ULMFiT1 - ein Ansatz aus dem Bereich Natural-Language-Processing. Auch dieses Modell steigerte den state-of-the-art auf neue Höhen. Im ULMFiT Ansatz wird zuerst ein allgemeines Sprachmodell trainiert. Dieses Modell ist in der Lage in einem Text das folgende Wort vorherzusagen. Dieses Modell lernt Strukturen der jeweiligen Sprache zu erfassen und eignet sich daher ausgesprochen gut, mittels Transfer-Learning für andere Aufgaben aus dem NLU (Natural-Language-Understanding) trainiert zu werden.

Self-Supervised-Learning im Bereich Computer-Vision

Die erste Aufgabenstellung bei Self-Supervised-Learning wird als pretext task bezeichnet. Jene Schritte, die wir dann im Zuge von Finetuning setzen werden als downstream tasks bezeichnet. Auch wenn heute Self-Supervised-Learning im Bereich NLU als Standard verwendet wird, findet sich die Umsetzung im Bereich Computer Vision noch kaum. Möglicherweise trägt die Verbreitung der Verwendung von vortrainierten ImageNet Modellen dazu bei. Dennoch möchte ich in diesem Blog-Artikel die Verwendung von Self-Supervised-Learning im Bereich Computer Vision vorstellen und damit mehr Anwender motivieren, diese Möglichkeit für ihre eigenen Modelle anzuwenden und zu testen.

Die wichtigste Frage, die in Zusammenhang mit Self-Supervised-Learning im Computer-Vision Bereich beantwortet werden muss, lautet: “Welche Art von pretex-Aufgaben sollte ich einsetzen?”. Natürlich gibt es eine Vielzahl an Möglichkeiten, aus denen man die gewünschte auswählen kann. Ich werde im Folgenden einige der Möglichkeiten exemplarisch aufzeigen und die Papers zitieren, aus denen sie stammen.

Colorization

Durch die Verwendung von verschiedenen Farbschemen können zusätzliche Trainingsdaten erstellt werden.

colorization pretex sample

Quellen:

  • https://arxiv.org/abs/1603.08511
  • https://arxiv.org/abs/1603.06668
  • https://arxiv.org/abs/1806.09594

Teilbilder richtig im Gesamtkontext plazieren

Einzelne Teilausschnitte eines Bildes werden im Gesamtkontext an der richtigen Position plaziert.

Teilbilder richtig im Gesamtkontext plazieren

Quellen:

  • https://arxiv.org/abs/1603.09246
  • https://arxiv.org/abs/1505.05192

Bilder in der richtigen Reihenfolge sortieren

Eine Sequenz von Bildern wird in zufälliger Reihenfolge dargestellt und anschließend sortiert.

Bilder in der richtigen Reihenfolge sortieren

Quellen:

  • https://arxiv.org/abs/1708.01246
  • https://arxiv.org/abs/1603.08561

Inpainting

Ein Bildausschnitt wird aus dem Bild entfernt und anschließend durch das neuronale Netz neu berechnet.

Inpainting

Quelle:

  • https://arxiv.org/abs/1604.07379

Bildrestauration

Die grünen Bilder in diesem Beispiel stellen korrekte Bilder dar, während die roten Bilder mit (künstlichen) Defekten darstellen. Ein zu einfaches Schema, wie die Bilder korrumpiert werden, könnte allerdings einen zu einfachen pre-text-task darstellen und würde somit auch keine weiteren nützlichen Features generieren. Der Ansatz im zitierten Paper verwendet einen einfallsreichen Modus für die Korrumpierung der Bilder, welcher an den Features vom Autoencoder des neuronalen Netzes ansetzt und danach versucht, diese wiederherzustellen.

Bildrestauration

Den richtigen pretext-task auswählen

Der Task, den wir für unseren Anwendungsfall auswählen, sollte einer sein, der ein Verständnis über die zugrundliegenden Daten verlangt, welches auch für die Durchführung der nachgelagerten Daten-Pipeline erforderlich ist.

Oftmals wurden für diesen Zweck Autoencoder verwendet. Ein derartiger Autoencoder verwandelt ein übergebenes Bild in eine stark vereinfachte Form (mithilfe eines bottelneck-layers) und konvertiert dieses danach in ein neues Bild, das dem Original so ähnlich wie möglich sehen sollte. Der tatsächliche pretext-task in diesem Fall ist also eine Form von Kompression des Bildes. So muss dieser Task nicht nur das Originalbild herstellen können, sondern auch ein etwaiges Rauschen im Originalbild. Wenn also der tatsächliche Einsatzzweck des KI-Systems die Qualitätsverbesserung von Bildern ist, so wäre dieser pretext-task eine eher schlechte Wahl.

Jeder pretext-task sollte auch von einem Menschen leicht durchführbar sein. So könnte ein pretext-task etwa die Erstellung des nächsten Frames eines Videos sein. Sollte der Frame, den wir erstellen wollen, jedoch zu weit in der Zukunft liegen, könnte dieser zukünftige Frame zu einer ganz anderen Szene gehören. Dadurch wäre es beinahe unmöglich, diesen im Vorfeld zu konstruieren.

Feinadjustierung des Modells

Nachdem wir unser Modell mithilfe der pretext-tasks vortrainiert haben, können wir uns an die Feinabstimmung unsers Modells begeben. Ab diesem Zeitpunkt stellt die Aufgabe eine Instanz von Transfer-Learning dar, weshalb wir jedes weitere Training mit Vorsicht durchführen sollten, um nicht die bereits vortrainierten Parameter unseres Modells zu stören. Techniken dazu sind etwa: gradual unfreezing, discriminate learning rates und one-cycle-training. Mehr Informationen über die Theorie hinter diesen Techniken finden sich im Paper zu ULMFiT1.

Generell wird man die besten Erfahrungen machen, nicht allzuviel Ressourcen auf die Entwicklung des bestmöglichen vortrainierten Modells zu verwenden, sondern ein Modell zu bauen, das vernüftige und schnelle Ergebnisse liefert. Danach kann man prüfen, ob das Modell für den geplanten Einsatzzweck ausreichend gut ist.

Natürlich können auch mehrere Runden zwischen Pretraining und regulärem Training gedreht werden. Beispielsweise verwendet man ein der oben zitierten Techniken für das pretraining, danach Segmentation für zusätzliches Pretraining und danach das reguläre Training des Modells.

Gernerell gilt auch hier: versuche stets mit der einfachsten Methode zu beginnen und steigere erst sukzessive die Komplexität, wenn das aktuelle Modell nicht ausreicht.

Consistency Loss / Noise Constractive Estimation

Die beiden Terme Consistency Loss bzw. Noise Constractive Estimation bezeichnen eine Möglichkeit, die man zusätzlich zu self-supervised training im Bereich Computer Vision anwenden kann.

Die Basisidee hinter Consistency Loss (bzw. Noise Constractive Estimation) kann folgendermaßen umschrieben werden: Der pretext-task verursacht in irgendeinerweise ein verstärktes Maß an Chaos in den Rohdaten (wie Drehung, Verschieben, Verändern der Reihenfolge, etc.). In jedem Fall hoffen wir aber, dass die Originaldaten und die veränderten Daten zur gleichen Vorhersage führen. So generieren wir die gleichen Features in den verschiedenen Repräsentationsstadien innerhalb des Netzes. Weiters hoffen wir, dass auch zwei gleiche Rohdaten, die auf unterschiedliche Weise verändert wurden, zur gleichen Vorhersage führen.

Aus diesem Grund fügen wir unserer Loss-Function ein Element hinzu, das unterschiedliche Prognosen von gleichen Rohdaten entsprechend “bestraft”. Die schematische Abbildung dazu habe ich aus einem Posting von Google entnommen2:

Durch diesen Ansatz kann die erforderliche Menge an Trainingsdaten um den Faktor 1000 reduziert werden. Die Transformation dieser Idee vom Bereich NLU auf den Bereich Computer Vision zeigt Facebook in diesen beiden Papers:

Aus diesem Erfahrungen heraus kann man sagen, dass es auf jeden Fall einen Versuch wert ist, einen Consistency Loss Layer dem eigenen Modell hinzuzufügen.

  1. https://arxiv.org/abs/1801.06146  2

  2. https://ai.googleblog.com/2019/07/advancing-semi-supervised-learning-with.html