Site Overlay

Maschinelles Lernen macht Spaß! Teil 3: Deep Learning und Faltungsneuronale Netze

Wir können diese Art von neuronalem Netz in wenigen Minuten auf einem modernen Laptop trainieren. Wenn es fertig ist, haben wir ein neuronales Netzwerk, das Bilder von „8 „s mit einer ziemlich hohen Genauigkeit erkennen kann. Willkommen in der Welt der (späten 1980er Jahre) Bilderkennung!

Tunnel Vision

Es ist wirklich toll, dass das einfache Einspeisen von Pixeln in ein neuronales Netz tatsächlich funktioniert hat, um eine Bilderkennung aufzubauen! Maschinelles Lernen ist magisch! …richtig?

Nun, so einfach ist es natürlich nicht.

Zunächst einmal ist die gute Nachricht, dass unser „8“-Erkenner bei einfachen Bildern, bei denen der Buchstabe genau in der Mitte des Bildes steht, wirklich gut funktioniert:

Aber jetzt die wirklich schlechte Nachricht:

Unser „8“-Erkennungsprogramm funktioniert überhaupt nicht, wenn der Buchstabe nicht perfekt in der Bildmitte liegt. Schon die kleinste Positionsänderung macht alles zunichte:

Das liegt daran, dass unser Netzwerk nur das Muster einer perfekt zentrierten „8“ gelernt hat. Es hat absolut keine Ahnung, was eine außermittige „8“ ist. Es kennt genau ein Muster und nur ein Muster.

Das ist in der realen Welt nicht sehr nützlich. Die Probleme der realen Welt sind nie so klar und einfach. Wir müssen also herausfinden, wie unser neuronales Netz auch in Fällen funktioniert, in denen die „8“ nicht perfekt zentriert ist.

Brute-Force-Idee Nr. 1: Suche mit einem Schiebefenster

Wir haben bereits ein wirklich gutes Programm zum Auffinden einer „8“ in der Mitte eines Bildes entwickelt. Wie wäre es, wenn wir einfach das ganze Bild nach möglichen „8 „s in kleineren Abschnitten absuchen, einen Abschnitt nach dem anderen, bis wir eine finden?

Dieser Ansatz wird Gleitfenster genannt. Es ist die Brute-Force-Lösung. Sie funktioniert in einigen begrenzten Fällen gut, aber sie ist wirklich ineffizient. Man muss das gleiche Bild immer wieder nach Objekten unterschiedlicher Größe durchsuchen. Das können wir besser machen!

Brute-Force-Idee Nr. 2: Mehr Daten und ein tiefes neuronales Netz

Als wir unser Netz trainiert haben, haben wir ihm nur „8 „s gezeigt, die perfekt zentriert waren. Wie wäre es, wenn wir es mit mehr Daten trainieren, einschließlich „8 „s in allen verschiedenen Positionen und Größen rund um das Bild?

Wir brauchen nicht einmal neue Trainingsdaten zu sammeln. Wir können einfach ein Skript schreiben, um neue Bilder mit den „8 „s in allen möglichen verschiedenen Positionen im Bild zu erzeugen:

Wir haben synthetische Trainingsdaten erstellt, indem wir verschiedene Versionen der Trainingsbilder, die wir bereits hatten, erstellt haben. Das ist eine sehr nützliche Technik!

Mit dieser Technik können wir ganz einfach einen endlosen Vorrat an Trainingsdaten erzeugen.

Mehr Daten machen das Problem für unser neuronales Netz schwieriger zu lösen, aber wir können das kompensieren, indem wir unser Netz größer machen und so in der Lage sind, kompliziertere Muster zu lernen.

Um das Netz größer zu machen, stapeln wir einfach Schicht um Schicht von Knoten auf:

Wir nennen dies ein „tiefes neuronales Netz“, weil es mehr Schichten hat als ein herkömmliches neuronales Netz.

Diese Idee gibt es schon seit den späten 1960er Jahren. Aber bis vor kurzem war das Training eines so großen neuronalen Netzes einfach zu langsam, um nützlich zu sein. Aber als wir herausfanden, wie man 3D-Grafikkarten (die für eine sehr schnelle Matrixmultiplikation ausgelegt sind) anstelle von normalen Computerprozessoren einsetzen kann, wurde die Arbeit mit großen neuronalen Netzen plötzlich praktisch. Tatsächlich kann genau dieselbe NVIDIA GeForce GTX 1080-Grafikkarte, die Sie zum Spielen von Overwatch verwenden, verwendet werden, um neuronale Netze unglaublich schnell zu trainieren.

