[PYTHON] Lesen Sie die Zeitung Deep Self-Learning From Noisy Labels

Artikelübersicht

Hier stellen wir das Papier Deep Self-Learning From Noisy Labels [1] vor. Dieses Papier wurde auf der ICCV 2019 angenommen. Darüber hinaus ist die Implementierung von Pytorch auf GitHub verfügbar. Die Genauigkeit ist jedoch nicht so hoch, und am Ende dieses Artikels wird die Ursache erörtert.

Inhalt des Papiers

Überblick

In diesem Artikel arbeiten wir daran, die Genauigkeit des Lernens mithilfe von rauschhaltigen Datensätzen bei der Bildklassifizierung durch tiefes Lernen zu verbessern. "Enthält Rauschen" weist hier auf eine Situation hin, in der die Klassenbezeichnung des Datensatzes falsch hinzugefügt wurde. Tiefes Training erfordert im Allgemeinen einen großen Datensatz, um das Modell zu trainieren, aber das Vorbereiten eines großen, gut beschrifteten Datensatzes kann ziemlich mühsam sein. Darüber hinaus ist es beim Erstellen eines strengen Datensatzes üblich, dass Menschen manuell Anmerkungen machen. Zu diesem Zeitpunkt können jedoch Fehler auftreten. Wenn Sie die aus dem Web gecrawlten Daten so verwenden, wie sie sind, können Sie leicht einen großen Datensatz mit Beschriftungen anordnen. In diesem Fall treten jedoch im Allgemeinen mehr Beschriftungsfehler auf. Unter diesen Umständen wird ein Deep-Learning-Modell, das korrektes Lernen unter Verwendung eines Datensatzes durchführen kann, der in gewissem Maße Rauschen enthält, in der realen Welt als nützlich angesehen, und dieses Papier ist ein Papier, das darauf abzielt, dies zu erreichen.

Neuheit dieses Papiers

Es gibt viele Studien zum Deep Learning mit verrauschten Datensätzen. Dazu gehören die Einführung einer Übergangsmatrix zur Anzeige der Fehlerrate des Etiketts und die Einstellung einer rauschresistenten Verlustfunktion. Diese Techniken gehen jedoch implizit davon aus, dass Beschriftungsfehler zufällig sind. Andererseits hängt das Etikettenrauschen in der Realität häufig von der Eingabe ab. Beispielsweise ist es wahrscheinlicher, dass ein Bild, das verwirrend ist, zu welcher Klasse es gehört, falsch beschriftet ist. In diesem Artikel schlagen wir ein Lernen vor, das dem Rauschen von Etiketten in der realen Welt entspricht.

Ein weiteres Merkmal dieses Dokuments ist, dass keine zusätzlichen Informationen wie rauschfreie Datensätze verwendet werden müssen. Viele bestehende Studien verwenden manuell denoisierte Datensätze. Wie bereits erwähnt, ist die manuelle Kennzeichnung jedoch auch in begrenzter Anzahl eine Belastung. Bei dieser Methode wird das Modell im sogenannten selbstlernenden Format trainiert, wobei nur der Datensatz verwendet wird, der Rauschen enthält.

Überblick über die Methode

Beim Lernen des Modells der vorgeschlagenen Methode gibt es zwei Phasen, die Lernphase und die Etikettenkorrekturphase. Diese Phasen wechseln sich mit jeder Epoche ab.

Lernphase

In der Lernphase wird Modell F für die Bildklassifizierung trainiert. Stellen Sie sich diese Phase fast wie ein typisches Deep-Learning-Training vor. Nur ein Punkt ist, dass die Verlustfunktion geringfügig abweicht und in der folgenden Formel als $ L_ {TOTAL} $ ausgedrückt wird. $ L_{TOTAL} = (1 - \alpha) L_{CCE}(F(\theta, x), y) + \alpha L_{CCE}(F(\theta, x), \hat{y}) $ Wobei $ L_ {CCE} $ die Kreuzentropieverlustfunktion ist. Außerdem ist $ y $ die Bezeichnung, die an die Daten angehängt ist, und $ \ hat {y} $ ist die korrigierte Bezeichnung. Dieses $ \ hat {y} $ wird in der später beschriebenen Etikettenkorrekturphase erhalten. $ \ Alpha $ ist ein Hyperparameter, um diese beiden Verlustfunktionen auszugleichen. In der ersten Epoche wurde die Etikettenkorrekturphase noch nicht durchgeführt und das Korrekturetikett kann nicht erhalten werden. Setzen Sie also $ \ alpha = 0 $.

