
In den vorherigen Artikeln dieser Trainingsreihe wurden mögliche Optionen zum Aufbereiten von Daten beschrieben.
Vorverarbeitung und Hinzufügen von Daten mit Bildern ; in diesen Artikeln wurde auch das
Basismodell zum Erkennen von Emotionen basierend auf Bildern eines Faltungsnetzwerks konstruiert.
In diesem Artikel werden wir ein verbessertes Faltungsmodell für neuronale Netze zum Erkennen von Emotionen in Bildern mithilfe einer als
induktives Lernen bezeichneten Technik erstellen.
Zunächst müssen Sie sich mit dem Artikel über das
Grundmodell zum Erkennen von Emotionen in Bildern vertraut machen. Sie können auch beim Lesen darauf verweisen, da einige Abschnitte, einschließlich des Studierens der Quelldaten und der Beschreibung von Netzwerkindikatoren, hier nicht im Detail aufgeführt werden.
Daten
Der Datensatz enthält 1630 Bilder mit Emotionen aus zwei Klassen:
Negativ (Klasse 0) und
Positiv (Klasse 1). Einige Beispiele für solche Bilder sind unten angegeben.
Negativ

Positiv


Einige der Beispiele enthalten offensichtliche positive oder negative Emotionen, während andere möglicherweise nicht kategorisiert werden - selbst bei menschlicher Beteiligung. Basierend auf einer Sichtprüfung solcher Fälle schätzen wir, dass die maximal mögliche Genauigkeit bei etwa 80 Prozent liegen sollte. Beachten Sie, dass ein Zufallsklassifizierer aufgrund eines kleinen Ungleichgewichts in den Klassen eine Genauigkeit von ungefähr 53 Prozent bietet.
Um das Modell zu trainieren, verwenden wir die Technik
, einen Teil der Proben beizubehalten und den Anfangsdatensatz in zwei Teile zu teilen, von denen einer (20 Prozent des Anfangssatzes) von uns zur Überprüfung verwendet wird. Die Partitionierung erfolgt mithilfe der
Schichtung : Dies bedeutet, dass das Gleichgewicht zwischen den Klassen in den Trainings- und Testsätzen erhalten bleibt.
Beheben von Datenmangel
Das Grundmodell zeigte Ergebnisse, die nur geringfügig besser waren als zufällige Vorhersagen der Bildklasse. Es kann viele mögliche Gründe für dieses Verhalten geben. Wir glauben, dass der Hauptgrund darin besteht, dass die verfügbare Datenmenge für ein solches Training des Faltungsteils des Netzwerks, das es ermöglichen würde, charakteristische Merkmale basierend auf dem Eingabebild zu erhalten, entschieden unzureichend ist.
Es gibt viele verschiedene Möglichkeiten, um das Problem der Datenschwäche zu lösen. Hier sind einige davon:
- Wiederholen . Die Idee der Methode ist es, die Verteilung von Daten zu bewerten und neue Beispiele aus dieser Verteilung auszuwählen.
- Lernen ohne Lehrer . Jeder kann große Datenmengen finden, die der Art der markierten Beispiele in einem bestimmten Datensatz entsprechen. Beispielsweise können es Filme zur Videoerkennung oder Hörbücher zur Spracherkennung sein. Der nächste Schritt auf diesem Weg besteht darin, diese Daten für das Vortraining des Modells zu verwenden (z. B. mithilfe von Auto-Encodern).
- Datenerweiterung . Während dieses Prozesses werden Probendaten unter Verwendung eines gegebenen Satzes von Transformationen zufällig modifiziert.
- Induktives Lernen . Dieses Thema ist für uns von großem Interesse. Lassen Sie uns es näher kennenlernen.
Induktives Lernen
Der Begriff
induktives Training bezieht sich auf eine Reihe von Techniken unter Verwendung von Modellen (oft sehr groß), die auf verschiedenen Datensätzen ungefähr derselben Art trainiert wurden.


