[PYTHON] Was ist das Convolutional Neural Network?

In der Welt des maschinellen Lernens ist das Convolutional Neural Network (CNN) eine Selbstverständlichkeit, wenn es um Bilder geht, und Kagawa, wenn es um Udon geht. Es gibt jedoch überraschend wenige Erklärungen darüber, was das CNN ist.

Daher möchte ich in diesem Artikel den Mechanismus und die Vorzüge von CNN erläutern.

Wie in den Referenzen beschrieben, basiert der Inhalt der Erklärung auf Stanfords CNN-Kurs. In diesem Kurs wird von Neural Network über CNN bis zur Implementierung durch Tensorflow erläutert. Wenn Sie also interessiert sind, lesen Sie bitte auch dies.

Was ist ein Faltungs-Neuronales Netz?

Wie der Name schon sagt, ist CNN ein normales neuronales Netzwerk mit der Hinzufügung von Faltung. Hier werde ich erklären, worum es bei Faltung und Faltung geht und warum sie für die Bilderkennung wirksam sind.

Betrachten Sie als einfache Aufgabe die Aufgabe, festzustellen, ob die geschriebene Zahl ○ oder × ist. Das Folgende ist ein Beispiel für die Verwendung eines normalen neuronalen Netzwerks.

image

Stellen Sie sich ein Pixel im Bild als eine Eingabe vor. Bei einem 10x10-Bild ist die Eingabe ein Vektor der Größe 100 (beachten Sie, dass dies für die RGB-Darstellung x3 ist).

In der Abbildung wird der schwarze Teil des Randes des Kreises als Eingabe angezeigt. Wenn Sie sich dies jedoch ansehen, können Sie sehen, dass die Beurteilung stark beeinträchtigt wird, wenn die Position leicht abweicht. Dies liegt daran, dass die Eingabeinformationen ebenfalls falsch ausgerichtet und erkannt werden, wenn sich die Position oder Form geringfügig ändert (siehe Abbildung unten).

image

Die Innenseite des blauen Quadrats in der Abbildung ist jedoch tendenziell "schwarz von rechts oben nach links unten". Mit anderen Worten, wenn Sie anstelle von 1 Pixel eine bestimmte Fläche gleichzeitig eingeben können, können Sie anscheinend eine genauere Beurteilung vornehmen.

CNN ist die Verwirklichung dieser Idee.

Wie in der folgenden Abbildung gezeigt, wird ein kleiner Bereich, der als Filter bezeichnet wird (4x4-Bereich mit einem roten Rahmen in der folgenden Abbildung), auf dem Bild aufgenommen und als eine Merkmalsgröße komprimiert (= gefaltet).

image

Dieser Vorgang wird wiederholt, während der Bereich verschoben wird. Das Ergebnis ist eine Faltungsebene, eine Ebene, die durch Falten der Informationen im Filter erstellt wird.

image

Wenn das obige neuronale Netzwerkdiagramm in CNN konvertiert wird, sieht das Bild wie folgt aus.

image

Der Prozess des "Faltens" unter Verwendung dieses Filters ist speziell die Multiplikation und das innere Produkt zwischen dem "Vektor des Bildes im Filter" und dem "zum Falten verwendeten Vektor". Im Folgenden wird ein 5x5x3-Filter auf ein 32x32x3-Bild (32x32-RGB-Bild) angewendet.

image CS231n: Convolutional Neural Networks for Visual Recognition, Lecture7, p13

Dadurch wird schließlich eine 28 x 28 x 1-Ebene erstellt (wenn die Folienbreite 1 beträgt).

image CS231n: Convolutional Neural Networks for Visual Recognition, Lecture7, p14

Wenn Sie die Filtertypen erhöhen, wird die Faltungsschicht entsprechend erhöht. Unten werden 6 Ebenen mit 6 Filtern erstellt.

image CS231n: Convolutional Neural Networks for Visual Recognition, Lecture7, p16

Man kann sagen, dass dies nur ein "neues Bild" durch Falten erzeugt. Wie bei einem normalen neuronalen Netzwerk ist die auf diese Weise erzeugte Faltungsschicht durch eine Aktivierungsfunktion verbunden, um ein Faltungs-Neuronales Netzwerk zu bilden (ReLU wird häufig als Aktivierungsfunktion verwendet).

Ich werde die Geschichte bisher zusammenfassen.

Dieses CNN zeichnet sich durch Filtereinstellungen und Schichtung aus.

Filtereinstellungen

Die folgenden vier Parameter müssen für den zur Faltung verwendeten Filter eingestellt werden.

