(Teil 2) Maschinelles Sehen mit Convolutional Neural Networks

Maschinelles Sehen mit Convolutional Neural Networks (Teil 2)

Oder: Erst mit dem Filter kommen die Bilder

In den letzten fünf Jahren sind moderne Computer-Vision-Systeme an die menschliche Performance herangekommen. Dies liegt vor allem an einer zentralen Methodologie: den DCNNs (Deep Convolutional Neural Networks).

Die grundlegende Idee bei tiefen neuronalen Netzen ist, dass Features nicht mehr händisch entworfen und dann anschließend mit einem statistischen Lernverfahren kombiniert werden müssen. Das ganze System wird “end-to-end” trainiert und lernt in diesem Prozess ganz selbstständig eine für die jeweilige Anwendung passende Hierarchie von aufeinander aufbauenden Features. Ähnlich wie im menschlichen visuellen Kortex werden Schritt für Schritt immer komplexere Mustererkenner nacheinander geschaltet.

Wie ist es nun möglich, eine solche Hierarchie von Features zu lernen? DCNNs bestehen aus mehreren Schichten, in denen sogenannte Filter die Ähnlichkeit der Eingabe zu bestimmten Bildstrukturen bestimmen (wir sehen gleich, wie diese Strukturen aussehen, wenn das Netzwerk sie erlernt). Die individuellen Filter erfassen dabei nur einen sehr kleinen Bildausschnitt, werden allerdings über das gesamte Bild verschoben, um eine Bildeigenschaft überall erkennen zu können. Die Ergebnisse dieser Operationen kann man sich wie eine weitere Reihe von Bildern vorstellen, jeweils eines pro Filter. Große Zahlenwerte in diesem Bild bedeuten eine hohe Ähnlichkeit zum Muster. Diese Zwischenergebnisse werden dann in den nachfolgenden Schichten des Netzwerkes nach dem gleichen Muster weiterverarbeitet.

Erlernt statt definiert

Die verwendeten Filter sind hierbei nicht vom Entwickler definiert, sondern in einem Trainingsprozess vom Netzwerk erlernt. Ein mehrschichtiges Netzwerk ist mathematisch gesehen nur eine Verkettung von einfachen Funktionen. Jede Filter-Schicht überführt die Ausgabe der Schicht zuvor in eine Reihe von Zahlen. Die letzte Schicht des Netzwerks muss nun eine Zahl generieren, die zu unserer Objektklasse “Gesicht” korrespondiert. Für eine Reihe von Bildern, für die wir schon wissen, ob ein Gesicht darauf zu sehen ist, können wir den Fehler der Netzwerkausgabe sogar quantifizieren. “Lernen” bedeutet also: Wir müssen einfach so an den Filterschichten drehen, dass der Netzfehler kleiner wird. Wir müssen also die Netzfunktion (den Fehler) nach den Filter-Parametern ableiten. Wie seit der Grundvorlesung Analysis bekannt, müssen wir für die Ableitung einer verschachtelten Funktion die Kettenregel anwenden. Aber keine Sorge: in der Praxis brauchen wir keinen Stift und Zettel, denn es gibt den Backpropagation Algorithmus, der auf schlaue Art bestimmt, wie die Filter verändert werden müssen, um eine bessere Netzausgabe zu erhalten. Dabei wird jeweils für eine kleine Teilmenge der Bilddaten (ein batch) die Ausgabe des Netzwerkes berechnet und der Fehler, also der Unterschied zu der gewünschten Ausgabe, quantifiziert. Mithilfe der Ableitung werden die Filter nun so verändert, dass sie für diese Teilmenge der Daten einen kleineren Fehler produzieren würden. Dieser Prozess wird nun mit einem neuen batch so oft wiederholt, bis sich die Ausgaben des Netzwerkes kaum noch verändern.