Etikettenkorrekturphase

Als nächstes wird die Etikettenkorrekturphase erklärt. Das Ziel dieser Phase ist es, ein gut korrigiertes Label $ \ hat {y} $ zur Verwendung in der Lernphase zu erhalten. Führen Sie zu diesem Zweck die folgenden Schritte aus.

  1. Nehmen Sie zufällig $ m $ Proben aus den Trainingsdaten jeder Klasse.
  2. Bestimmen Sie repräsentative Prototypen $ p $ aus $ m $ Stichproben jeder Klasse.
  3. Bestimmen Sie für alle Daten das Korrekturetikett basierend auf der Ähnlichkeit mit dem Prototyp jeder Klasse.

Bevor wir die Reihenfolge erläutern, definieren wir die "Ähnlichkeit" für alle hier verwendeten Daten. Zunächst wird das Deep-Learning-Modell $ F $ als $ F = f \ circ G $ definiert. Hier ist $ G $ die Merkmalsextraktionsschicht und $ f $ die vollständig verbundene Schicht für die Klassifizierung. Damit wird die Ähnlichkeit auf die Kosinusähnlichkeit von $ G (x_1) $ und $ G (x_2) $ für die Eingaben $ x_1 $ und $ x_2 $ gesetzt. Das ist, $ \frac{G(x_1)^\mathsf{T}G(x_2)}{||G(x_1)|| ~ ||G(x_2)||} $ Es wird ausgedrückt als. Im Folgenden sollten alle Beschreibungen von "Ähnlichkeit" als diese "Kosinusähnlichkeit des Merkmalsmengenvektors" betrachtet werden.

Probenahme

Zunächst werden $ m $ Daten aus jeder Klasse zufällig ausgewählt. Dies dient dazu, die Menge an $ O (n ^ 2) $ zu reduzieren, die für die Anzahl der Daten $ n $ in den nachfolgenden Berechnungen berechnet wurde.

Prototypentscheidung

Als nächstes werden für jede Klasse $ p $ -Prototypen aus den zuvor ausgewählten $ m $ -Daten bestimmt. Voraussetzung für diesen Prototyp ist, dass er die Merkmale jeder Klasse gut repräsentiert. Insbesondere wird ein Prototyp verwendet, der die folgenden zwei Bedingungen erfolgreich erfüllt. ・ Es gibt viele ähnliche Funktionen wie Sie. ・ Es ist nicht so ähnlich wie andere Prototypen. Mit anderen Worten, wenn die Feature-Menge in der Klasse $ p $ -Cluster enthält, möchten wir, dass die $ p $ -Prototypen die repräsentativen Punkte in jedem Cluster sind. Die spezifische Methode wird unten beschrieben.

Überprüfen Sie zunächst die Ähnlichkeit der $ m $ -Funktionen. Definieren Sie die Matrix $ S $ so, dass $ S_ {ij} $ die Ähnlichkeit zwischen der $ i $ -ten Stichprobe und der $ j $ -ten Stichprobe ist.

Zweitens definieren Sie die Dichte $ \ rho $ für jede Probe. Dies zeigt, wie dicht die Punkte um die Probe sind. $ \rho_i = \sum_{j = 1}^m sign(S_{ij} - S_c). $ Hier ist $ sign $ eine Funktion, die $ 1 $ für einen positiven Wert, $ -1 $ für einen negativen Wert und $ 0 $ für $ 0 $ zurückgibt, und $ S_c $ ist angemessen. Dies ist der Standardwert, und hier ist es der Wert, der den oberen 40% von $ S $ entspricht. Je größer die Anzahl der Samples ist, die Ihnen ähnlich sind, desto größer ist der Wert von $ \ rho $.

Drittens definieren wir die Ähnlichkeit $ \ eta $ für das Prototyping jeder Probe.