Beim Auffüllen wird der Randbereich des Bildes wie unten gezeigt mit 0 gefüllt.

image CS231n: Convolutional Neural Networks for Visual Recognition, Lecture7, p35

Der Grund dafür ist, dass das normale Falten die Häufigkeit des Faltens des Randbereichs im Vergleich zu anderen Bereichen verringert. Wenn Sie die Bildränder auf diese Weise mit 0 füllen und von dort aus filtern, werden die Ränder auf die gleiche Weise wie in anderen Bereichen reflektiert.

Darüber hinaus müssen Größe und Bewegungsbreite des Filters so angepasst werden, dass sie der Bildgröße entsprechen. Bitte beachten Sie, dass Sie die Größe und Bewegungsbreite des Filters, der über das Bild hinausgeht, nicht wie unten gezeigt einstellen können.

image

Aus den Werten dieser Parameter kann die Größe der Faltungsschicht berechnet werden. Angenommen, Sie möchten einen 5x5x3-Filter auf ein 32x32x3-Bild mit einer Bewegungsbreite von 1 und einem Abstand von 2 anwenden. Wenn das Auffüllen hinzugefügt wird, beträgt die Größe des Bildes zunächst 32 + 2 * 2 = 36. Wenn Sie von hier aus einen Filter mit einer Breite von 5 und einer Bewegungsbreite von 1 nehmen, ist dies 32 mit 36-5 + 1. Sie erhalten also eine 32x32x3-Ebene.

Diese Parameter müssen auch festgelegt werden, wenn Sie eine Bibliothek wie Caffe verwenden. Daher sollten Sie deren Bedeutung und Berechnung der Größe berücksichtigen.

Schichtstruktur

Es gibt drei Arten von Schichten in CNN, einschließlich der Faltungsschicht.

Das Bild ist wie folgt.

image CS231n: Convolutional Neural Networks for Visual Recognition, Lecture7, p22

Ich werde andere Schichten als die Faltungsschicht erklären. Die erste ist die Pooling-Ebene, die das Bild komprimiert. Es hat den Vorteil, dass die Bildgröße komprimiert und in späteren Ebenen einfacher zu handhaben ist.

image CS231n: Convolutional Neural Networks for Visual Recognition, Lecture7, p54

Es gibt Max Pooling als Mittel, um dieses Pooling durchzuführen. Dies ist eine Komprimierungsmethode, bei der der Maximalwert in jedem Bereich verwendet wird.

image CS231n: Convolutional Neural Networks for Visual Recognition, Lecture7, p55

Eine vollständig verbundene Ebene ist eine Ebene, die alle Elemente der vorherigen Ebene verbindet. Es wird hauptsächlich in der Schicht verwendet, die das endgültige Urteil trifft. Durch die Kombination dieser Schichten erstellen wir eine CNN.

Entwicklung von CNN

Die Genauigkeit von CNN hat sich im Laufe der Jahre verbessert, aber die folgenden Merkmale sind in neueren Konfigurationen zu sehen.

In der folgenden Abbildung sehen Sie, dass die Ebenen mit zunehmender Genauigkeit von Jahr zu Jahr tiefer werden.

image CS231n: Convolutional Neural Networks for Visual Recognition, Lecture7, p78

In Bezug auf die Tiefe der Ebene ist Folgendes möglicherweise leichter zu verstehen. Im Vergleich zu den 8 Schichten von AlexNet, die 2012 erschienen sind, hat sich ResNet, das 2015 die Krone gewann, deutlich auf 152 Schichten erhöht.

image CS231n: Convolutional Neural Networks for Visual Recognition, Lecture7, p80

Es scheint, dass es viele der folgenden Muster als Grundkonfiguration von CNN gibt.

(Convolution * N + (Pooling)) * M + Fully Connected * K

** N ** ist ungefähr ~ 5 und ** M ** Schichten sind geschichtet (M ist ein ziemlich großer Wert), und schließlich ist FC zur Beurteilung ** K ** Schicht (0 <= K <=). 2) Es ist wie beim Einrichten (manchmal füge ich mithilfe der SoftMax-Funktion eine Ebene hinzu, um das Klassifizierungsproblem zu lösen). ReLU wird häufig als Aktivierungsfunktion verwendet.

Obwohl CNN sehr kompliziert aussieht, kann es durch Backpropagation wie Neural Network trainiert werden, da es nicht die Grundlagen des Neural Network entfernt, das sich mit dem Gewicht ausbreitet. Ich denke, die Flexibilität hier ist auch der Reiz von Neural Network.

CNN-Anwendungsbeispiel