Vergleich traditioneller maschineller und induktiver Lernmethoden. Bild aus S. Ruders Blogeintrag
"Was ist induktives Lernen?" .
Es gibt
drei Hauptszenarien für die Verwendung von induktivem Lernen:
- Vorgefertigte Modelle . Jeder Benutzer kann einfach ein von einer anderen Person geschultes Modell nehmen und es für seine Aufgaben verwenden. Ein solches Szenario ist möglich, wenn die Aufgaben sehr ähnlich sind.
- Blockieren Sie die Auswahl der Zeichen . An diesem Punkt wissen wir, dass die Architektur des Modells in zwei Hauptteile unterteilt werden kann: die Merkmalsextraktionseinheit , die für das Extrahieren von Merkmalen aus den Eingabedaten verantwortlich ist, und das Klassifizierungsmodul , das Beispiele basierend auf den empfangenen Merkmalen klassifiziert. In der Regel ist der Feature-Extraktionsblock der Hauptteil des Modells. Die Idee des Verfahrens besteht darin, einen Block zur Unterscheidung von Merkmalen von einem in einem anderen Problem trainierten Modell zu nehmen, seine Gewichtskoeffizienten festzulegen (sie nicht trainiert zu machen) und dann auf seiner Basis neue Klassifizierungsmodule für das betrachtete Problem aufzubauen. Das Klassifizierungsmodul ist normalerweise nicht sehr tief und besteht aus mehreren vollständig verbundenen Schichten, sodass dieses Modell viel einfacher zu trainieren ist.
- Präzise und tiefe Abstimmung . Diese Methode ähnelt einem Szenario mit einem Feature-Extraktionsblock. Dieselben Aktionen werden ausgeführt, mit Ausnahme des "Einfrierens" des Feature-Extraktionsblocks. Sie können beispielsweise das VGG- Netzwerk als Merkmalsextraktionsblock verwenden und nur die ersten drei (von vier) Faltungsblöcke darin "einfrieren". In diesem Fall kann sich die Merkmalsextraktionseinheit besser an die aktuelle Aufgabe anpassen. Weitere Informationen finden Sie im Blog-Beitrag von F. Chollet. Erstellen Sie leistungsstarke Bildklassifizierungsmodelle mit einer sehr kleinen Datenmenge .
Eine detaillierte Beschreibung der Szenarien für die Verwendung des induktiven Lernens finden Sie im Kurs
CS231n der Stanford University
zur Faltung neuronaler Netze zur visuellen Erkennung durch Fei-Fei Li und in Blogeinträgen von S. Ruder.
Induktives Lernen ist die nächste Grenze in der Entwicklung maschinelles Lernen (Themen umfassender diskutiert).
Möglicherweise haben Sie Fragen: Warum werden all diese Methoden benötigt und warum können sie funktionieren? Wir werden versuchen, sie zu beantworten.
- Vorteile der Verwendung großer Datenmengen. Zum Beispiel können wir den Feature-Extraktionsblock aus einem Modell übernehmen, das auf 14 Millionen Bildern trainiert wurde, die im ImageNet- Wettbewerbsdatensatz enthalten sind. Diese Modelle sind komplex genug, um sehr hochwertige Merkmale aus den Eingabedaten zu extrahieren .
- Überlegungen zur Zeit. Das Training großer Modelle kann Wochen oder sogar Monate dauern. In diesem Fall kann jeder viel Zeit und Rechenressourcen sparen .
- Eine gewichtige Annahme, die zugrunde liegt, warum all dies funktionieren kann, lautet wie folgt: Die Attribute, die durch das Training in einer Aufgabe erhalten werden, können nützlich und für eine andere Aufgabe geeignet sein. Mit anderen Worten, Merkmale haben die Eigenschaft der Invarianz in Bezug auf das Problem. Beachten Sie, dass die Domäne der neuen Aufgabe der Domäne der ursprünglichen Aufgabe ähnlich sein muss. Andernfalls kann die Merkmalsextraktionseinheit die Ergebnisse sogar verschlechtern.
Erweiterte Modellarchitektur
Jetzt kennen wir das Konzept des induktiven Lernens. Wir wissen auch, dass ImageNet ein wichtiges Ereignis ist, bei dem fast alle modernen fortschrittlichen Faltungsarchitekturen für neuronale Netze getestet wurden. Versuchen wir, den Feature-Extraktionsblock aus einem dieser Netzwerke zu übernehmen.
Glücklicherweise bietet uns die Keras-Bibliothek
mehrere vorab trainierte (über ImageNet) Modelle, die innerhalb dieser Plattform erstellt wurden. Wir importieren und verwenden eines dieser Modelle.