\eta_i = \max_{j, \rho_j > \rho_i} S_{ij} ~~(\rho_i < \rho_{max}), \\
\eta_i = \min_{j} S_{ij} ~~(\rho_i = \rho_{max})

Das heißt, derjenige mit der höchsten Dichte $ \ rho $ nimmt die kleinste Ähnlichkeit auf, und die anderen nehmen die höchste Ähnlichkeit aus den Proben mit der höchsten Dichte $ \ rho $. Daher kann gesagt werden, dass die Eigenschaft für den Prototyp umso besser geeignet ist, je kleiner $ \ eta $ ist.

Und schließlich wird der Prototyp mit $ \ rho $ und $ \ eta $ entschieden. Denken Sie daran, dass $ \ rho $ kleiner und $ \ eta $ kleiner sein sollte. Hier werden die besten $ p $ -Proben mit dem größten $ \ rho $ von denen erhalten, die $ \ eta <0,95 $ erfüllen. Lassen Sie dies den Prototyp dieser Klasse sein.

Korrekturetikett generieren

Nachdem wir für jede Klasse einen Prototyp haben, werden wir nach Korrekturetiketten für alle Daten fragen. Sortieren Sie sie einfach in Klassen, die den Prototypen sehr ähnlich sind. Berechnen Sie für jede Daten den durchschnittlichen Ähnlichkeitsgrad mit dem Prototyp jeder Klasse und lassen Sie die Bezeichnung der Klasse mit dem größten Wert die Korrekturbezeichnung $ \ hat {y} $ sein.

Umsetzung des Papiers

Von hier aus werde ich die Umsetzung des Papiers beschreiben. Überprüfen Sie GitHub auf den Quellcode. Wie ich bereits geschrieben habe, wurde die in dem Papier beschriebene Genauigkeit jedoch nicht bestätigt. Die Berücksichtigung dieser Ursache wird am Ende beschrieben.

Implementierungsübersicht

Ähnlich wie in diesem Artikel haben wir Experimente mit dem Datensatz Clothing1M [2] und dem Datensatz FoodLog-101N [3] durchgeführt. Außerdem scheint der FoodLog-101N-Datensatz den FoodLog-101 [4] -Datensatz für Testdaten zu verwenden. Befolgen Sie ihn daher. Die in diesem Artikel beschriebenen Inhalte werden wie für Modelle und Hyperparameter verwendet.

Die Details der Hauptausführungsumgebung werden unten beschrieben. ・ Python: 3.5.2 ・ CUDA: 10.2 ・ Pytorch: 0.4.1 ・ Fackelvision: 0.2.1 ・ Numpy: 1.17.2

Ergebnis

Die in dem Papier angegebene Genauigkeit entspricht der folgenden Tabelle. CCE ist die Genauigkeit bei der Optimierung einfach mithilfe der Kreuzentropie.

CCE Vorgeschlagene Methode
Clothing1M 69.54 74.45
Food-101N 84.51 85.11

Andererseits ist die Genauigkeit bei der Reproduktionsimplementierung wie in der folgenden Tabelle gezeigt. Der Grund, warum die Genauigkeit des vorgeschlagenen Verfahrens nicht eindeutig ist, besteht darin, dass der Fehler aufgrund von Zufallszahlen ziemlich groß ist. Wie später beschrieben wird, konnten wir den Grad dieser Unschärfe aufgrund verschiedener Bestätigungen bezüglich der Ursache nicht quantitativ bewerten. Es gibt jedoch kein Phänomen, bei dem das vorgeschlagene Verfahren die CCE signifikant überschreitet.

CCE Vorgeschlagene Methode
Clothing1M 68.10 Um 64
Food-101N 85.05 Um die 80

Mögliche Ursachen für eine verminderte Genauigkeit

Möglicherweise falsche Implementierung

Dies ist nur ein Abschnitt, in dem die Garantie für die Richtigkeit dieser Implementierung angegeben ist. Überspringen Sie ihn daher, wenn Sie nicht interessiert sind.

Wenn bei dieser Implementierung ein Fehler auftritt, unterscheidet sich die Genauigkeit bei der Verwendung der Kreuzentropie nicht so stark von der des Papiers. Daher denke ich, dass das Problem der Teil ist, der mit der Etikettenkorrektur zusammenhängt. Dies wird bestätigt, indem es in zwei Teile geteilt wird, von denen einer das Korrekturetikett generiert und der andere das Korrekturetikett verwendet.