CNN wurde nicht nur auf das Originalbild, sondern auch auf andere Aufgaben angewendet. Dieses Anwendungsbeispiel ist in der folgenden Folie sehr gut organisiert. Wenn Sie also interessiert sind, schauen Sie bitte.

Trends bei Faltungs-Neuronalen Netzen

Mit anderen Worten, ein CNN, der ein Bild identifizieren kann, kann die Eigenschaften des Bildes gut erfassen. Mit anderen Worten kann das CNN ohne die Diskriminanzschicht als der Prozess des Transformierens des Eingabebildes in einen Vektor angesehen werden, der seine Merkmale (unterscheidbar) gut darstellt. Einige der Anwendungsbeispiele verwenden diese Funktion, und insbesondere das Anwendungsbeispiel zum Hinzufügen einer Beschriftung zum Bild kombiniert die Funktionsmenge des aus CNN extrahierten Bildes und die Textinformationen.

image

Ich denke, dass in Zukunft verschiedene Anwendungsbeispiele herauskommen werden. Wenn Sie das aktuelle Framework für maschinelles Lernen verwenden, können Sie es selbst ausprobieren. Ich hoffe, dieser Artikel wird Ihnen helfen.

Verweise

Recommended Posts

Was ist das Convolutional Neural Network?
Was ist eine Distribution?
Was ist ein Terminal?
Implementieren Sie das Convolutional Neural Network
Was ist ein Hacker?
Was ist ein Zeiger?
Erfahrung mit faltbaren neuronalen Netzen
Implementieren Sie ein dreischichtiges neuronales Netzwerk
Was ist ein Entscheidungsbaum?
Was ist ein Kontextwechsel?
Was ist ein Superuser?
Was ist ein Systemaufruf?
[Definition] Was ist ein Framework?
Was ist eine Rückruffunktion?
Implementierung eines Faltungs-Neuronalen Netzwerks mit nur Numpy
[Python] Was ist eine Zip-Funktion?
[Python] Was ist eine with-Anweisung?
Implementierung eines zweischichtigen neuronalen Netzwerks 2
Was ist ein lexikalischer / dynamischer Bereich?
Ich habe versucht, ein zweischichtiges neuronales Netzwerk zu implementieren
Verstehen Sie die Anzahl der Eingabe- / Ausgabeparameter des Faltungs-Neuronalen Netzes
Komponieren Sie mit einem neuronalen Netzwerk! Führen Sie Magenta aus
Die Netzwerkanalyse ist eine Weblinkstruktur ①
Versuchen Sie es mit TensorFlow-Part 2-Convolution Neural Network (MNIST).
Was ist ein Hund? Django-Installationsvolumen
Was ist ein Hund? Python-Installationsvolumen
Die Netzwerkanalyse ist eine Weblinkstruktur ②
[Chainer] Dokumentklassifizierung nach Faltungsnetzwerk
Was ist ein Namespace?
Was ist copy.copy ()
Was ist Django? .. ..
Erstellen Sie mithilfe des TensorFlow-Faltungsnetzwerks einen Klassifikator mit einer Handschrifterkennungsrate von 99,2%
Was ist POSIX?
Was ist Linux?
Was ist klass?
Was ist SALOME?
Was ist Linux?
Was ist Python?
Was ist Hyperopt?
Was ist Linux?
Was ist Pyvenv?
Erstellt ein Bildunterscheidungsmodell (cifar10) unter Verwendung eines Faltungs-Neuronalen Netzwerks
Was ist __call__?
Was ist Linux?
Parametrisches neuronales Netzwerk
Was ist Python?
Was ist ein Hund? Django - Erstellen Sie ein benutzerdefiniertes Benutzermodell
Was ist ein Hund? Fordern Sie die Django-Vorlage heraus! Volumen
Verstärkungslernen 10 Versuchen Sie es mit einem trainierten neuronalen Netz.
Eine andere Stilkonvertierungsmethode unter Verwendung des Convolutional Neural Network
Visualisieren Sie die innere Schicht des neuronalen Netzwerks
Es ist ein Mac. Was ist der Linux-Befehl Linux?
Was ist ein Hund? Django - Erstellen Sie ein benutzerdefiniertes Benutzermodell 2
Sag mir, was eine gleichwinklige Abbildung ist, Python!
Was ist Piotroskis F-Score?
Was ist Raspberry Pi?
Trainieren Sie MNIST-Daten mit PyTorch mithilfe eines neuronalen Netzwerks
[Python] Was ist Pipeline ...
Was ist das Calmar-Verhältnis?
Was ist ein Hund? Startvolumen der Django-App erstellen --startapp