Convolutional-Neural-Networks

Convolutional Neural Networks – Aufbau, Funktion und Anwendungsgebiete

Ein Convolutional Neural Network (kurz „CNN“) ist eine Deep Learning Architektur, die speziell für das Verarbeiten von Bildern entwickelt wurde. Inzwischen hat sich jedoch herausgestellt, dass Convolutional Neural Networks auch in vielen anderen Bereichen, z.B. im Bereich der Textverarbeitung, extrem gut funktionieren.

Aufbau von Convolutional Neural Networks (CNN)

Ein Convolutional Neural Network (auch „ConvNet“ genannt) ist in der Lage, Input in Form einer Matrix zu verarbeiten. Dies ermöglicht es, als Matrix dargestellte Bilder (Breite x Höhe x Farbkanäle) als Input zu verwenden. Ein normales neuronales Netz z.B. in Form eines Multi-Layer -Perceptrons (MLP) benötigt dagegen einen Vektor als Input, d.h. um ein Bild als Input zu verwenden, müssten die Pixel des Bildes in einer langen Kette hintereinander ausgerollt werden (Flattening). Dadurch sind normale neuronale Netze z.B. nicht in der Lage, Objekte in einem Bild unabhängig von der Position des Objekts im Bild zu erkennen. Das gleiche Objekt an einer anderen Position im Bild hätte einen völlig anderen Input-Vektor.

typischer-aufbau-convolutional-neural-network

Ein CNN besteht im wesentlichen aus Filtern (Convolutional Layer) und Aggregations-Schichten (Pooling Layer), die sich abwechselnd wiederholen, und am Ende aus einer oder mehreren Schichten von „normalen“ vollständig verbundenen Neuronen (Dense / Fully Connected Layer).

Filter – Der Convolutional Layer

Der Matrix-Input wird zunächst von einer festgelegten Anzahl von sogenannten Filtern analysiert, die eine feste Pixelgröße (Kernel-Size) haben (z.B. 2 x 2 oder 3 x 3), und die dann wie ein Fenster mit einer konstanten Schrittweite (Step-Size) über die Pixel-Matrix des Inputs scannen. Dabei wandern die Filter von Links nach Rechts über die Input-Matrix und springen nach jedem Durchlauf in die nächst-tiefere Zeile. Mit dem sogenannten Padding wird dabei festgelegt, wie sich der Filter verhalten soll, wenn er an den Rand der Matrix stößt.

Der Filter hat für jeden Punkt in seinem Sichtfenster ein festes Gewicht, und er errechnet aus den Pixelwerten im aktuellen Sichtfenster und diesen Gewichten eine Ergebnismatrix. Die Größe dieser Ergebnismatrix ist abhängig von der Größe (Kernel-Size) des Filters, dem Padding und vor allem von der Schrittweite.

Eine Schrittweite von 2 bei einer Kernel-Size von 2 x 2 führt beispielsweise pro Filter zu einer Halbierung der Größe der Ergebnis Matrix im Vergleich zur Input-Matrix. Dabei ist notwendigerweise nicht mehr jedes Pixel einzeln mit dem Filter verbunden, sondern jeweils 4 Pixel sind gleichzeitig mit dem Filter verbunden (local connectivity). Der Input wurde damit „gefaltet“ (Convolution).

In der ersten Ebene eines Convolutional Neural Networks wird meistens ein Convolutional Layer mit 32 oder 16 Filtern verwendet, deren gefalteter Output entsprechend jeweils eine neue Matrix ist. Diesem ersten Layer folgt meistens ein zweiter, gleich aufgebauter Convolutional Layer, der als Input die neuen Matrizen aus der Faltung des ersten Layer verwendet. Danach folgt ein Pooling Layer.

Der Pooling Layer

Ein Pooling Layer aggregiert die Ergebnisse von Convolutional Layern, indem er nur das jeweils stärkste Signal weiter gibt. Bei einem MaxPooling Layer wird beispielsweise einfach der höchste Wert einer Kernel-Matrix verwendet und alle anderen werden verworfen. Die von einem 2 x 2 Kernel erstellten vier Matrix Ergebnisse werden so auf nur eine Zahl (die höchste der vier) reduziert. Das Pooling dient dazu, nur die relevantesten Signale an die nächsten Schichten weiter zu geben, eine abstraktere Repräsentation des Inhalts zu erreichen und die Anzahl der Parameter eines Netzes zu reduzieren.

Viele CNNs bestehen aus einer Sequenz von jeweils zwei Convolutional Layern mit der gleichen Anzahl an Filtern, gefolgt von einem Pooling Layer, auf den wiederum zwei Convolutional Layer und ein Pooling Layer folgen. Während dabei die Größe des Inputs durch die Faltungen und das Pooling immer weiter reduziert wird, wird die Anzahl der Filter zur Erkennung von übergeordneten Signalen zunehmend erhöht. Nach dem letzten Pooling Layer folgen dann ein oder mehrere Fully Connected Layer.

Der Fully Connected / Dense Layer