Die erste ist die Bestätigung des Teils, der das Korrekturetikett generiert. Zunächst haben wir individuell bestätigt, dass sich die damit verbundenen Funktionen wie erwartet verhalten haben. Als nächstes wird bestätigt, dass das korrigierte Etikett und das ursprüngliche verrauschte Etikett in gewissem Maße übereinstimmen und dass das Etikett in gewissem Maße gemäß dem verrauschten Etikett korrigiert ist. Darüber hinaus haben wir die Genauigkeit des Etikettenkorrekturverhaltens quantitativ bestätigt. Bei Clothing1M wird ein sauberes Etikett an einen Teil des Datensatzes angehängt, damit Sie die Genauigkeit der Etikettenkorrektur überprüfen können. Um sich auf die Genauigkeit der Etikettenkorrektur zu konzentrieren, wird den Testdaten unter Verwendung eines Etikettenkorrekturmoduls, das aus dem trainierten Modell und den Trainingsdaten generiert wird, ein Etikett zugewiesen, und die korrekte Antwortrate des Etiketts der gesamten Trainingsdaten und die korrekte Antwort des korrigierten Testetiketts werden zugewiesen. Wir haben die Preise verglichen. Die Ergebnisse zu diesem Zeitpunkt sind in der folgenden Tabelle aufgeführt (im Papier beträgt die Etikettengenauigkeitsrate der Trainingsdaten 61,74, im Originalpapier von Clothing 1M 61,54, daher vertraue ich darauf). .. Wenn wir uns das ansehen, können wir sehen, dass die Genauigkeit des verrauschten Etiketts der ursprünglichen Trainingsdaten überschritten wird.

Trainingsdatenetikett Etikett zur Korrektur der Testdaten
61.54 69.92

Wie Sie daraus sehen können, wird das Verhalten der Etikettenkorrektur insgesamt als korrekt angesehen. Anhand der obigen Informationen können Sie bestätigen, dass das Etikettenkorrekturmodul korrekt ist.

Die zweite ist die Bestätigung des Teils, der das Korrekturetikett verwendet. Diesbezüglich war die Genauigkeit bei der Übergabe des Teils, an dem das korrigierte Etikett des Quellcodes übergeben wurde, so dass das nicht korrigierte Etikett übergeben wurde, ungefähr gleich wie bei der ursprünglichen CCE. Daher wird davon ausgegangen, dass in dem Teil, der die Optimierung unter Verwendung des Korrekturetiketts durchführt, kein Fehler vorliegt. Aus den beiden oben genannten Gründen denke ich, dass der Standpunkt von Implementierungsfehlern behoben wurde.

Unterschied in der Ausführungsumgebung

Die diesmal verwendeten Hyperparameter sind die gleichen wie in der Veröffentlichung. Beispielsweise wird in Kleidung 1M die Lernrate alle 5 Epochen mit insgesamt 15 Epochen abgeschwächt. Wie Sie in Abbildung 1 sehen können, scheinen die ersten 5 Epochen unnötig zu sein, da die Lernrate zu hoch ist. Eine der wahrscheinlichsten Ursachen dafür ist der Unterschied in der zur Laufzeit verwendeten Bibliothek und Version.

images.png

Wann soll die Etikettenkorrekturphase gestartet werden?

In der Etikettenkorrekturphase wird davon ausgegangen, dass sich die Genauigkeit verschlechtern kann, bis das neuronale Netzwerk bis zu einem gewissen Grad geeignete Merkmale extrahieren kann. Selbst im Originalpapier gibt es eine Beschreibung, die impliziert, dass die Etikettenkorrekturphase zunächst nicht eingefügt wird, die spezifische Einstellung jedoch nicht angegeben wird. In dieser Implementierung wird das Ergebnis angezeigt, wenn die Etikettenkorrekturphase unmittelbar nach dem Ende der ersten Epoche gestartet wird. Soweit ich das Papier gelesen habe, scheint die Etikettenkorrektur nach dem Ende der ersten Epoche zu beginnen, aber es scheint, dass sie so geschrieben ist, dass nicht gesagt werden kann, dass dies nicht vollständig der Fall ist.