Dieser Optimierungsprozess ist stochastisch – je nachdem in welcher Reihenfolge die Trainingsdaten gezogen werden, verändern sich die Filter in die eine oder andere Richtung. Dies hat einen entscheidenden Vorteil: Das Netzwerk kann nur sehr schwer die Daten auswendig lernen. Bei der Entwicklung von Mustererkennungssystemen ist dieses Overfitting oft ein großes Problem. Die Daten, mit denen man das System trainiert, sind in der Regel nur eine kleine Teilmenge der Daten, auf die man das System anwenden möchte. Wünschenswert ist also, dass das System in der Lage ist, unbekannte Daten zu generalisieren. Der klassische Ansatz gegen Overfitting ist, die Kapazität vom Model zu reduzieren, sodass es nicht in der Lage ist, die Trainingsdaten zu memorieren. Das führt allerdings auch dazu, dass das System das Problem oft nicht mehr ausreichend gut modellieren kann. Dies kann daher zu nicht zufriedenstellenden Ergebnissen führen. Auch Deep Convolutional Neural Networks leiden unter diesem Problem. Neueste Forschungsergebnisse haben allerdings gezeigt, dass diese Netzwerke dank der stochastischen Optimierung und ihrer hierarchischen Struktur auch dann noch generalisieren, wenn sie durch ihre Kapazität schon längst in der Lage wären, die Trainingsdaten auswendig zu lernen. [1]

Revolution – mit Einschränkung

Deep Convolutional Neural Networks haben das Feld des Maschinellen Sehens revolutioniert. Klassifizierungsprobleme, die bis vor einigen Jahren noch als nahezu unlösbar eingeschätzt wurden, können heute von Enthusiasten auf Heimrechnern gelöst werden. Die Netze werden in autonomen Fahrzeugen ebenso verwendet wie bei der Diagnose und Behandlung von Krebserkrankungen. [2] [3]

Des Weiteren sind sie ein wichtiger Baustein im Deep Reinforcement Learning und haben dort dazu geführt, dass zum ersten Mal Machine Learning Systeme die weltbesten Spieler im chinesischen Brettspiel Go besiegen können und in der Lage sind, nur anhand der Bildschirmausgaben zu lernen, Computerspiele wie Space Invaders zu spielen. Deep Convolutional Neural Networks werden nicht nur in der Verarbeitung von Bilddaten eingesetzt, sondern sind essenzielle Komponenten in modernen Übersetzungs- oder Sprachsynthesesystemen. [5] [6]

Alle Erfolge in Ehren: Es sind oft große Datenmengen nötig, um Deep Convolutional Neural Networks zu trainieren. Sie sind hervorragende Werkzeuge, um die Struktur der Welt abzubilden. DCNNs allein können Roboter jedoch nicht intelligent machen. Sie können die Informationsvielfalt auf eine relevante Untermenge reduzieren, um damit robuste Entscheidungen zu fällen. Der Output eines Deep Convolutional Neural Networks ist aber determiniert durch sein Training und dies müsste eigentlich immer weitergehen. Denn würden Sie ein zweites Mal auf den blinzelnden Pokerspieler hereinfallen?

-----------------------------------------------------------------------------------------

Quellenangaben:

[1] arxiv.org: Understanding deep learning requires rethinking generalization
vom 10.11.2016, (abgerufen am 27.03.2017)

[2] nvidia: End-to-End Deep Learning for Self-Driving Cars
vom 17.08.2016, (abgerufen am 27.03.2017)

[3] DeepMind: Applying machine learning to radiotherapy planning for head & neck cancer
vom 30.08.2016, (abgerufen am 27.03.2017)

[4] Andrej Karpathy Blog:  Deep Reinforcement Learning: Pong from Pixels
vom 31.05.2016, (abgerufen am 27.03.2017)

[5] arxiv.org: Fully Character-Level Neural Machine Translation without Explicit Segmentation
vom 10.10.2016, (abgerufen am 27.03.2017)

[6] DeepMind: WaveNet: A Generative Model for Raw Audio
vom 31.05.2016, (abgerufen am 27.03.2017)

Kommentare
Einen Kommentar schreiben
Entschuldigung

Ihr Browser ist leider nicht aktuell genug.
Um diese Webseite zu benutzen, benötigen Sie einen aktuellen Browser
Wir empfehlen einen der folgenden Browser in der aktuellsten Version zu installieren.

Auf iOS Geräten sollte mindestens die Betriebssystem Version iOS 9 installiert sein.

Mozilla Firefox Google Chrome Microsoft Edge Internet Explorer