Aber selbst wenn wir unser neuronales Netz wirklich groß machen und es mit einer 3D-Grafikkarte schnell trainieren können, bringt uns das immer noch nicht zu einer vollständigen Lösung. Wir müssen intelligenter vorgehen, wenn es darum geht, wie wir Bilder in unserem neuronalen Netz verarbeiten.

Denken Sie darüber nach. Es macht keinen Sinn, ein Netzwerk so zu trainieren, dass es eine „8“ am oberen Rand eines Bildes erkennt, und es so zu trainieren, dass es eine „8“ am unteren Rand eines Bildes erkennt, als ob es sich dabei um zwei völlig unterschiedliche Objekte handelt.

Es sollte eine Möglichkeit geben, das neuronale Netzwerk so intelligent zu machen, dass es weiß, dass eine „8“ irgendwo im Bild dasselbe ist, ohne dass es extra trainiert werden muss. Zum Glück gibt es einen!

Die Lösung ist die Faltung

Als Mensch weiß man intuitiv, dass Bilder eine Hierarchie oder konzeptionelle Struktur haben. Betrachten Sie dieses Bild:

Großes Bild von meinem Sohn

Als Mensch erkennen Sie sofort die Hierarchie in diesem Bild:

  • Der Boden ist mit Gras und Beton bedeckt
  • Es gibt ein Kind
  • Das Kind sitzt auf einem Hüpfpferd
  • Das Hüpfpferd steht oben auf dem Gras

Vor allem aber erkennen wir die Vorstellung eines Kindes, egal auf welcher Oberfläche es sich befindet. Wir müssen den Begriff „Kind“ nicht für jede mögliche Oberfläche, auf der es erscheinen könnte, neu erlernen.

Aber im Moment kann unser neuronales Netz das nicht tun. Es denkt, dass eine „8“ in einem anderen Teil des Bildes etwas völlig anderes ist. Es versteht nicht, dass das Verschieben eines Objekts auf dem Bild es nicht zu etwas anderem macht. Das bedeutet, dass es die Identifizierung jedes Objekts in jeder möglichen Position neu erlernen muss. Das ist ätzend.

Wir müssen unserem neuronalen Netz das Verständnis für die Translationsinvarianz vermitteln – eine „8“ ist eine „8“, egal wo im Bild sie auftaucht.

Wir werden dies mit Hilfe eines Prozesses tun, der Faltung genannt wird. Die Idee der Faltung ist zum Teil von der Informatik und zum Teil von der Biologie inspiriert (d.h. verrückte Wissenschaftler, die buchstäblich mit seltsamen Sonden in Katzenhirnen herumstochern, um herauszufinden, wie Katzen Bilder verarbeiten).

Wie die Faltung funktioniert

Anstatt ganze Bilder als ein Raster von Zahlen in unser neuronales Netz einzuspeisen, werden wir etwas viel Schlaueres tun, das sich die Idee zunutze macht, dass ein Objekt gleich ist, egal wo es in einem Bild erscheint.

Schritt für Schritt –

Schritt 1: Das Bild in überlappende Bildkacheln aufteilen

Wie bei der obigen Schiebefenstersuche lassen wir ein Schiebefenster über das gesamte Originalbild gleiten und speichern jedes Ergebnis als separate, kleine Bildkachel:

Auf diese Weise haben wir unser Originalbild in 77 gleich große winzige Bildkacheln verwandelt.

Schritt 2: Jede Bildkachel in ein kleines neuronales Netz einspeisen

Zuvor haben wir ein einzelnes Bild in ein neuronales Netz eingespeist, um zu sehen, ob es eine „8“ ist. Hier machen wir genau dasselbe, aber für jede einzelne Bildkachel:

Wiederhole dies 77 Mal, einmal für jede Kachel.

Es gibt jedoch einen großen Unterschied: Wir behalten die gleichen Gewichte des neuronalen Netzes für jede einzelne Kachel im gleichen Originalbild. Mit anderen Worten, wir behandeln alle Bildkacheln gleich. Wenn in einer bestimmten Kachel etwas Interessantes auftaucht, markieren wir diese Kachel als interessant.

Schritt 3: Speichern der Ergebnisse aus jeder Kachel in einem neuen Array

Wir wollen die Anordnung der ursprünglichen Kacheln nicht aus den Augen verlieren. Also speichern wir das Ergebnis der Verarbeitung jeder Kachel in einem Raster in der gleichen Anordnung wie das Originalbild. Es sieht so aus:

Mit anderen Worten, wir haben mit einem großen Bild begonnen und mit einem etwas kleineren Array geendet, das festhält, welche Abschnitte unseres Originalbildes am interessantesten waren.

Schritt 4: Downsampling

Das Ergebnis von Schritt 3 war ein Array, das aufzeichnet, welche Teile des Originalbildes am interessantesten sind. Aber dieses Array ist immer noch ziemlich groß:

Um die Größe des Arrays zu reduzieren, wird es mit einem Algorithmus namens Max-Pooling verkleinert. Das hört sich schick an, ist es aber gar nicht!

Wir schauen uns einfach jedes 2×2-Quadrat des Arrays an und behalten die größte Zahl:

Die Idee dahinter ist, dass wir, wenn wir etwas Interessantes in einer der vier Eingabekacheln gefunden haben, die jedes 2×2-Rasterquadrat ausmachen, einfach das interessanteste Bit behalten. Dies reduziert die Größe unseres Arrays, während die wichtigsten Bits erhalten bleiben.

Schließender Schritt: Machen Sie eine Vorhersage

Bis jetzt haben wir ein riesiges Bild auf ein ziemlich kleines Feld reduziert.

Raten Sie mal? Dieses Array ist nur ein Haufen Zahlen, also können wir dieses kleine Array als Eingabe für ein weiteres neuronales Netzwerk verwenden. Dieses endgültige neuronale Netz entscheidet, ob das Bild eine Übereinstimmung ist oder nicht. Um es von der Faltungsstufe zu unterscheiden, nennen wir es ein „vollständig verbundenes“ Netzwerk.

Vom Anfang bis zum Ende sieht unsere fünfstufige Pipeline also wie folgt aus:

Weitere Schritte

Unsere Bildverarbeitungspipeline besteht aus einer Reihe von Schritten: Faltung, Max-Pooling und schließlich ein vollständig verbundenes Netzwerk.

Bei der Lösung von Problemen in der realen Welt können diese Schritte beliebig oft kombiniert und gestapelt werden! Man kann zwei, drei oder sogar zehn Faltungsschichten haben. Sie können Max-Pooling einsetzen, wo immer Sie wollen, um die Größe Ihrer Daten zu reduzieren.

Die Grundidee besteht darin, mit einem großen Bild zu beginnen und es Schritt für Schritt zu verkleinern, bis Sie schließlich ein einziges Ergebnis haben. Je mehr Faltungsschritte Sie haben, desto kompliziertere Merkmale kann Ihr Netzwerk lernen zu erkennen.

Zum Beispiel könnte der erste Faltungsschritt lernen, scharfe Kanten zu erkennen, der zweite Faltungsschritt könnte Schnäbel erkennen, indem er sein Wissen über scharfe Kanten nutzt, der dritte Schritt könnte ganze Vögel erkennen, indem er sein Wissen über Schnäbel nutzt, usw.

So sieht ein realistischeres tiefes Faltungsnetzwerk (wie man es in einer Forschungsarbeit finden würde) aus:

In diesem Fall beginnt man mit einem 224 x 224 Pixel großen Bild, wendet zweimal Faltung und Max-Pooling an, wendet noch dreimal Faltung an, wendet Max-Pooling an und hat dann zwei vollständig verbundene Schichten. Das Endergebnis ist, dass das Bild in eine von 1000 Kategorien eingeordnet wird!

Das richtige Netzwerk konstruieren

Woher wissen Sie also, welche Schritte Sie kombinieren müssen, damit Ihr Bildklassifizierer funktioniert?

Gegenwärtig müssen Sie diese Frage durch viele Experimente und Tests beantworten. Es kann sein, dass man 100 Netzwerke trainieren muss, bevor man die optimale Struktur und die optimalen Parameter für das zu lösende Problem gefunden hat. Maschinelles Lernen beinhaltet eine Menge Versuch und Irrtum!

Erstellung unseres Vogelklassifizierers

Jetzt wissen wir endlich genug, um ein Programm zu schreiben, das entscheiden kann, ob ein Bild ein Vogel ist oder nicht.

Wie immer brauchen wir einige Daten, um anzufangen. Der kostenlose CIFAR10-Datensatz enthält 6.000 Bilder von Vögeln und 52.000 Bilder von Dingen, die keine Vögel sind. Um noch mehr Daten zu erhalten, fügen wir den Caltech-UCSD Birds-200-2011-Datensatz hinzu, der weitere 12.000 Vogelbilder enthält.

Hier sind einige der Vögel aus unserem kombinierten Datensatz:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.