In tatsächlichen Experimenten wurde in einigen Fällen bestätigt, dass die Genauigkeit in den frühen Stadien aufgrund der Markierungskorrektur in der ersten Epoche auf etwa 30% abfiel. Als ich einige Epochen änderte, um die Etikettenkorrekturphase zu starten, änderte sich die endgültige Genauigkeit nicht so sehr, obwohl das Phänomen, dass die Genauigkeit abfiel, plötzlich verschwand. Die Ergebnisse können sich ändern, wenn Sie versuchen, Etikettenkorrekturen in der Mitte mit einer längeren Epochennummer einzufügen. Dies bleibt jedoch eine Frage.

Zufallszahl

Obwohl wir die Varianz der Ergebnisse nicht quantitativ bewerten konnten, denke ich, dass der Einfluss von Zufallszahlen aufgrund der Intensität der Lernwellen und der Atmosphäre mehrerer Versuche nicht ignoriert werden kann. In Bezug auf das Originalpapier, zumindest für Food-101N, bin ich der Meinung, dass die Verbesserung der Genauigkeit durch diese Methode nicht über den Einflussbereich von Zufallszahlen hinausgeht. In Bezug auf das Food-101N-Experiment wurde das Originalpapier übrigens nicht so detailliert analysiert.

Bonus Gegenleistung

In Food-101N wurde die Genauigkeit im Originalpapier nicht so stark verbessert, und ich erwähnte die Möglichkeit, dass dies durch Zufallszahlen erklärt werden könnte, aber ich denke, die Ursache ist die Methode selbst. In Kleidung 1M, bei der es sich um eine Klassifizierung von 14 Klassen handelt, hat das Korrekturetikett eine ausreichend hohe Wahrscheinlichkeit, dass es dasselbe Etikett wie das Originaletikett ist, bei Food-101N, bei dem es sich um eine Klassifizierung von 101 Klassen handelt, ist die Wahrscheinlichkeit, dass das Korrekturetikett dasselbe Etikett wie das Originaletikett ist, Kleidung 1M. Es wurde bestätigt, dass es insgesamt niedriger war als. Ich kenne die Genauigkeit des Korrekturetiketts nicht, da Food-101N kein sauberes Etikett hat, aber ich denke, es ist mit ziemlicher Sicherheit niedriger als Clothing1M. Und angesichts der Schwierigkeit, 101 Klassen mit einer kleinen Anzahl von Prototypen zu klassifizieren, denke ich, dass dies kein seltsames Ergebnis ist. Daher werden bei der Anwendung dieser Methode im Fall einer Mehrklassenklassifizierung wie Food-101N weiche Etiketten verwendet, um Klassen nicht entscheidend zuzuordnen, und das Gewicht des Lernens unter Verwendung von Korrekturetiketten wird verringert. Ich denke, es wird notwendig sein, etwas zu entwickeln.

Verweise

[1] Jiangfan Han, Ping Luo, and Xiaogang Wang. Deep Self-Learning From Noisy Labels. In International Conference on Computer Vision, 2019. [2] Tong Xiao, Tian Xia, Yi Yang, Chang Huang, and Xiaogang Wang. Learning from Massive Noisy Labeled Data for Image Classification. In Computer Vision and Pattern Recognition, 2015. [3] Kuang-Huei Lee, Xiaodong He, Lei Zhang, and Linjun Yang. CleanNet: Transfer Learning for Scalable Image Classifier Training with Label Noise. In Computer Vision and Pattern Recognition, 2018. [4] Lukas Bossard, Matthieu Guillaumin, and Luc Van Gool. Food-101 – Mining Discriminative Components with Random Forests. In European Conference on Computer Vision, 2014.

Recommended Posts

Lesen Sie die Zeitung Deep Self-Learning From Noisy Labels
Lesen Sie den Einstellungswert aus der Google Spread Sheet-Einstellung
Deep Learning aus den mathematischen Grundlagen Teil 2 (während der Teilnahme)
Ich habe die Chainer-Referenz gelesen (von Zeit zu Zeit aktualisiert).