Beim Fully Connected Layer oder Dense Layer handelt es sich um eine normale neuronale Netzstruktur, bei der alle Neuronen mit allen Inputs und allen Outputs verbunden sind. Um den Matrix-Output der Convolutional- und Pooling-Layer in einen Dense Layer speisen zu können, muss dieser zunächst ausgerollt werden (flatten). Die Output-Signale der Filter-Schichten sind unabhängig von der Position eines Objektes, daher sind zwar keine Positionsmerkmale mehr vorhanden, dafür aber ortsunabhängige Objektinformationen.

Diese Objektinformationen werden also in einen oder mehrere Fully Connected Layer eingespeist und mit einem Output-Layer verbunden, welcher z.B. genau die Anzahl von Neuronen besitzt, die der Anzahl der verschiedenen zu erkennenden Klassen entspricht.

Aktivierungsfunktionen und Optimierung

In einem Convolutional Neural Network werden die Ergebnisse jedes Layers zumeist durch eine ReLU Funktion aktiviert. Die ReLU Funktion sorgt dafür, dass alle Werte, die kleiner als Null sind, zu Null werden und alle Werte, die größer als Null sind 1:1 erhalten bleiben. Der letzte Layer erhält im Fall von Klassifizierungs-Problemen eine Softmax-Aktivierung, d.h. der Output aller Output-Neuronen addiert sich zu 1 und gibt jeweils die Wahrscheinlichkeit des entsprechenden Outputs an.

Die Gewichte der Filter und der Fully Connected Layer werden zu Beginn zufällig gewählt und dann während des Trainings durch die bekannte Backpropagation immer weiter optimiert. Im Fall von Klassifizierungsproblemen (z.B. welches Objekt ist auf dem Bild zu sehen) wird dabei zur Messung des Fehlers die Categorical Cross-Entropy verwendet (der negative natürliche Logarithmus der berechneten Wahrscheinlichkeit für die Kategorie).

So funktionieren Convolutional Neural Networks

Ein Convolutional Neural Network erkennt mit seinen Filtern ortsunabhängig Strukturen in den Input Daten. Auf der ersten Ebene werden die Filter dabei von einfachen Strukturen wie Linien, Kanten und Farbtupfern aktiviert. Die Art der Filter wird dabei nicht vorgegeben, sondern vom Netz gelernt. In der nächsten Ebene werden Strukturen gelernt, die aus der Kombination dieser Basis-Strukturen bestehen, z.B. Kurven, einfache Formen etc.

Mit jeder Filterebene erhöht sich so das Abstraktions-Level des Netzes. Welche Abstraktionen schließlich zur Aktivierung der hinteren Layer führen, ergibt sich aus den charakteristischen Merkmalen der vorgegebenen Klassen, die erkannt werden sollen. Dabei ist es sehr interessant, die Muster zu visualisieren, welche jeweils auf verschiedenen Ebenen zur Aktivierung der Filter führen.

Visualisierung von Features in einem vollständig trainierten Modell

Wie genau ein ConvNet diese erstaunlichen Ergebnisse zustande bringt, ist in der mathematischen Theorie noch nicht vollständig erklärt. Klar ist jedoch, dass Convolutional Neural Networks derzeit im Bereich der Bildverarbeitung die besten Ergebnisse erzielen.

Anwendungsgebiete von Convolutional Networks

Bei der Erkennung von Objekten in Bildern ist die Performance von Convolutional bereits besser, als die von Menschen.

AI-INDEX

Google’s Deepmind verwendete für das berühmte AlphaGo System ebenfalls CNN’s, um die aktuelle Spielposition des Go-Boards zu evaluieren. Dies führt zu einer weiteren Stärke von Convolutional Neural Networks, die darin besteht, eine als Matrix vorliegende Information zu einem aussagekräftigen Vektor zu verdichten.

Diese Eigenschaft kann man sich z.B. auch im Bereich der Textverarbeitung zu Nutze machen. So schwenkte die bekannte Open Source NLU Library spaCy vor einigen Monaten von einer Word2Vec basierten Lösung zum Encoden von Wörtern und Texten auf ein CNN. Dadurch konnte die Performance von spaCy in allen Bereichen deutlich verbessert werden.

Die aktuellen Einsatzgebiete von Convolutional Neural Networks reichen vom Auto-Encoder über die Objekterkennung in Bildern und Videos bis hin zur synthetischen Generierung von Bildern und Texten aus Vektoren. In vielen weiteren Bereich wird derzeit geforscht, ob CNN’s auch dort bessere Ergebnisse erzielen können, als normale neuronale Netze. Der Kreativität sind dabei durch die Möglichkeit zur Nutzung von Matrix-Inputs kaum Grenzen gesetzt.


Grafik „Typical CNN“: By Aphex34 CC BY-SA 4.0

Grafik „Visualisierung von Features in einem vollständig trainierten Modell“: Screenshot aus Visualizing and Understanding Convolutional Networks

Grafik „Object Detection, LSVRC Competition“: Screenshot aus dem AI Index Report 2017

0 Kommentare

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.