In diesem Fall verwenden wir ein Netzwerk mit VGG-Architektur. Um nur die Merkmalsextraktionseinheit auszuwählen, löschen wir das Klassifizierungsmodul (die drei obersten vollständig verbundenen Schichten) des Netzwerks, indem
wir den Parameter
include_top auf
False setzen . Wir möchten unser Netzwerk auch mit den Gewichten des in ImageNet trainierten Netzwerks initialisieren. Der letzte Parameter ist die Größe der Eingabe.
Bitte beachten Sie, dass die Größe der Originalbilder im ImageNet-Wettbewerb (224, 224, 3) beträgt, während unsere Bilder (400, 500, 3) groß sind. Wir verwenden jedoch Faltungsschichten - dies bedeutet, dass die Netzwerkgewichte die Gewichte der sich bewegenden Kernel in der Faltungsoperation sind. Zusammen mit der Eigenschaft der Parametertrennung (eine Diskussion hierzu finden Sie in unserem theoretischen Artikel
Übersicht über Faltungsnetzwerke zur Klassifizierung von Bildern ) führt dies dazu, dass die Größe der Eingabedaten nahezu beliebig sein kann, da die Faltung über ein Schiebefenster durchgeführt wird und dieses Fenster entlang gleiten kann Bild jeder Größe. Die einzige Einschränkung besteht darin, dass die Größe der Eingabedaten groß genug sein muss, damit sie in einer Zwischenschicht nicht auf einen Punkt (räumliche Messungen) kollabieren, da sonst keine weiteren Berechnungen möglich sind.
Ein weiterer Trick, den wir verwenden, ist das
Caching . VGG ist ein sehr großes Netzwerk. Ein direkter Durchgang für alle Bilder (1630 Beispiele) durch die Merkmalsextraktionseinheit dauert ungefähr 50 Sekunden. Es sollte jedoch beachtet werden, dass die Gewichte der Merkmalsextraktionseinheit fest sind und ein direkter Durchgang immer das gleiche Ergebnis für das gleiche Bild liefert. Wir können diese Tatsache verwenden, um einen direkten Durchlauf durch die Merkmalsextraktionseinheit nur
einmal durchzuführen und dann die Ergebnisse in einem Zwischenarray zwischenzuspeichern. Um dieses Szenario zu implementieren, erstellen wir zunächst eine Instanz der
ImageDataGenerator- Klasse, um Dateien direkt von der Festplatte zu laden (weitere Informationen finden Sie im
Basisartikel Grundmodell zum Erkennen von Emotionen in Bildern ).

In der nächsten Phase verwenden wir im Vorhersagemodus den zuvor erstellten Merkmalsextraktionsblock als Teil des Modells, um Bildmerkmale zu erhalten.

