Was sind „Convolutional Neural Networks“ (CNN)?

Das Convolutional Neural Network (faltendes neuronales Netzwerk) wird insbesondere im Bereich der Bild- und Audioverarbeitung häufig eingesetzt. Üblicherweise besteht ein solches Convolutional Neural Network aus mindestens 5 Schichten. Innerhalb jeder dieser Schichten wird eine Mustererkennung durchgeführt. Jede Schicht präzisiert dabei die Mustererkennung auf Basis des Outputs der vorherigen Schicht. Vorstellen kann man sich dieses Verfahren wie ein kleines Erkennungsraster, das Stück für Stück über den zu analysierenden Bereich des Datensatzes fährt. Bei einem Bild geschieht dies z.B. auf Pixel-Ebene durch die Analyse von kleinen Bildausschnitten (z.B. 2×2 Pixel).

Hauptanwendungsgebiete: Bilderkennung und Textverarbeitung

Ein Convolutional Neural Network ist eine Deep Learning Architektur, die speziell für das Verarbeiten von Bildern entwickelt wurde. Doch Convolutional Neural Networks sind auch in vielen anderen Bereichen, beispielsweise bei der Textverarbeitung, extrem gut geeignet.

Ein Convolutional Neural Network erkennt mit seinen Filtern ortsunabhängig Strukturen in den jeweiligen 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 und so weiter. 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. Wie genau ein Convolutional Network 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.

Bei der Erkennung von Objekten in Bildern ist die Performance von Convolutional Neutral Networks bereits besser, als die von Menschen. 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 dieser Netze, die darin besteht, eine als Matrix vorliegende Information zu einem aussagekräftigen Vektor zu verdichten.

Diese Eigenschaft kann man sich genauso gut im Bereich der Textverarbeitung zu Nutze machen. 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.

Wie funktioniert ein Convolutional Neural Network?

Ein Convolutional Neural Network verarbeitet den Input in Form einer Matrix. So ist es möglich, als Matrix dargestellte Bilder (die Matrixdimensionen sind Breite x Höhe x Farbkanäle) als Input zu verwenden. Ein normales neuronales Netz zum Beispiel in Form eines Multi-Layer-Perceptrons (MLP) benötigt dagegen einen Vektor als Input. Um also ein Bild als Input zu verwenden, müssten die Pixel des Bildes in einer langen Kette hintereinander angeordnet werden, was in der Fachsprache „Flattening“ genannt wird. Dadurch sind normale neuronale Netze 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.

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

Der Matrix-Input wird als erstes von einer festgelegten Anzahl von sogenannten Filtern analysiert, die eine feste Pixelgröße haben (z.B. 2 x 2 oder 3 x 3), und die dann wie ein Fenster mit einer konstanten Schrittweite ü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 hierfür 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 des Filters, dem Padding und vor allem von der Schrittweite. Eine Schrittweite von 2 bei einer Filtergröße 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“, daher auch der Name Convolutional Network.

In der ersten Ebene eines CNN 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.
Ein Pooling Layer aggregiert die Ergebnisse von Convolutional Layern, indem er nur das jeweils stärkste Signal weiter gibt. Bei einem MaxPooling Layer wird zum Beispiel immer 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 also ein oder mehrere Fully Connected 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 (Flattening). 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 beispielsweise genau die Anzahl von Neuronen besitzt, die der Anzahl der verschiedenen zu erkennenden Klassen entspricht.

Aktivierung durch ReLU Funktion

In einem Convolutional Neural Network werden die Ergebnisse jedes Layers in den allermeisten Fällen durch eine sogenannte ReLU Funktion aktiviert. Diese 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, das heißt 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 Backpropagation immer weiter optimiert. Im Fall von Klassifizierungsproblemen (wenn geklärt werden muss, welches Objekt auf dem Bild zu sehen ist) wird dabei zur Messung des Fehlers die Categorical Cross-Entropy verwendet. Das ist der negative natürliche Logarithmus der berechneten Wahrscheinlichkeit für die Kategorie.

Team WEGOFIVE
team@wegofive.net
No Comments

Post A Comment

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.