KAPITEL 1
Werkzeuge und Techniken
In diesem Kapitel werfen wir einen Blick auf die gängigen Werkzeuge und Techniken beim Deep Learning. Dieses Kapitel eignet sich gut, um sich einen Überblick über die Grundlagen zu verschaffen und sie bei Bedarf aufzufrischen.
Zu Beginn schauen wir uns verschiedene Arten neuronaler Netze an, die Ihnen im Verlauf dieses Buchs begegnen werden. Die meisten Rezepte, die wir Ihnen später vorstellen, sind sehr praxisorientiert und behandeln daher nur flüchtig, wie neuronale Netze aufgebaut sind.
Dann besprechen wir, woher wir unsere Daten bekommen. Technologie-Riesen wie Facebook und Google haben Zugang zu gigantischen Datenmengen für ihre Deep-Learning-Forschung, aber auch für uns gibt es genügend zugängliche Daten im Internet, um interessante Projekte durchzuführen. Die Rezepte in diesem Buch verwenden Daten aus einer Vielzahl unterschiedlicher Quellen.
Im nächsten Abschnitt geht es um die Vorverarbeitung von Daten – ein sehr wichtiger Bereich, der allerdings oft übersehen wird. Selbst wenn Sie die richtigen Einstellungen für das neuronale Netz vorgenommen haben und zusätzlich eine gute Datenqualität vorliegt, müssen Sie trotzdem sicherstellen, dass Sie dem Netzwerk Ihre Daten in einer Form zuführen, die für das Netzwerk so geeignet wie möglich ist. Denn Sie wollen es dem Netzwerk so einfach wie möglich machen, die Dinge zu lernen, die es lernen soll, ohne dass andere, irrelevante Informationen in den Daten das Netzwerk dabei stören.
1.1Arten neuronaler Netze
In diesem Kapitel und auch über das gesamte Buch hinweg sprechen wir über Netzwerke und Modelle. Ein Netzwerk (oder auch neuronales Netz) besteht aus einer gewissen Anzahl verbundener Schichten. Man speist Daten auf der einen Seite ein, und die verarbeiteten Daten kommen auf der anderen Seite heraus. Jede Schicht vollzieht dabei eine mathematische Operation an den durchfließenden Daten und besitzt eine Reihe veränderlicher Parameter, die das genaue Verhalten der Schicht bestimmen. In diesem Zusammenhang beziehen sich Daten auf einen Tensor, einen Vektor mit mehreren Dimensionen (üblicherweise zwei oder drei).
Eine vollständige Erläuterung der verschiedenen Arten von Schichten und der Mathematik hinter deren Operationen würde den Rahmen dieses Buchs sprengen. Die einfachste Art von Schicht, die vollständig verbundene Schicht, nimmt ihre Eingabe als Matrix, multipliziert diese mit einer weiteren Matrix, den sogenannten Gewichten, und addiert eine dritte Matrix, den sogenannten Bias. Auf jede Schicht folgt eine Aktivierungsfunktion, eine mathematische Funktion, die die Ausgabe einer Schicht auf die Eingabe der nächsten Schicht abbildet. Zum Beispiel gibt es eine einfache Aktivierungsfunktion namens ReLU, die alle positiven Werte weitergibt, aber alle negativen Werte auf null setzt.
Genau genommen bezieht sich der Begriff Netzwerk auf die Architektur, die Art und Weise, wie die verschiedenen Schichten miteinander verbunden sind, während ein Modell das Netzwerk und zusätzlich alle Variablen beschreibt, die das Verhalten des Modells bestimmen. Das Trainieren eines Modells verändert diese Variablen, um die Vorhersagen besser an die erwarteten Ausgaben anzupassen. In der Praxis werden diese beiden Begriffe jedoch oft synonym verwendet.
Die Begriffe »Deep Learning« und »neuronale Netze« umfassen tatsächlich eine Vielzahl von Modellen. Die meisten dieser Netzwerke haben gewisse Gemeinsamkeiten (beispielsweise verwenden beinahe alle Klassifikationsnetzwerke eine bestimmte Verlustfunktion). Obwohl die Anwendungsbereiche dieser Modelle sehr vielfältig sind, lassen sich fast alle Modelle in gewisse Kategorien unterteilen. Manche Modelle verwenden Elemente mehrerer Kategorien: Beispielsweise haben viele Netzwerke für Bildklassifikationen am Ende einen Bereich mit vollständig verbundenen Schichten, um die eigentliche Klassifikation durchzuführen.
Vollständig verbundene neuronale Netze
Vollständig verbundene neuronale Netze waren die erste Art von Netzwerken, die erforscht wurden, und beherrschten das Forschungsinteresse bis in die späten 1980er-Jahre. In einem vollständig verbundenen Netz wird jeder Ausgabewert als gewichtete Summe aller Eingabewerte berechnet. Aus diesem Verhalten ergibt sich der Begriff »vollständig verbunden«: Jeder Ausgabewert ist mit jedem Eingabewert verbunden. Als Formel lässt sich das wie folgt schreiben:
yi = ΣjWijxj
Der Kürze halber stellen die meisten Forschungsartikel ein vollständig verbundenes Netz in Matrixschreibweise dar. Dafür multiplizieren wir den Eingabevektor mit der Gewichtsmatrix W, um den Ausgabevektor zu erhalten:
y = Wx
Da die Matrixmultiplikation eine lineare Rechenoperation ist, wäre ein Netzwerk, das ausschließlich Matrixmultiplikationen enthält, auf das Erlernen linearer Zusammenhänge beschränkt. Um unser Netzwerk jedoch aussagekräftiger zu machen, folgt auf die Matrixmultiplikation eine nicht-lineare Aktivierungsfunktion. Jede differenzierbare Funktion kann als Aktivierungsfunktion dienen, aber es gibt einige, die man sehr häufig antrifft. Der Tangens hyperbolicus, oder tanh, war bis vor Kurzem die am häufigsten verwendete Art von Aktivierungsfunktion und kann noch immer in einigen Modellen gefunden werden:
Das Problem der tanh-Funktion besteht darin, dass sie bei Eingabewerten, die weit von null entfernt sind, sehr »flach« ist. Das wiederum führt zu einem sehr geringen Gradienten, wodurch das Netzwerk sehr lange zum Lernen braucht. Seit Neuestem haben andere Aktivierungsfunktionen an Beliebtheit gewonnen. Eine der am häufigsten verwendeten Aktivierungsfunktionen ist die sogenannte Rectified Linear Unit, ReLU genannt:
Außerdem verwenden viele neuronale Netze eine sigmoide Aktivierungsfunktion in der letzten Schicht des Netzwerks. Diese Art von Funktion gibt immer einen Wert zwischen 0 und 1 aus, wodurch die Ausgabewerte als Wahrscheinlichkeiten behandelt werden können:
Eine Schicht des Netzwerks entspricht einer Matrixmultiplikation gefolgt von einer Aktivierungsfunktion. Netzwerke können zum Teil aus über 100 Schichten bestehen, wobei die Anzahl der vollständig verbundenen Schichten in der Regel auf eine Handvoll beschränkt ist. Beim Lösen von Klassifikationsaufgaben (»Welche Katzenrasse ist auf diesem Bild zu sehen?«) wird die letzte Schicht als Klassifikationsschicht bezeichnet. Dabei hat diese stets so viele Ausgabewerte, wie es Kategorien zur Auswahl gibt.
Die Schichten in der Mitte des Netzwerks werden verborgene Schichten genannt, und die einzelnen Neuronen (Einheiten) einer verborgenen Schicht werden manchmal als verborgene Neuronen bezeichnet. Der Begriff »verborgen« rührt daher, dass diese Werte nicht direkt von außen als Ein- oder Ausgabewerte unseres Modells sichtbar sind. Die Anzahl der Ausgabewerte in diesen Schichten hängt ganz vom Modell ab:
Es existieren zwar ein paar Faustregeln dazu, wie man Anzahl und Größe der verborgenen Schichten wählen sollte, jedoch gibt es generell keine bessere Verfahrensweise für die Auswahl der optimalen Konfiguration, als auszuprobieren.
Konvolutionsnetze
Zu Beginn wurde in der Forschung versucht, eine Vielzahl von Problemen mit vollständig verbundenen neuronalen Netzen zu lösen. Aber wenn wir mit Bildern als Eingabe arbeiten, sind vollständig verbundene Netzwerke nicht die beste Wahl. Bilder sind häufig sehr groß: Ein einzelnes Bild mit 256 × 256 Pixeln (eine gängige Auflösung für Klassifikationsaufgaben) hat 256 × 256 × 3 Eingabewerte (drei Farben für jeden Pixel). Wenn nun dieses Modell eine einzige verborgene Schicht mit 1.000 verborgenen Neuronen hat, besitzt diese Schicht allein fast 200 Millionen Parameter (trainierbare Werte)! Da Modelle zur Bilderkennung etliche Schichten benötigen, um bei der Klassifikation gut zu funktionieren, würden wir Milliarden von Parametern erhalten, wenn wir nur vollständig verbundene Schichten verwendeten.
Bei so vielen Parametern wäre es fast unmöglich, ein Overfitting unseres Modells zu vermeiden (Overfitting wird im nächsten Kapitel ausführlich behandelt; es beschreibt die Situation, in der ein Netzwerk lediglich die Trainingsdaten auswendig lernt, anstatt sinnvoll zu verallgemeinern). Konvolutionsnetze (Convolutional Neural Networks, CNNs) ermöglichen uns, Bildklassifikatoren mit übermenschlicher Performance mit weitaus weniger Parametern zu trainieren. CN...