Es dauert ungefähr 50 Sekunden. Jetzt können wir die Ergebnisse für ein sehr schnelles Training des oberen Klassifizierungsteils des Modells verwenden - eine Ära dauert für uns ungefähr 1 Sekunde. Stellen Sie sich jetzt vor, dass jede Ära 50 Sekunden länger dauert. Mit dieser einfachen Caching-Technik konnten wir den Prozess des Netzwerktrainings um das 50-fache beschleunigen! In diesem Szenario speichern wir alle Zeichen für alle Beispiele im RAM, da das Volumen dafür ausreicht. Wenn Sie einen größeren Datensatz verwenden, können Sie die Eigenschaften berechnen, auf die Festplatte schreiben und sie dann mit demselben Ansatz lesen, der der Generatorklasse zugeordnet ist.
Betrachten Sie abschließend die Architektur des Klassifizierungsteils des Modells:


Denken Sie daran, dass am Ausgang des Merkmalsextraktionsblocks des Faltungsnetzwerks ein vierdimensionaler Tensor (Beispiele, Höhe, Breite und Kanäle) ausgegeben wird und eine vollständig verbundene Schicht zur Klassifizierung einen zweidimensionalen Tensor (Beispiele, Merkmale) verwendet. Eine Möglichkeit, einen vierdimensionalen Tensor mit Merkmalen zu transformieren, besteht darin, ihn einfach um die letzten drei Achsen auszurichten (wir haben im Basismodell eine ähnliche Technik verwendet). In diesem Szenario verwenden wir einen anderen Ansatz, der als
Global Mean Value Sub-Sampling (GAP) bezeichnet wird. Anstatt die vierdimensionalen Vektoren auszurichten, nehmen wir den Durchschnittswert basierend auf zwei räumlichen Dimensionen. Tatsächlich nehmen wir eine Karte mit Attributen und mitteln einfach alle darin enthaltenen Werte. Die GAP-Methode wurde erstmals in der hervorragenden Arbeit des Min Lin-
Netzwerks im Internet eingeführt (dieses Buch ist es wirklich wert, es kennenzulernen, da es einige wichtige Konzepte behandelt - zum Beispiel 1 × 1-Windungen). Ein offensichtlicher Vorteil des GAP-Ansatzes ist eine signifikante Reduzierung der Anzahl der Parameter. Bei Verwendung von GAP erhalten wir für jedes Beispiel nur 512 Features. Beim Ausrichten der Rohdaten beträgt die Anzahl der Features 15 × 12 × 512 = 92 160. Dies kann zu einem erheblichen Overhead führen, da in diesem Fall der Klassifizierungsteil des Modells etwa 50 hat Millionen Parameter! Weitere Elemente des Klassifizierungsteils des Modells, z. B. vollständig verbundene Ebenen und Ebenen, die die Ausschlussmethode implementieren, werden im Artikel
Grundmodell zum Erkennen von Emotionen in Bildern ausführlich erläutert.
Einstellungen und Trainingsoptionen
Nachdem wir die Architektur unseres Modells mit Keras vorbereitet haben, müssen Sie das gesamte Modell für das Training mithilfe der Kompilierungsmethode konfigurieren.

In diesem Fall verwenden wir Einstellungen, die den Einstellungen des Basismodells fast ähnlich sind, mit Ausnahme der Auswahl des Optimierers. Um das Lernen zu optimieren, wird die
binäre Kreuzentropie als Verlustfunktion verwendet und zusätzlich eine Genauigkeitsmetrik verfolgt. Wir verwenden die
Adam- Methode als Optimierer. Adam ist eine Art stochastischer Gradientenabstiegsalgorithmus mit einem Moment und einer adaptiven
Lerngeschwindigkeit (weitere Informationen finden Sie im Blogeintrag von S. Ruder
Übersicht über Algorithmen zur Optimierung des Gradientenabstiegs ).
Die Lerngeschwindigkeit ist ein Optimierungshyperparameter, der konfiguriert werden muss, um sicherzustellen, dass das Modell betriebsbereit ist. Denken Sie daran, dass die Formel für den Gradientenabstieg „Vanille“ keine zusätzlichen Funktionen enthält:

Θ ist der Vektor der Modellparameter (in unserem Fall sind dies die Gewichtungskoeffizienten des neuronalen Netzwerks), - ist die Zielfunktion, ∇ ist der Gradientenoperator (berechnet unter Verwendung des Algorithmus zur Fehlerrückausbreitung), α ist die Lerngeschwindigkeit. Somit repräsentiert der Gradient der Zielfunktion die Richtung des Optimierungsschritts im Parameterraum, und die Lerngeschwindigkeit ist seine Größe. Bei Verwendung einer unangemessen hohen Lerngeschwindigkeit besteht die Möglichkeit eines konstanten Verrutschens des optimalen Punktes aufgrund der zu großen Schrittgröße. Wenn andererseits die Lerngeschwindigkeit zu niedrig ist, nimmt die Optimierung zu viel Zeit in Anspruch und kann die Konvergenz nur zu lokalen Minima geringer Qualität anstelle eines globalen Extremums sicherstellen. Daher ist es in jeder spezifischen Situation notwendig, einen geeigneten Kompromiss zu suchen. Die Verwendung der Standardeinstellungen für den Adam-Algorithmus ist ein guter Ausgangspunkt für den Einstieg.
Bei dieser Aufgabe zeigen die Standardeinstellungen von Adam jedoch schlechte Ergebnisse. Wir müssen die anfängliche Lernrate auf 0,0001 reduzieren. Andernfalls kann die Schulung keine Konvergenz gewährleisten.
Letztendlich können wir über 100 Epochen lernen und dann das Modell selbst und die Geschichte des Lernens speichern. Der Befehl
% time ist ein magischer Ipython * -Befehl, mit dem Sie die Ausführungszeit von Code messen können.

Bewertung

Lassen Sie uns die Wirksamkeit des Modells während des Trainings bewerten. In unserem Fall beträgt die Überprüfungsgenauigkeit 73 Prozent (im Vergleich zu 55 Prozent beim Basismodell). Dieses Ergebnis ist viel besser als das Ergebnis des Basismodells.
Betrachten wir auch die Fehlerverteilung anhand der Matrix der Ungenauigkeiten. Fehler werden fast gleichmäßig zwischen Klassen verteilt, wobei eine leichte Tendenz zu falsch klassifizierten negativen Beispielen besteht (obere linke Zelle der Matrix der Ungenauigkeiten). Dies kann durch ein
kleines Ungleichgewicht im Datensatz gegenüber der positiven Klasse erklärt werden.
Eine weitere Metrik, die wir verfolgen, ist die Empfängerleistungskurve (ROC-Kurve) und die Fläche unter dieser Kurve (AUC). Eine ausführliche Beschreibung dieser Metriken finden Sie im Artikel
Grundmodell zum Erkennen von Emotionen in Bildern .

Je näher die ROC-Kurve am oberen linken Punkt des Diagramms liegt und je größer die Fläche darunter ist (AUC-Metrik), desto besser funktioniert der Klassifikator. Diese Abbildung zeigt deutlich, dass ein verbessertes und vorab trainiertes Modell bessere Ergebnisse zeigt als das von Grund auf neu erstellte Basismodell. Der AUC-Wert für das vorab trainierte Modell beträgt 0,82, was ein gutes Ergebnis ist.

Fazit
In diesem Artikel haben wir eine leistungsstarke Technik kennengelernt - induktives Lernen. Wir haben auch einen Faltungsklassifizierer für neuronale Netze unter Verwendung einer vorab trainierten Merkmalsextraktionseinheit konstruiert, die auf der VGG-Architektur basiert. Dieser Klassifikator übertraf in seinen Leistungsmerkmalen das von Grund auf trainierte grundlegende Faltungsmodell. Die Erhöhung der Genauigkeit betrug 18 Prozent, und die Erhöhung der AUC-Metrik betrug 0,25, was eine sehr signifikante Verbesserung der Qualität des Systems zeigt.