Convolutional Neural Networks
Convolutional Neural Networks (CNNs) sind eine spezielle Art von neuronalen Netzen, die hauptsächlich für Bilderkennung und -bearbeitung verwendet werden. Die Architektur von CNNs hat Parallelen zum visuellen Kortex des menschlichen Gehirns, denn sie besteht aus mehreren Schichten, die jeweils unterschiedliche Funktionen haben. Diese Funktionen kombiniert führen dazu, dass Objekte im Bild erkannt werden. In diesem Post schauen wir uns CNNs und deren Architektur im Detail an.
Convolutional Neural Networks
CNNs stellen eine besondere Art von künstlichen neuronalen Netzen dar, weil sie speziell für die effiziente Verarbeitung von Bilddaten optimiert wurden. Sie sind inspiriert von der Struktur des menschlichen visuellen Systems und sind in der Lage, visuelle Merkmale zu erkennen bzw. zu lernen. Der Begriff „Convolutional“ bezieht sich dabei auf die mathematische Operation der Faltung (Konvolution), die in solchen Netzen eingesetzt wird. Im Gegensatz zu vollständig vernetzten neuronalen Netzen sind übliche CNNs ausgelegt auf zweidimensionale Bildstrukturen. Denn durch die Aufteilung in mehrere Schichten können CNNs einfache Merkmale zu immer komplexeren Strukturen zusammensetzen. Wegen der komplexeren Architektur und den verschiedenen Schichten gehören CNNs zur Kategorie Deep Learning.
Anwendungsgebiete von CNNs
Es gibt verschiedene Anwendungsgebiete von CNNs: Im Bereich der Bildklassifikation können CNNs unter anderem Objekte in Bildern erkennen oder ganze Bilder klassifizieren (einem Bild wird eine bestimmte Kategorie zugeordnet). Auch im medizinischen Bereich werden sie eingesetzt: Krankheiten sollen anhand von Bildscans wie z.B. MRTs erkannt werden. Die Gesichtserkennung in Digitalkameras ist ein weiteres Beispiel: So kann der Autofokus den Teil des Bildes scharf stellen, in dem ein Gesicht (oder sogar Auge) gefunden wurde. Weitere Anwendungsbereiche sind autonomes Fahren, Erkennung von Texten in Bildern, oder künstlerische Anwendungen wie die sogenannte Stilübertragung.
Aufbau von Convolutional Neural Networks
Die Bauweise eines CNNs ist durch mehrere hintereinander geschaltete Schichten definiert, die jeweils eine bestimmte Aufgabe erfüllen. Nach der Eingangsschicht („input layer“) finden sich Faltungsschichten („convolutional layers“), denen in der Regel eine Aktivierungsfunktion wie die Rectified Linear Unit (kurz ReLU) folgt. Danach wird oft eine Pooling-Schicht genutzt, die für Dimensionsreduktion verantwortlich ist und somit die Wahrscheinlichkeit für Overfitting mindern kann. Dieses Schema kann mehrfach hintereinander geschaltet werden. Schließlich geht das Netz in ein oder mehrere vollständig vernetzte Layer („fully connected layers“) über, die zur Ausgangsschicht („output layer“) führen und das endgültige Resultat liefern.
Folgende Grafik ist aus dem Paper von LeCun et al. (1989): Backpropagation Applied to Handwritten Zip Code Recognition
Eingangsschicht
Die Eingangsschicht eines CNN nimmt die Bilddaten auf. Für RGB-Bilddateien ist dies eine dreidimensionale Matrix, die die Höhe, Breite und Farbkanäle des Bildes abbildet. Die Eingangsschicht bereitet lediglich die Daten für die Verarbeitung durch die nachfolgenden Schichten auf.
Zwischenschichten
Die Zwischenschichten bilden den Kern des CNN, in dem relevante Merkmale aus den Bilddaten extrahiert und anschließend verarbeitet werden. Sie bestehen normalerweise aus Convolutional Layers, Pooling Layers und Fully Connected Layers.
Convolutional Layers
Ein Convolutional Layer verwendet Filter, die über die Bilddaten bzw. den vorherigen Layer „gleiten“, um grundlegende Muster zu erkennen (z.B. horizontale Linien). Ein solcher Filter ist in der Regel recht klein: So wird häufig eine 3×3 oder 5×5 Pixel-Matrix genutzt). Wenn ein Filter über das Bild gleitet, wird er mit dem darunter liegenden Teil des Bildes verrechnet, resultierend in einer sogenannten „Feature Map“.
Die Idee der Filter in CNNs findet ihre Wurzeln in der Bildverarbeitung. Filter wurden schon lange vor der Entwicklung von CNNs zur Bildmanipulation verwendet. Wenn du mal GIMP oder Adobe Photoshop genutzt hast, dann kennst du wahrscheinlich die verschiedenen Filter, die man auf das Bild anwenden kann. Im Prinzip reden wir hier genau von solchen Filtern. Beispiele sind Gaußsche Unschärfe, scharfe Kanten, oder Farben invertieren.
Hier siehst du ein kleines Beispiel, welches ich in Excel gebastelt habe. Das Ausgangsbild ist nur in schwarz-weiß und die Helligkeit ist definiert durch einen Wert zwischen 0 und 255, wobei 0 schwarz und 255 weiß ist. Über jede Zelle (stellvertretend für einen Pixel) wird nun die 3×3-Matrix gelegt und die Konvolution durchgeführt. Das Resultat ist das Bild auf der rechten Seite, wobei Werte unter 0 auf 0 gesetzt wurden.
Pooling Layers
Pooling Layers folgen üblicherweise auf die Convolutional Layers und ihre Hauptaufgabe besteht darin, die Dimensionen der Feature Maps zu reduzieren.. Unterm Strich werden sie eingesetzt, um Performance zu erhöhen (denn kleinere Layer bedeuten weniger Rechenschritte), und um Overfitting zu verhindern. Es gibt mehrere Arten von Pooling, darunter Max Pooling (der größte Wert wird in einem bestimmten Bereich ausgewählt) und Average Pooling (der Durchschnittswert wird berechnet).
Fully Connected Layers
Fully Connected Layers ähneln in ihrer Funktion denen in traditionellen neuronalen Netzen, denn jedes Neuron ist mit allen Ausgaben der vorherigen Schicht verbunden, sodass die Features aus den vorigen Layern kombiniert werden können. Hier werden also grundlegende Merkmale miteinander verknüpft und so können wesentlich komplexere Muster erkannt werden. Die Werte dieser Layer werden anschließend zum finalen Output Layer geleitet.
Ausgangsschicht
Die Ausgangsschicht, welche die letzte Schicht in einem CNN darstellt, produziert das endgültige Ergebnis. Dieses kann je nach Anwendung variieren. So kann das Resultat eine Kategorie sein (bei einer Klassifikation) oder ein kontinuierlicher Wert (Regression). Hier spielen auch die Aktivierungsfunktionen eine wichtige Rolle.
Aktivierungsfunktionen
Aktivierungsfunktionen sind ein wichtiger Bestandteil von neuronalen Netzen. In CNNs werden sie nach den Convolutional und Fully Connected Layers angewendet, wo sie das Errechnen komplexer Zusammenhänge ermöglichen – eben weil die Übergänge zwischen den Schichten nicht nur linear sind. Die am häufigsten verwendete Funktion in CNNs ist Rectified Linear Unit (ReLU), die alle negativen Werte auf null setzt. Andere Aktivierungsfunktionen sind die Sigmoid-Funktion (resultiert in einem Wert zwischen 0 und 1, gut für Wahrscheinlichkeiten als Outputs), die Tanh-Funktion (Output ist zwischen -1 und 1) und die Softmax-Funktion (gibt eine Verteilung von Wahrscheinlichkeiten über mehrere Klassen zurück, gut für Klassifizierung).
Folgende Grafik ist von ResearchGate (Machine Learning for Materials Developments in Metals Additive Manufacturing)
Besondere CNN-Architekturen und ihre Anwendungen
LeNet-5
LeNet-5 war quasi der Startschuss für moderne CNNs. Es wurde von LeCun et al. (1998) speziell für die Erkennung von handgeschriebenen Ziffern entwickelt. Ein typisches Einstiegsprojekt mit CNNs nutzt den MNIST-Datensatz, welcher viele solcher handgeschriebenen Ziffern beinhaltet. Die Schichtstruktur war damals innovativ und somit legte LeNet-5 den Grundstein für spätere CNN-Architekturen.
AlexNet
AlexNet, welches von Alex Krizhevsky, Ilya Sutskever und Geoff Hinton entwickelt wurde, gewann 2012 die ImageNet Challenge und sorgte dadurch für mehr Aufmerksamkeit für CNNs. Durch die Nutzung von ReLU als Aktivierungsfunktion sowie GPU-Beschleunigung konnte AlexNet ein für damalige Verhältnisse sehr großes Modell trainieren. Das Modell performte sehr gut in der Bildklassifikation.
GoogLeNet
GoogLeNet, später Inception v1, kam 2014 mit einer neuartigen Struktur. Es verwendet sogenannte Inception-Module, die es dem Netzwerk offen lassen, zwischen mehreren Filtergrößen in jedem Block zu wählen. Dieser Ansatz ermöglichte es, tiefer und breiter zu gehen, ohne die Rechenlast zu erhöhen. Spätere Versionen der Inception-Architektur verbesserten diese Ideen weiter und führten zu effizienteren Modellen.
ResNet
ResNet oder Residual Network von Kaiming He et al. (2015) ermöglicht es, tiefe neuronale Netze mit Hilfe von Residual-Blöcken und Skip-Verbindungen zu konstruieren. Diese Technik ermöglicht es dem Netzwerk, Schichten zu überspringen, wodurch sehr tiefe Modelle trainiert werden können. Ein großer Vorteil der Architektur ist, dass das Problem des verschwindenen Gradienten (engl. „vanishing gradient problem“, kurz VGP) gelöst wird.
Aktuelle Trends
Aktuelle Trends in der Forschung zu CNNs umfassen folgende Themen:
- Effizienz: Es wird versucht, Architekturen zu finden, die mit weniger Parametern auskommen, schneller zu trainieren sind oder weniger Speicherplatz benötigen
- Interpretierbarkeit: Methoden werden entwickelt, welche CNNs visualisieren können, um solche Modelle besser zu verstehen
- Robustheit: Auch CNNs können gehackt bzw. getäuscht werden (siehe „adversarial attacks“). Es wird geforscht, wie man die Modelle gegen solche Methoden robuster machen kann
Fazit
Convolutional Neural Networks sind die neuronalen Netze, die man für Bilderkennung bzw. Computer Vision verwendet. Durch ihre besondere Struktur, die verschiedene Schichttypen (Convolutional, Pooling, Fully Connected Layers) kombiniert, ermöglichen sie das Erkennen von grundlegenden Merkmalen und komplexeren Mustern. Dadurch können sie in verschiedenen Bereichen eingesetzt werden, wie z.B. der Bildklassifizierung, in der Medizin, oder für autonomes Fahren. Es entstehen immer wieder neue Ansätze für Architekturen, um bestimmte Probleme zu lösen oder die Modelle robuster und effizienter zu machen. Man kann also gespannt sein, welche Innovation in diesem Bereich als nächstes kommt.