Kapitel 4. Die wichtigsten Architekturen von Deep Networks
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Die Mutterkunst ist die Architektur. Ohne eine eigene Architektur haben wir keine Seele unserer eigenen Zivilisation.
Frank Lloyd Wright
Nachdem wir nun einige Komponenten von tiefen Netzen kennengelernt haben, wollen wir einen Blick auf die vier großen Architekturen von tiefen Netzen werfen und darauf, wie wir die kleineren Netze nutzen, um sie aufzubauen. Zu Beginn des Buches haben wir vier große Netzwerkarchitekturen vorgestellt:
- Unüberwachte vortrainierte Netzwerke (UPNs)
- Faltungsneuronale Netze (CNNs)
- Rekurrente neuronale Netze
- Rekursive neuronale Netze
In diesem Kapitel gehen wir auf jede dieser Architekturen näher ein. In Kapitel 2 haben wir dir ein tieferes Verständnis für die Algorithmen und die Mathematik vermittelt, die neuronalen Netzen im Allgemeinen zugrunde liegen. In diesem Kapitel konzentrieren wir uns mehr auf die übergeordnete Architektur der verschiedenen tiefen Netze, um ein Verständnis für die Anwendung dieser Netze in der Praxis zu entwickeln.
Einige Netzwerke werden wir etwas ausführlicher behandeln als andere, aber wir werden uns hauptsächlich auf die beiden Hauptarchitekturen konzentrieren, die du in der freien Wildbahn sehen wirst: CNNs für die Bildmodellierung und Long Short-Term Memory (LSTM) Netzwerke (rekurrente Netzwerke) für die Sequenzmodellierung.
Unüberwachte vortrainierte Netzwerke
Unter behandeln wir drei spezifische Architekturen:
- Autoencoder
- Tiefe Belief-Netze (DBNs)
- Generative Adversarial Networks (GANs)
Ein Hinweis zur Rolle von Autoencodern
Wie bereits in Kapitel 3 beschrieben, sind Autocoder grundlegende Strukturen in tiefen Netzen, weil sie oft als Teil größerer Netze verwendet werden. Wie viele andere Netze erfüllen sie diese Funktion und werden dann auch als eigenständiges Netz verwendet.
Da wir uns bereits eingehend mit Autoencodern beschäftigt haben, wollen wir uns nun DBNs und GANs genauer ansehen.
Tiefe Belief-Netzwerke
DBNs bestehen aus Schichten von Restricted Boltzmann Machines (RBMs) für die Pre-Train-Phase und einem Feed-Forward-Netzwerk für die Fine-Tune-Phase. Abbildung 4-1 zeigt die Netzwerkarchitektur eines DBNs.
In den folgenden Abschnitten erklären wir, wie DBNs die Vorteile von RBMs nutzen, um Trainingsdaten besser zu modellieren.
Merkmalsextraktion mit RBM-Schichten
Wir verwenden RBMs, um aus den rohen Eingangsvektoren höherwertige Merkmale zu extrahieren. Dazu müssen wir die Zustände und Gewichte der versteckten Einheiten so einstellen, dass das RBM, wenn wir ihm einen Eingabedatensatz zeigen und es auffordern, den Datensatz zu rekonstruieren, etwas erzeugt, das dem ursprünglichen Eingabevektor ziemlich nahe kommt. Hinton spricht von diesem Effekt, wenn er sagt, dass Maschinen "von Daten träumen".
Der grundlegende Zweck von RBMs im Kontext von Deep Learning und DBNs ist es, diese höherstufigen Merkmale eines Datensatzes in einer unbeaufsichtigten Trainingsweise zu lernen. Es wurde herausgefunden, dass wir bessere neuronale Netze trainieren können, indem wir RBMs schrittweise höherwertige Merkmale lernen lassen, indem wir die gelernten Merkmale aus einer niedrigeren RBM-Pretrain-Schicht als Input für eine höherwertige RBM-Pretrain-Schicht verwenden.
Merkmale höherer Ordnung automatisch lernen
Das unüberwachte Lernen dieser Merkmale wird als Pretrain-Phase von DBNs bezeichnet. Jede versteckte Schicht des RBM in der Pretrain-Phase lernt zunehmend komplexere Merkmale aus der Verteilung der Daten. Diese Merkmale höherer Ordnung werden nach und nach auf nichtlineare Weise kombiniert, um ein elegantes automatisches Feature Engineering durchzuführen.
Um die Konstruktion von Merkmalen mit Schichten von RRBMs visuell zu verstehen, sieh dir die Abbildungen 4-2, 4-3 und 4-4 an, die den Verlauf der Aktivierungsrender auf einem RBM beim Lernen von MNIST-Ziffern zeigen.
In Kapitel 6 wird ausführlicher beschrieben, wie diese Renderings erzeugt werden. Wir können sehen, wie eine Schicht des RBM beim Training Fragmente von Ziffern extrahiert. Diese Merkmale werden dann in übergeordneten Schichten kombiniert, um immer komplexere (und nichtlineare) Merkmale zu bilden.
Während diese Rohdaten im generativen Modellierungsprozess mit jeder Schicht der RBM modelliert werden, kann das System immer mehr Merkmale aus den rohen Eingabedaten extrahieren, die durch unseren Basis-Eingangsvektorisierungsprozess erzeugt wurden. Diese Merkmale bewegen sich in einer Richtung durch die Schichten der RBMs und erzeugen auf der obersten Schicht komplexere Merkmale.
Initialisierung des Feed-Forward-Netzwerks
Wir verwenden diese Merkmalsschichten dann als Anfangsgewichte in einem traditionellen Backpropagation-gesteuerten Feed-Forward-Neuronalnetz.
Diese Initialisierungswerte helfen dem Trainingsalgorithmus, die Parameter des traditionellen neuronalen Netzes in bessere Regionen des Parametersuchraums zu lenken. Diese Phase wird als Feinabstimmungsphase von DBNs bezeichnet.
Feinabstimmung eines DBN mit einem mehrschichtigen neuronalen Netz mit Vorwärtskopplung
In der Feinabstimmungsphase eines DBN verwenden wir normale Backpropagation mit einer niedrigeren Lernrate, um eine "sanfte" Backpropagation durchzuführen. Wir betrachten die Pretrainingsphase als eine allgemeine, unbeaufsichtigte Suche im Parameterraum auf der Grundlage von Rohdaten. Im Gegensatz dazu geht es in der Feinabstimmungsphase darum, das Netz und seine Merkmale für die Aufgabe zu spezialisieren, die uns tatsächlich interessiert (z. B. Klassifizierung).
Sanfte Backpropagation
In der Pretrain-Phase mit RBM werden Merkmale höherer Ordnung aus den Daten gelernt, die wir als gute Ausgangswerte für unser Feedforward-Netzwerk verwenden. Wir wollen diese Gewichte noch ein wenig anpassen, um gute Werte für unser endgültiges neuronales Netzmodell zu finden.
Die Ausgabeschicht
Das normale Ziel eines tiefen Netzwerks ist es, eine Reihe von Merkmalen zu lernen. Die erste Schicht eines tiefen Netzwerks lernt, wie man den ursprünglichen Datensatz rekonstruiert. Die nachfolgenden Schichten lernen, wie sie die Wahrscheinlichkeitsverteilungen der Aktivierungen der vorherigen Schicht rekonstruieren können. Die Ausgabeschicht eines neuronalen Netzes ist mit dem Gesamtziel verbunden. In der Regel handelt es sich um eine logistische Regression, wobei die Anzahl der Merkmale der Anzahl der Eingänge der letzten Schicht und die Anzahl der Ausgänge der Anzahl der Klassen entspricht.
Aktueller Stand der DBNs
Wir behandeln DBNs nicht so ausführlich wie die anderen Netzwerkarchitekturen in diesem Buch. Das liegt daran, dass die CNNs den Bereich der Bildmodellierung weitgehend übernommen haben und wir uns daher entschieden haben, diese Architektur stärker zu betonen, wie du im nächsten Abschnitt sehen wirst.
Die Rolle von DBNs beim Aufstieg des Deep Learning
Obwohl wir DBNs in diesem Buch nicht so sehr betonen, spielte dieses Netzwerk eine nicht unerhebliche Rolle beim Aufstieg des Deep Learning. Das Team von Geoff Hinton an der University of Toronto hat über einen langen Zeitraum hinweg die Techniken im Bereich der Bildmodellierung vorangetrieben und dabei große Fortschritte erzielt. Wir hielten es für wichtig, auf die Rolle hinzuweisen, die DBNs bei der Entwicklung von Deep Networks gespielt haben.
Generative adversarische Netze
Ein nennenswertes Netzwerk ist das GAN.1 Es hat sich gezeigt, dass GANs sehr gut in der Lage sind, neue Bilder auf der Grundlage anderer Trainingsbilder zu synthetisieren. Wir können dieses Konzept erweitern, um andere Bereiche zu modellieren, z. B. die folgenden:
GANs sind ein Beispiel für ein Netzwerk, das unüberwachtes Lernen nutzt, um zwei Modelle parallel zu trainieren. Ein wichtiger Aspekt von GANs (und generativen Modellen im Allgemeinen) ist, dass sie eine Parameteranzahl verwenden, die im Verhältnis zur Datenmenge, mit der wir das Netz trainieren, deutlich kleiner ist als normal. Das Netzwerk ist gezwungen, die Trainingsdaten effizient zu repräsentieren, wodurch es effektiver Daten erzeugen kann, die den Trainingsdaten ähneln.
Training generativer Modelle, unüberwachtes Lernen und GANs
Wenn über einen großen Bestand an Trainingsbildern verfügt (z. B. den ImageNet-Datensatz ), können wir ein generatives neuronales Netzwerk aufbauen, das Bilder ausgibt (im Gegensatz zu Klassifizierungen). Wir würden diese generierten Bilder als Stichproben des Modells betrachten. Das generative Modell in GANs erzeugt solche Bilder, während ein sekundäres "Diskriminator"-Netzwerk versucht, die erzeugten Bilder zu klassifizieren.
Dieses sekundäre Diskriminatornetzwerk versucht, die Ausgabebilder als echt oder synthetisch zu klassifizieren. Beim Training von GANs wollen wir die Parameter so aktualisieren, dass das Netz auf der Grundlage der Trainingsdaten glaubwürdigere Ausgabebilder erzeugt. Das Ziel ist es, die Bilder so realistisch zu gestalten, dass das Diskriminatornetzwerk so weit getäuscht wird, dass es den Unterschied zwischen den echten und den synthetischen Eingabedaten nicht mehr erkennen kann.
Ein Beispiel für die effiziente Modelldarstellung in GANs ist, dass sie in der Regel etwa 100 Millionen Parameter haben, wenn sie einen Datensatz wie das ImageNet modellieren. Im Laufe des Trainings werden aus einem Eingabedatensatz wie dem ImageNet (200 GB) fast 100 MB an Parametern. Bei diesem Lernprozess wird versucht, den effizientesten Weg zu finden, um die Merkmale in den Daten darzustellen, z. B. ähnliche Gruppen von Pixeln, Kanten und andere Muster (wie wir in "Convolutional Neural Networks (CNNs)" noch genauer sehen werden ).
Das Diskriminatorennetzwerk
Wenn Bilder modelliert, ist das Unterscheidungsnetzwerk normalerweise ein Standard-CNN. Die Verwendung eines zweiten neuronalen Netzes als Diskriminatornetz ermöglicht es dem GAN, beide Netze parallel und unbeaufsichtigt zu trainieren. Diese Unterscheidungsnetzwerke nehmen Bilder als Eingabe und geben dann eine Klassifizierung aus.
Die Steigung der Ausgabe des Diskriminatornetzes in Bezug auf die synthetischen Eingabedaten zeigt an, wie man kleine Änderungen an den synthetischen Daten vornehmen kann, um sie realistischer zu machen.
Das generative Netzwerk
Das generative Netz in GANs generiert Daten (oder Bilder) mit einer speziellen Art von Schicht, die als dekonvolutionäre Schicht bezeichnet wird (lies mehr über dekonvolutionäre Netze und Schichten in der folgenden Sidebar).
Während des Trainings verwenden wir Backpropagation für beide Netze, um die Parameter des generierenden Netzes zu aktualisieren und realistischere Bilder zu erzeugen. Ziel ist es, die Parameter des generierenden Netzes so weit zu aktualisieren, dass das diskriminierende Netz durch das generierende Netz ausreichend "getäuscht" wird, weil die Ausgabe im Vergleich zu den echten Bildern der Trainingsdaten so realistisch ist.
Aufbau generativer Modelle und Deep Convolutional Generative Adversarial Networks
Eine Variante von GANs ist das Deep Convolutional Generative Adversarial Network (DCGAN). Abbildung 4-6 zeigt Bilder von Schlafzimmern, die von einem DCGAN erzeugt wurden.
Dieses Netzwerk nimmt Zufallszahlen (aus einer gleichmäßigen Verteilung) und erzeugt ein Bild aus dem Netzwerkmodell als Ausgabe. Je nachdem, wie sich die eingegebenen Zufallszahlen ändern, erzeugt das DCGAN verschiedene Arten von Bildern.
Bedingte GANs
Bedingte GANs5 können auch Informationen zu Klassenlabels verwenden, um Daten einer bestimmten Klasse bedingt zu erzeugen.
Vergleich von GANs und variativen Autocodierern
GANs konzentrieren sich darauf, die Trainingsdatensätze in die Modellverteilung oder die reale Verteilung einzuordnen. Wenn das Diskriminatormodell eine Vorhersage macht, bei der es einen Unterschied zwischen den beiden Verteilungen gibt, passt das Generatornetzwerk seine Parameter an. Schließlich konvergiert der Generator zu Parametern, die die reale Datenverteilung wiedergeben, und der Diskriminator kann den Unterschied nicht mehr erkennen.
Mit Variationalen Autokodierern (VAEs) setzen wir dasselbe Problem mit probabilistischen grafischen Modellen um, um den Input auf unüberwachte Weise zu rekonstruieren, wie bereits in Kapitel 3 beschrieben. VAEs versuchen, eine untere Schranke für die logarithmische Wahrscheinlichkeit der Daten zu maximieren, damit die erzeugten Bilder immer realer aussehen.
Ein weiterer interessanter Unterschied zwischen GANs und VAEs besteht darin, wie die Bilder erzeugt werden. Bei einfachen GANs wird das Bild mit einem beliebigen Code erzeugt und wir haben keine Möglichkeit, ein Bild mit bestimmten Merkmalen zu erzeugen. VAEs hingegen haben ein bestimmtes Kodierungs-/Dekodierungsschema, mit dem wir das erzeugte Bild mit dem Originalbild vergleichen können. Das hat den Nebeneffekt, dass wir für bestimmte Arten von Bildern kodieren können, die erzeugt werden sollen.
Probleme mit generativen Modellen
Manchmal mit generierten Bildern erhalten wir auch eine andere Art von Rauschen im generierten Ausgangsbild. Der Nachteil von VAE-generierten Bildern ist, dass die Bilder aufgrund der Art der Generierung manchmal etwas unscharf sind. GAN-generierte Bilder neigen dazu, den Stil der Eingabedaten zu erfassen, setzen die Szene aber manchmal nicht kohärent zusammen (z. B. ein Bild von einem Hund, aber der Hund sieht nicht ganz richtig aus).
Faltungsneuronale Netze (CNNs)
Das Ziel eines CNN ist es, über Faltungen Merkmale höherer Ordnung in den Daten zu lernen. Sie eignen sich gut für die Objekterkennung mit Bildern und sind immer wieder Spitzenreiter bei Wettbewerben zur Bildklassifizierung. Sie können Gesichter, Personen, Straßenschilder, Schnabeltiere und viele andere Aspekte von visuellen Daten erkennen. CNNs überschneiden sich mit der Textanalyse durch optische Zeichenerkennung, aber sie sind auch nützlich, wenn sie Wörter6 als diskrete Texteinheiten. Sie sind auch gut bei der Analyse von Geräuschen.
Die Effizienz von CNNs bei der Bilderkennung ist einer der Hauptgründe, warum die Welt die Leistungsfähigkeit von Deep Learning anerkennt. Wie Abbildung 4-7 zeigt, sind CNNs gut darin, positions- und (in gewissem Maße) drehungsinvariante Merkmale aus Rohbilddaten zu erstellen.
CNNs ermöglichen große Fortschritte im Bereich des maschinellen Sehens, was offensichtliche Anwendungen für selbstfahrende Autos, Robotik, Drohnen und die Behandlung von Sehbehinderten mit sich bringt.
CNNs und Struktur in Daten
CNNs sind am nützlichsten, wenn die Eingabedaten eine gewisse Struktur aufweisen. Ein Beispiel dafür wäre, wie Bilder und Audiodaten, die eine bestimmte Reihe von sich wiederholenden Mustern und Eingabewerten nebeneinander aufweisen, räumlich miteinander verbunden sind. Umgekehrt haben die aus einem relationalen Datenbankmanagementsystem (RDBMS) exportierten spaltenförmigen Daten in der Regel keine strukturellen räumlichen Beziehungen. Spalten, die nebeneinander stehen, werden in der aus der Datenbank exportierten materialisierten Ansicht einfach so dargestellt.
CNNs wurden auch für andere Aufgaben wie die Übersetzung/Generierung natürlicher Sprache7 und Stimmungsanalyse.8 Eine Faltung ist ein leistungsfähiges Konzept, das dabei hilft, einen robusteren Merkmalsraum auf der Grundlage eines Signals aufzubauen.
Biologische Inspiration
Das biologische Vorbild für CNNs ist der visuelle Kortex von Tieren.9 Die Zellen im visuellen Kortex sind auf kleine Teilbereiche des Inputs empfindlich. Wir nennen dies das Gesichtsfeld (oder rezeptive Feld). Diese kleineren Teilregionen werden zusammengelegt, um das gesamte Gesichtsfeld abzudecken. Die Zellen sind gut geeignet, um die starke räumliche Korrelation auszunutzen, die in den Arten von Bildern vorkommt, die unser Gehirn verarbeitet, und fungieren als lokale Filter für den Eingangsbereich. Es gibt zwei Klassen von Zellen in dieser Region des Gehirns. Die einfachen Zellen werden aktiviert, wenn sie kantenähnliche Muster erkennen, und die komplexeren Zellen werden aktiviert, wenn sie ein größeres rezeptives Feld haben und nicht von der Position des Musters abhängen.
Intuition
Feed-forward mehrschichtige neuronale Netze nehmen die Eingaben als einen eindimensionalen Vektor auf und wandeln die Daten mit einer oder mehreren versteckten Schichten um (voll vernetzt). Das Netz liefert dann ein Ergebnis aus der Ausgabeschicht. Das Problem bei traditionellen mehrschichtigen neuronalen Netzen und Bilddaten ist, dass diese Netze nicht gut mit Bilddaten als Eingabe skalieren. Ein Beispiel ist die Modellierung des CIFAR-10-Datensatzes (siehe nächste Seite). Die zu trainierenden Bilder sind nur 32 Pixel breit und 32 Pixel hoch und enthalten 3 Kanäle mit RGB-Informationen. Dadurch entstehen jedoch 3.072 Gewichte pro Neuron in der ersten versteckten Schicht, und wir werden wahrscheinlich mehr als ein Neuron in dieser versteckten Schicht benötigen. In vielen Fällen werden wir mehrere versteckte Schichten in unserem mehrschichtigen neuronalen Netzwerk benötigen, wodurch sich auch die Gewichte vervielfachen.
Ein normales Bild kann leicht 300 Pixel in der Breite und 300 Pixel in der Höhe mit 3 Kanälen für RGB-Informationen haben. Das würde 270.000 Verbindungsgewichte pro verstecktem Neuron ergeben. Das zeigt, wie schnell ein voll vernetztes mehrschichtiges Netz eine riesige Anzahl von Verbindungen erzeugt, wenn es Bilddaten modelliert. Die Struktur der Bilddaten ermöglicht es uns, die Architektur eines neuronalen Netzes so zu verändern, dass wir diese Struktur nutzen können. Bei CNNs können wir die Neuronen in einer dreidimensionalen Struktur anordnen, für die wir Folgendes haben:
- Breite
- Höhe
- Tiefe
Diese Attribute des Inputs passen zu einer Bildstruktur, für die wir eine:
- Bildbreite in Pixel
- Bildhöhe in Pixel
- RGB-Kanäle als die Tiefe
Wir können diese Struktur als ein dreidimensionales Volumen von Neuronen betrachten. Ein wichtiger Aspekt bei der Entwicklung der CNNs gegenüber den früheren Feed-Forward-Varianten ist, wie sie mit neuen Schichttypen eine höhere Recheneffizienz erreichen. Wir werden auf diese Anordnung gleich noch näher eingehen. Werfen wir nun einen Blick auf die allgemeine Architektur von CNNs auf höchster Ebene.
CNN Architektur Überblick
CNNs wandeln die Eingabedaten von der Eingabeschicht durch alle verbundenen Schichten in eine Reihe von Klassenbewertungen um, die von der Ausgabeschicht ausgegeben werden. Es gibt viele Varianten der CNN-Architektur, aber sie basieren auf dem Muster der Schichten, wie in Abbildung 4-9 dargestellt.
In Abbildung 4-9 sind drei große Gruppen dargestellt:
- Eingabeschicht
- Schichten zur Merkmalsextraktion (Lernen)
- Klassifizierungsschichten
Die Eingabeschicht akzeptiert dreidimensionale Eingaben in der Regel in der räumlichen Form der Größe (Breite × Höhe) des Bildes und hat eine Tiefe, die die Farbkanäle darstellt (in der Regel drei für RGB-Farbkanäle).
Mini-Batch als vierte Dimension
Wenn wir Beispiele zu einem Mini-Batch für das Training zusammenfassen, haben wir vier Dimensionen - eine weitere Dimension, um das Beispiel innerhalb des Mini-Batches zu indizieren. In DL4J haben die Datenfelder für die Bildschulung also vier Dimensionen, nicht nur drei.
Die Ebenen der Merkmalsextraktion haben ein allgemeines, sich wiederholendes Muster der Sequenz:
-
Faltungsschicht
Wir drücken die Rectified Linear Unit (ReLU)-Aktivierungsfunktion hier als eine Schicht im Diagramm aus, um uns an andere Literatur anzupassen.
- Poolingschicht
Diese Schichten finden eine Reihe von Merkmalen in den Bildern und konstruieren nach und nach Merkmale höherer Ordnung. Dies entspricht direkt dem aktuellen Thema des Deep Learning, bei dem Merkmale automatisch gelernt und nicht mehr von Hand konstruiert werden.
Schließlich gibt es noch die Klassifizierungsschichten, in denen eine oder mehrere voll verknüpfte Schichten die Merkmale höherer Ordnung verarbeiten und daraus Klassenwahrscheinlichkeiten oder Punktzahlen erzeugen. Diese Schichten sind, wie der Name schon sagt, mit allen Neuronen der vorherigen Schicht verbunden. Das Ergebnis dieser Schichten ist in der Regel ein zweidimensionales Ergebnis mit den Dimensionen[b × N], wobei b die Anzahl der Beispiele im Mini-Batch und N die Anzahl der Klassen ist, die wir bewerten wollen.
Räumliche Anordnung der Neuronen
Bei herkömmlichen mehrschichtigen neuronalen Netzen sind die Schichten vollständig miteinander verbunden und jedes Neuron in einer Schicht ist mit jedem Neuron in der nächsten Schicht verbunden. Die Neuronen in den Schichten eines CNN sind in drei Dimensionen angeordnet, um den Eingabevolumen zu entsprechen. Mit Tiefe ist hier die dritte Dimension des Aktivierungsvolumens gemeint, nicht die Anzahl der Schichten, wie bei einem mehrschichtigen neuronalen Netz.
Entwicklung der Verbindungen zwischen den Schichten
Eine weitere Änderung ist die Art und Weise, wie wir die Schichten in einer Faltungsarchitektur verbinden. Die Neuronen in einer Schicht sind nur mit einem kleinen Bereich der Neuronen in der Schicht vor ihr verbunden. CNNs behalten eine schichtenorientierte Architektur bei, wie sie in traditionellen mehrschichtigen Netzen verwendet wird, haben aber unterschiedliche Arten von Schichten. Jede Schicht wandelt das 3D-Eingabevolumen aus der vorherigen Schicht in ein 3D-Ausgabevolumen von Neuronenaktivierungen mit einer differenzierbaren Funktion um, die Parameter haben kann oder auch nicht, wie in Abbildung 4-10 gezeigt.
Faltungsschichten
Faltungsschichten gelten als die Kernbausteine von CNN-Architekturen. Wie Abbildung 4-11 zeigt, wandeln Faltungsschichten die Eingabedaten um, indem sie einen Bereich von lokal verbundenen Neuronen aus der vorherigen Schicht verwenden. Die Schicht berechnet ein Punktprodukt zwischen dem Bereich der Neuronen in der Eingabeschicht und den Gewichten, mit denen sie in der Ausgabeschicht lokal verbunden sind.
Die resultierende Ausgabe hat in der Regel die gleichen räumlichen Dimensionen (oder kleinere räumliche Dimensionen), aber manchmal erhöht sich die Anzahl der Elemente in der dritten Dimension der Ausgabe (Tiefendimension). Schauen wir uns ein Schlüsselkonzept dieser Schichten, die sogenannte Faltung, genauer an.
Convolution
Eine Faltung ist definiert als eine mathematische Operation, die eine Regel beschreibt, wie zwei Informationsmengen zusammengeführt werden können. Sie ist sowohl in der Physik als auch in der Mathematik von Bedeutung und schlägt durch die Verwendung von Fourier-Transformationen eine Brücke zwischen dem Raum/Zeit-Bereich und dem Frequenzbereich. Sie nimmt eine Eingabe auf, wendet einen Faltungskern an und liefert eine Feature Map als Ausgabe.
Die in Abbildung 4-12 gezeigte Faltungsoperation ist der sogenannte Feature-Detektor eines CNN. Die Eingabe für eine Faltung können Rohdaten oder eine Feature Map sein, die von einer anderen Faltung ausgegeben wurde. Sie wird oft als Filter interpretiert, bei dem der Kernel die Eingabedaten nach bestimmten Arten von Informationen filtert; ein Kanten-Kernel lässt zum Beispiel nur Informationen von den Kanten eines Bildes durch.
Die Abbildung zeigt, wie der Kernel über die Eingabedaten geschoben wird, um die gefalteten Merkmalsdaten (Ausgabedaten) zu erzeugen. Bei jedem Schritt wird der Kernel mit den Werten der Eingabedaten innerhalb seiner Grenzen multipliziert, wodurch ein einzelner Eintrag in der Ausgabe-Merkmalskarte entsteht. In der Praxis ist die Ausgabe groß, wenn das gesuchte Merkmal in den Eingabedaten enthalten ist.
Wir bezeichnen die Gewichte in einer Faltungsschicht gemeinhin als Filter (oder Kernel). Dieser Filter wird mit dem Input gefaltet und das Ergebnis ist eine Feature Map (oder Aktivierungskarte). Faltungsschichten führen Transformationen an der Eingabedatenmenge durch, die von den Aktivierungen in der Eingabedatenmenge und den Parametern (Gewichte und Verzerrungen der Neuronen) abhängen. Die Aktivierungskarte für jeden Filter wird entlang der Tiefendimension gestapelt, um das 3D-Ausgangsvolumen zu erstellen.
Faltungsschichten haben Parameter für die Schicht und zusätzliche Hyperparameter. Mit Hilfe des Gradientenabstiegs werden die Parameter in dieser Schicht so trainiert, dass die Klassenwerte mit den Bezeichnungen in der Trainingsmenge übereinstimmen. Im Folgenden sind die wichtigsten Komponenten von Faltungsschichten aufgeführt:
- Filter
- Aktivierungskarten
- Gemeinsame Nutzung von Parametern
- Ebenenspezifische Hyperparameter
Werfen wir einen Blick auf die Besonderheiten der einzelnen Komponenten.
Filter
Die Parameter für eine Faltungsschicht konfigurieren den Satz von Filtern für die Schicht. Filter sind eine Funktion, deren Breite und Höhe kleiner ist als die Breite und Höhe des Eingangsvolumens.
Filtergrößen in Anwendungen der natürlichen Sprachverarbeitung
Wir können eine Filtergröße haben, die dem Eingabevolumen entspricht, aber normalerweise nur in einer Dimension, nicht in beiden. Das sollte man bedenken, wenn man CNNs für Anwendungsfälle in der natürlichen Sprachverarbeitung (NLP) einsetzt.
Filter (z. B. Faltungen) werden in einem gleitenden Fenster auf die Breite und Höhe des Eingabevolumens angewendet, wie in Abbildung 4-12 dargestellt. Die Filter werden auch auf jede Tiefe des Eingabevolumens angewendet. Wir berechnen die Ausgabe des Filters, indem wir das Punktprodukt aus dem Filter und der Eingaberegion bilden.
Filteranzahl und Aktivierungskarten
Das Ergebnis der Anwendung eines Filters auf das Eingangsvolumen wird als Aktivierungskarte (manchmal auch als Feature Map bezeichnet) dieses Filters bezeichnet. In vielen CNN-Diagrammen sehen wir oft viele kleine Aktivierungskarten; wie diese erzeugt werden, kann manchmal verwirrend sein.
Die Filteranzahl ist ein Hyperparameterwert für jede Faltungsschicht. Dieser Hyperparameter steuert auch, wie viele Aktivierungskarten von der Faltungsschicht als Input für die nächste Schicht erzeugt werden, und gilt als dritte Dimension (Anzahl der Aktivierungskarten) im 3D-Schicht-Ausgangsaktivierungsvolumen. Der Hyperparameter für die Filteranzahl kann frei gewählt werden, wobei einige Werte besser funktionieren als andere.
Die Architektur von CNNs ist so aufgebaut, dass die gelernten Filter die stärkste Aktivierung für räumlich lokale Eingangsmuster erzeugen. Das bedeutet, dass Filter gelernt werden, die nur dann auf Muster (oder Merkmale) reagieren, wenn die Muster in den Trainingsdaten in ihrem jeweiligen Bereich vorkommen. Je weiter wir in einem CNN in den Schichten fortschreiten, desto mehr Filter können nichtlineare Kombinationen von Merkmalen erkennen und sind zunehmend global in der Lage, Muster zu erkennen. Leistungsstarke Faltungsarchitekturen (die wir später in diesem Abschnitt sehen werden) haben gezeigt, dass die Netzwerktiefe ein wichtiger Faktor in CNNs ist.
Aktivierungskarten
Erinnere dich an aus Kapitel 1, dass eine Aktivierung ein numerisches Ergebnis ist, wenn ein Neuron beschlossen hat, Informationen durchzulassen. Dies ist eine Funktion der Eingänge der Aktivierungsfunktion, der Gewichte auf den Verbindungen (für die Eingänge und die Art der Aktivierungsfunktion selbst). Wenn wir sagen, dass der Filter "aktiviert" wird, bedeutet das, dass der Filter Informationen aus dem Eingangsvolumen in das Ausgangsvolumen durchlässt.
Wir schieben jeden Filter über die räumlichen Dimensionen (Breite, Höhe) des Eingangsvolumens, während die Informationen durch das CNN laufen. So entsteht eine zweidimensionale Ausgabe, die Aktivierungskarte für den jeweiligen Filter. Abbildung 4-13 zeigt, wie diese Aktivierungskarte mit dem zuvor eingeführten Konzept eines gefalteten Merkmals zusammenhängt.
Die Aktivierungskarte auf der rechten Seite in Abbildung 4-13 wird anders dargestellt, um zu zeigen, wie Faltungsaktivierungskarten in der Literatur üblicherweise dargestellt werden.
Aktivierungskarten
In der Literatur wird die Ausgabe der Aktivierungskarte als Feature Map bezeichnet, aber in diesem Text werden wir sie als Aktivierungskarte bezeichnen.
Um die Aktivierungskarte zu berechnen, schieben wir den Filter über die Tiefenschicht des Eingangsvolumens. Wir berechnen das Punktprodukt zwischen den Einträgen im Filter und dem Eingangsvolumen. Der Filter stellt die Gewichte dar, die mit dem beweglichen Fenster (Teilmenge) der Eingangsaktivierungen multipliziert werden. Netzwerke lernen Filter, die aktiviert werden, wenn sie bestimmte Arten von Merkmalen in den Eingabedaten an einer bestimmten räumlichen Position sehen.
Wir erstellen das dreidimensionale Ausgabevolumen für die Faltungsschicht, indem wir diese Aktivierungskarten entlang der Tiefendimension in der Ausgabe stapeln, wie in Abbildung 4-14 dargestellt. Das Ausgabevolumen enthält Einträge, die wir als die Ausgabe eines Neurons betrachten, das nur ein kleines Fenster des Eingabevolumens betrachtet.
In einigen Fällen ist diese Ausgabe das Ergebnis von Parametern, die mit Neuronen in derselben Aktivierungskarte geteilt werden. Jedes Neuron, das das Ausgangsvolumen erzeugt, ist nur mit einer lokalen Region des Eingangsvolumens verbunden, wie in Abbildung 4-15 dargestellt.
Wir steuern die lokale Konnektivität dieses Prozesses mit dem Hyperparameter, der als rezeptives Feld bezeichnet wird und der steuert, wie viel von der Breite und Höhe des Eingangsvolumens unser Filter abbildet.
Filter definieren eine kleinere begrenzte Region, um Aktivierungskarten aus den Eingangsvolumina zu erstellen. Sie sind durch die oben beschriebene Dynamik der lokalen Konnektivität nur mit einer Teilmenge des Eingangsvolumens verbunden. Auf diese Weise können wir die Qualität der Merkmalsextraktion beibehalten und gleichzeitig die Anzahl der zu trainierenden Parameter pro Schicht reduzieren. Faltungsschichten reduzieren die Anzahl der Parameter weiter, indem sie eine Technik namens Parameter-Sharing anwenden.
Gemeinsame Nutzung von Parametern
CNNs verwenden ein Parameter-Sharing-Schema, um die Gesamtzahl der Parameter zu kontrollieren. Das verkürzt die Trainingszeit, weil wir weniger Ressourcen für das Lernen des Trainingsdatensatzes benötigen. Um die gemeinsame Nutzung von Parametern in CNNs zu implementieren, bezeichnen wir zunächst eine einzelne zweidimensionale Tiefenscheibe als "Tiefenscheibe". Dann legen wir fest, dass die Neuronen in jedem Tiefen-Slice dieselben Gewichte und Vorspannungen verwenden müssen. Dadurch erhalten wir deutlich weniger Parameter (oder Gewichte) für eine bestimmte Faltungsschicht.
Wir sind nicht in der Lage, die Vorteile des Parameter-Sharings zu nutzen, wenn die Eingabebilder, auf denen wir trainieren, eine bestimmte zentrierte Struktur haben. Wir sehen diesen Effekt bei Gesichtern, wenn wir erwarten, dass ein bestimmtes Merkmal immer an einer bestimmten Stelle erscheint (bei zentrierten Gesichtern). In diesem Fall würden wir wahrscheinlich kein Parameter-Sharing verwenden. Durch die gemeinsame Nutzung von Parametern werden CNNs auch in Bezug auf Translation/Position invariant.
Gelernte Filter und Renderings
Abbildung 4-16 zeigt ein Beispiel für die 96 gelernten Filter der Größe 11 × 11 × 3. Mit dem Parameter-Sharing-Schema sehen wir, dass die Erkennung einer horizontalen Kante aufgrund der Translationsinvarianz von Bildern an vielen Stellen im Bild nützlich ist. Das bedeutet, dass wir die horizontale Kante an einer Stelle lernen können und uns nicht darum kümmern müssen, sie an allen Stellen des Bildes als Merkmal zu lernen.
Um das zu verdeutlichen, lass uns ein 2D-Bild betrachten. Wenn wir ein Bild in vier Abschnitte unterteilen, lernt das neuronale Netz positionsinvariante Merkmale des Bildes. Der Grund dafür, dass diese Merkmale positionsinvariant sind, liegt darin, wie das Netzwerk die Daten in Quadranten unterteilt. Es lernt dann Teile des Bildes auf einmal und fasst die Ergebnisse zusammen. So kann das neuronale Netz eine Gesamtdarstellung lernen, die nicht auf eine bestimmte Gruppe von Merkmalen beschränkt ist. In Kapitel 6 werden wir mehr über die Erstellung von Filter-Renderings erfahren.
ReLU-Aktivierungsfunktionen als Schichten
Bei CNNs werden oft ReLU-Schichten verwendet. Die ReLU-Schicht wendet eine elementweise Aktivierungsfunktion auf die Eingabedaten an, die einen Schwellenwert - z. B. max(0,x) - bei Null festlegt, sodass die Ausgabe dieselbe Dimension hat wie die Eingabe in die Schicht.
DL4J, Ebenentypen und Aktivierungsfunktionen
In DL4J kennzeichnen wir die Schichten mit dem Typ ihrer Neuronen-Aktivierungsfunktion (dies spiegelt sich jedoch nicht immer in den Namen der Schichtklassen wider). Bei DL4J sind die Aktivierungsfunktionen in die Schichten selbst integriert. Andere Bibliotheken wie Caffe verwenden separate Aktivierungsschichten.
Wenn du diese Funktion über das Eingabevolumen laufen lässt, werden die Pixelwerte geändert, aber die räumlichen Dimensionen der Eingabedaten werden in der Ausgabe nicht verändert. ReLU-Schichten haben weder Parameter noch zusätzliche Hyperparameter.
Hyperparameter der Faltungsschicht
Die folgenden sind die Hyperparameter11 die die räumliche Anordnung und die Größe des Ausgabevolumens einer Faltungsschicht bestimmen, sind:
- Filter (oder Kernel) Größe (Feldgröße)
- Tiefe der Ausgabe
- Stride
- Zero-Padding
Mehr zur Größenbestimmung von Faltungsschichten in Kapitel 7
In diesem Abschnitt erklären wir, wie diese Hyperparameter funktionieren. In Kapitel 7 legen wir die Mechanismen für die Abstimmung der CNN-Schichten dar.
Filtergröße
Jeder Filter ist räumlich klein in Bezug auf die Breite und Höhe der Filtergröße. Ein Beispiel dafür ist, dass die erste Faltungsschicht einen Filter der Größe 5 × 5 × 3 haben könnte. Das würde bedeuten, dass der Filter 5 Pixel breit und 5 Pixel hoch ist, wobei 3 für die Farbkanäle steht, unter der Annahme, dass das Eingangsbild in 3-Kanal-RGB-Farbe vorliegt.
Tiefe der Ausgabe
Wir können die Tiefe des Ausgabevolumens manuell auswählen. Der Tiefenhyperparameter steuert die Anzahl der Neuronen in der Faltungsschicht, die mit der gleichen Region des Eingabevolumens verbunden sind.
Kanten und Aktivierung
Unterschiedliche Neuronen entlang der Tiefendimension lernen, sich zu aktivieren, wenn sie mit erzeugten Eingangsdaten (z. B. Farbe oder Kanten) stimuliert werden.
Wir betrachten eine Gruppe von Neuronen, die alle denselben Bereich des Eingabevolumens betrachten, als eine Tiefensäule.
Stride
Stride legt fest, wie weit sich unser Gleitfilterfenster pro Anwendung der Filterfunktion bewegt. Jedes Mal, wenn wir die Filterfunktion auf die Eingabespalte anwenden, erstellen wir eine neue Tiefenspalte im Ausgabevolumen. Geringere Einstellungen für die Schrittweite (z. B. 1 gibt nur einen einzigen Einheitsschritt an) führen dazu, dass mehr Tiefenspalten im Ausgabevolumen angelegt werden. Dies führt auch zu einer stärkeren Überlappung der rezeptiven Felder zwischen den Spalten und damit zu einem größeren Ausgabevolumen. Das Gegenteil ist der Fall, wenn wir höhere Stride-Werte angeben. Diese höheren Stride-Werte führen zu einer geringeren Überlappung und kleineren Ausgabevolumina im Raum.
Batch-Normalisierung und Schichten
Um das Training in CNNs zu beschleunigen, können wir die Aktivierungen der vorherigen Schicht bei jedem Stapel normalisieren.12 Diese Technik wendet eine Transformation an, die den Mittelwert der Aktivierung nahe bei 0,0 und die Standardabweichung der Aktivierung nahe bei 1,0 hält.
Es hat sich gezeigt, dass die Batch-Normalisierung in CNNs das Training beschleunigt, indem die Normalisierung Teil der Netzwerkarchitektur wird. Indem wir die Normalisierung für jeden Trainings-Ministapel von Eingabedaten anwenden, können wir viel höhere Lernraten erzielen. Die Batch-Normalisierung verringert auch die Empfindlichkeit des Trainings gegenüber der Initialisierung der Gewichte und wirkt als Regularisierer (wodurch der Bedarf an anderen Arten der Regularisierung sinkt). Die Batch-Normalisierung wurde auch auf LSTM-Netze angewandt,13 ein weiterer Typ von Deep Networks, auf den wir später im Kapitel eingehen werden.
Pooling-Schichten
Pooling Schichten werden üblicherweise zwischen aufeinanderfolgenden Faltungsschichten eingefügt. Wir wollen nach den Faltungsschichten Pooling-Schichten einfügen, um die räumliche Größe (Breite und Höhe) der Datendarstellung schrittweise zu verringern. Pooling-Schichten reduzieren die Datenrepräsentation schrittweise über das Netzwerk hinweg und helfen dabei, Overfitting zu kontrollieren. Die Pooling-Schicht arbeitet unabhängig auf jeder Tiefenscheibe der Eingabe.
Allgemeine Downsampling-Operationen
Die häufigste Downsampling-Operation ist die Max-Operation. Die zweithäufigste Operation ist das Durchschnitts-Pooling.
Die Ebene pooling verwendet die Operation max()
, um die Größe der Eingabedaten räumlich zu verändern (Breite, Höhe). Diese Operation wird als Max-Pooling bezeichnet. Bei einer Filtergröße von 2 × 2 nimmt die max()
Operation die größte von vier Zahlen im Filterbereich. Diese Operation hat keine Auswirkungen auf die Tiefendimension.
Pooling-Ebenen verwenden Filter, um das Downsampling auf dem Eingangsvolumen durchzuführen. Diese Ebenen führen Downsampling-Operationen entlang der räumlichen Dimension der Eingabedaten durch. Das heißt, wenn das Eingangsbild 32 Pixel breit und 32 Pixel hoch wäre, wäre das Ausgangsbild in Breite und Höhe kleiner (z. B. 16 Pixel breit und 16 Pixel hoch). Die gängigste Einstellung für eine Pooling-Schicht ist die Anwendung von 2 × 2 Filtern mit einer Schrittweite von 2. Dadurch wird jede Tiefenscheibe im Eingangsvolumen um den Faktor zwei in den räumlichen Dimensionen (Breite und Höhe) verkleinert. Dieses Downsampling führt dazu, dass 75 Prozent der Aktivierungen verworfen werden.
Pooling-Schichten haben keine Parameter für die Schicht, aber zusätzliche Hyperparameter. Diese Ebene hat keine Parameter, weil sie eine feste Funktion des Eingangsvolumens berechnet. Es ist nicht üblich, für Pooling-Schichten Null-Padding zu verwenden.
Vollständig verbundene Schichten
Wir verwenden diese Schicht, um die Klassenwerte zu berechnen, die wir als Ausgabe des Netzes verwenden werden (z. B. die Ausgabeschicht am Ende des Netzes). Die Größe des Ausgabevolumens ist [ 1 × 1 × N ], wobei N die Anzahl der auszuwertenden Klassen ist. Im Fall des CIFAR-Datensatzes, den wir oben besprochen haben, wäre N 10 für die 10 Objektklassen des Datensatzes. Diese Schicht hat eine Verbindung zwischen all ihren Neuronen und jedem Neuron der vorherigen Schicht.
Vollständig verknüpfte Schichten haben die normalen Parameter für die Schicht und Hyperparameter. Vollständig verknüpfte Schichten führen Transformationen an der Eingabedatenmenge durch, die von den Aktivierungen in der Eingabedatenmenge und den Parametern (Gewichte und Vorspannungen der Neuronen) abhängen.
Mehrere vollständig miteinander verbundene Schichten
Es gibt einige CNN-Architekturen, die mehrere voll verknüpfte Schichten am Ende des Netzwerks verwenden. AlexNet ist ein Beispiel dafür; es hat zwei vollständig verknüpfte Schichten, gefolgt von einer Softmax-Schicht am Ende.
Andere Anwendungen von CNNs
Neben normalen zweidimensionalen Bilddaten werden CNNs auch auf dreidimensionale Datensätze angewendet. Hier sind einige Beispiele für diese alternativen Anwendungen:
Die positionsinvariante Natur von CNNs hat sich in diesen Bereichen als nützlich erwiesen, weil wir nicht darauf angewiesen sind, unsere Merkmale von Hand so zu kodieren, dass sie an bestimmten "Stellen" im Merkmalsvektor erscheinen.
Zusammenfassung
CNNs haben sich aus der Notwendigkeit heraus entwickelt, spezielle Merkmale aus Bilddaten zu extrahieren. Wir haben Schichten gesehen, die gut darin sind, Merkmale zu finden, egal wo sie in den Spalten "wandern". Wir haben gesehen, wie Faltungsschichten, Pooling-Schichten und reguläre voll verknüpfte Schichten zusammenarbeiten, um eine Bildklassifizierung durchzuführen. Nun wollen wir uns einer neuronalen Netzwerkarchitektur zuwenden, die sich auf die Modellierung des zeitlichen Bereichs konzentriert: Rekurrente neuronale Netze.
Rekurrente neuronale Netze
Recurrent Neuronale Netze gehören zur Familie der Feed-Forward-Netze. Sie unterscheiden sich von anderen Feed-Forward-Netzen durch ihre Fähigkeit, Informationen über Zeitschritte zu senden. Hier ist eine interessante Erklärung der rekurrenten neuronalen Netze vom führenden Forscher Jürgen Schmidhuber:
[Rekurrente Neuronale Netze ermöglichen sowohl parallele als auch sequentielle Berechnungen und können im Prinzip alles berechnen, was ein herkömmlicher Computer auch berechnen kann. Im Gegensatz zu herkömmlichen Computern ähneln rekurrente neuronale Netze jedoch dem menschlichen Gehirn, das ein großes, rückgekoppeltes Netzwerk aus miteinander verbundenen Neuronen ist, das irgendwie lernen kann, einen lebenslangen sensorischen Eingangsstrom in eine Abfolge nützlicher motorischer Ausgaben zu übersetzen. Das Gehirn ist ein bemerkenswertes Vorbild, da es viele Probleme lösen kann, die heutige Maschinen noch nicht lösen können.
In der Vergangenheit waren diese Netze schwer zu trainieren, aber in jüngster Zeit haben Fortschritte in der Forschung (Optimierung, Netzarchitekturen, Parallelität und Grafikprozessoren [GPUs]) diese Netze für den Praktiker zugänglicher gemacht.
Rekurrente neuronale Netze nehmen jeden Vektor aus einer Reihe von Eingangsvektoren und modellieren ihn einzeln. Dadurch kann das Netz seinen Zustand beibehalten, während es jeden Eingangsvektor über das Fenster der Eingangsvektoren hinweg modelliert. Die Modellierung der zeitlichen Dimension ist ein Markenzeichen der rekurrenten neuronalen Netze.
Modellierung der Zeitdimension
Rekurrente Neuronale Netze gelten als Turing-komplett und können beliebige Programme (mit Gewichten) simulieren. Wenn wir neuronale Netze als Optimierung über Funktionen betrachten, können wir rekurrente neuronale Netze als "Optimierung über Programme" betrachten. Rekurrente neuronale Netze eignen sich gut für die Modellierung von Funktionen, bei denen die Eingabe und/oder Ausgabe aus Vektoren besteht, die eine zeitliche Abhängigkeit zwischen den Werten aufweisen. Rekurrente neuronale Netze modellieren den zeitlichen Aspekt der Daten, indem sie Zyklen im Netz erzeugen (daher der Teil "rekurrent" im Namen).
Verloren in der Zeit
Viele Klassifizierungstools (Support Vector Machines, logistische Regression und reguläre Feed-Forward-Netzwerke) wurden erfolgreich eingesetzt, ohne die zeitliche Dimension zu modellieren, da sie von Unabhängigkeit ausgehen. Andere Varianten dieser Tools erfassen die zeitliche Dynamik, indem sie ein gleitendes Fenster der Eingabe modellieren (z. B. die vorherige, aktuelle und nächste Eingabe zusammen als einen einzigen Eingabevektor).
Ein Nachteil dieser Instrumente ist, dass die Annahme der Unabhängigkeit der zeitlichen Verbindung zwischen den Modelleingaben es unserem Modell nicht ermöglicht, langfristige Zeitabhängigkeiten zu erfassen. Sliding-Window-Techniken haben eine begrenzte Fensterbreite und schlagen bei der Erfassung von Effekten fehl, die größer sind als die feste Fenstergröße. Ein gutes Beispiel dafür ist die Modellierung von Unterhaltungen und das Verstehen von Maschinen, wie sie kohärent antworten können, wenn sich die Unterhaltung im Laufe der Zeit weiterentwickelt. Ein gut trainiertes rekurrentes neuronales Netz könnte z. B. bei Alan Turings berühmtem Turing-Test mithalten, bei dem versucht wird, einem Menschen vorzugaukeln, dass er mit einer echten Person spricht.
Zeitliche Rückkopplung und Schleifen in Verbindungen
Rekurrente neuronale Netze können Schleifen in den Verbindungen haben. Dadurch können sie zeitliches Verhalten modellieren und gewinnen in Bereichen wie Zeitreihen, Sprache, Audio und Text an Genauigkeit.
Ein Hinweis zu Verbindungen von der Ausgabe zu verdeckten Ebenen
In der Praxis sehen wir dieses Konnektivitätsschema seltener als andere. Auch DL4J verwendet dieses Schema nicht. Wir hielten es jedoch für wichtig, diese Variante zu erwähnen, um den Kontext im Material zu verdeutlichen. Meistens sehen wir Verbindungen zwischen Neuronen in einem Zeitschritt zum nächsten in jeder rekurrenten Schicht.
Die Daten in diesen Bereichen sind von Natur aus geordnet und kontextabhängig, d. h. spätere Werte hängen von früheren Werten ab. Die Verdrahtung eines rekurrenten neuronalen Netzes ermöglicht eine Rückkopplung, die es ermöglicht, diese zeitlichen Effekte zu erfassen. Rekurrente neuronale Netze werden vor allem in Zeitreihenbereichen für Anwendungen eingesetzt.
Ein rekurrentes neuronales Netz enthält eine Rückkopplungsschleife, mit der es aus Sequenzen lernt, auch aus Sequenzen mit unterschiedlicher Länge. Rekurrente Neuronale Netze enthalten eine zusätzliche Parametermatrix für die Verbindungen zwischen den Zeitschritten, die verwendet/trainiert werden, um die zeitlichen Beziehungen in den Daten zu erfassen.
Rekurrente Neuronale Netze werden so trainiert, dass sie Sequenzen erzeugen, bei denen die Ausgabe in jedem Zeitschritt sowohl auf der aktuellen Eingabe als auch auf der Eingabe in allen vorherigen Zeitschritten basiert. Normale rekurrente neuronale Netze berechnen einen Gradienten mit einem Algorithmus namens Backpropagation through Time (BPTT). Auf die BPTT gehen wir später in diesem Kapitel näher ein.
Sequenzen und Zeitreihendaten
Wir finden sequenzielle Daten in vielen Problembereichen der Industrie, für die unser Modell eine Folge von Vektoren ausgeben muss:
- Bildbeschriftung
- Sprachsynthese24
- Generation Musik25
- Videospiele spielen
- Sprachmodellierung
- Textgenerierungsmodelle auf Zeichenebene
In anderen Bereichen brauchen wir eine Reihe von Eingangsvektoren:
- Zeitreihenvorhersage
- Videoanalyse
- Abrufen von Musikinformationen
Und dann gibt es Bereiche, die sowohl eine Reihe von Eingangs- als auch Ausgangsvektoren erfordern:
- Übersetzung in natürliche Sprache26
- In den Dialog treten
- Robotersteuerung
Rekurrente neuronale Netze unterscheiden sich von anderen tiefen Netzen durch die Art der Eingaben, die sie modellieren können (nicht fixierte Eingaben):
- Nicht festgelegte Berechnungsschritte
- Nicht festgelegte Ausgabegröße
- Sie kann mit Sequenzen von Vektoren arbeiten, z. B. mit Videobildern
Ein wichtiger Aspekt der rekurrenten neuronalen Netze ist, wie wir mit Input und Output auf einzigartige Weise arbeiten können.
Verstehen von Modelleingabe und -ausgabe
Traditionelles maschinelles Lernen basiert auf dem Konzept eines einzelnen Eingangsvektors mit fester Größe. Bei der traditionellen Modellierung sehen wir in der Regel eine Input-Output-Beziehung mit einer festen Eingabegröße zu einer festen Ausgabegröße.
Dieses Muster wird häufig bei der Erstellung von Klassifikatoren für die Bildklassifizierung oder die Klassifizierung kolumnarer Daten verwendet.
Rekurrente Neuronale Netze ändern diese Eingabedynamik, indem sie mehrere Eingabevektoren einbeziehen, einen für jeden Zeitschritt, und jeder Vektor kann viele Spalten haben. Die folgende Liste enthält Beispiele dafür, wie rekurrente neuronale Netze mit Sequenzen von Eingangs- und Ausgangsvektoren arbeiten:
- One-to-many: Ausgabe einer Folge. Bei der Bildbeschriftung wird zum Beispiel ein Bild genommen und eine Folge von Wörtern ausgegeben.
- Viele-zu-eins: Sequenz-Eingabe. Zum Beispiel bei der Stimmungsanalyse, bei der ein bestimmter Satz eingegeben wird.
- Many-to-many: Zum Beispiel Videoklassifizierung: Beschrifte jedes Bild.
Nachdem wir uns nun die Variationen von Ein- und Ausgabedaten angesehen haben, wollen wir uns ansehen, wie diese Eingabedaten dargestellt werden.
3D volumetrische Eingabe
Die Eingabe in rekurrente neuronale Netze umfasst mehr Dimensionen als die Standard-Eingabe bei der Modellierung von maschinellem Lernen. Das ist konzeptionell ähnlich wie bei CNNs. Wir haben drei Dimensionen für die Eingabe:
- Mini-Batch Größe
- Anzahl der Spalten in unserem Vektor pro Zeitschritt
- Anzahl von Zeitschritten
Mini-Batch ist die Anzahl der Eingabedatensätze (Sammlungen von Zeitreihenpunkten für ein einzelnes Quellunternehmen), die wir pro Batch modellieren wollen. Die Anzahl der Spalten entspricht der Anzahl der traditionellen Merkmalsspalten in einem normalen Eingabevektor. Mit der Anzahl der Zeitschritte stellen wir die Veränderung des Eingangsvektors im Laufe der Zeit dar. Dies ist der Zeitreihenaspekt der Eingabedaten. In der Terminologie des vorherigen Abschnitts würden wir jede Zeitschrittzahl über 1 als "viele-zu" in Bezug auf die Eingangs- und Ausgangsarchitektur betrachten.
Ungleichmäßige Zeitreihen und Maskierung
Wir haben bereits beschrieben, wie wir bei der Eingabe durch ein rekurrentes neuronales Netz zusätzlich zu den Merkmalen in unserem Eingabevektor auch das Konzept der Zeitschritte haben. Abbildung 4-18 zeigt eine visuelle Darstellung.
Wahrscheinlich kommt nicht jeder Spaltenwert bei jedem Zeitschritt vor, vor allem, wenn wir Deskriptordaten (z. B. Spalten aus einer statischen Datenbanktabelle) mit Zeitreihendaten mischen (z. B. Messungen der Herzfrequenz eines Intensivpatienten pro Minute). In Fällen, in denen wir "gezackte" Zeitschrittwerte haben, müssen wir die Daten maskieren, damit DL4J weiß, wo sich unsere echten Daten im Vektor befinden. Dazu legen wir eine zusätzliche Matrix für die Maske an, die die Zeitschritte angibt, für die es in mindestens einer Spalte Eingabedaten gibt (siehe Abbildung 4-19).
Kapitel 3 enthält echte Codebeispiele, die zeigen, wie wir diese Masken einrichten.
Warum nicht Markov-Modelle?
Wenn sich mit der zeitlichen Dimension in unseren Modellen beschäftigt, können wir natürlich Markov-Modelle als Option in Betracht ziehen. Markov-Modelle sind eine weitere Klasse von Modellen des maschinellen Lernens, die häufig für die Modellierung von Sequenzen verwendet werden. Der einschränkende Faktor bei Markov-Modellen ist, dass diese Modelle mit zunehmender Größe ihres Kontextfensters für die Modellierung weitreichender Abhängigkeiten rechnerisch unpraktisch werden.
Rekurrente Neuronale Netze (konnektionistische Modelle) sind besser als Markov-Modelle (und andere zeitfensterbegrenzte Modelle), weil sie die weitreichenden zeitlichen Abhängigkeiten in den Eingabedaten erfassen können. Rekurrente Neuronale Netze erreichen dies, weil ihr verborgener Zustand Informationen aus einem beliebig langen Kontextfenster erfasst und nicht die Einschränkungen der anderen Techniken aufweist. Außerdem wird die Anzahl der Zustände, die sie modellieren können, durch die verborgene Schicht der Knoten dargestellt, und diese Zustände wachsen exponentiell mit der Anzahl der Knoten in der Schicht. Dadurch sind rekurrente neuronale Netze besonders gut in der Lage, viele für die Zeitdimension relevante Informationen über viele Eingangsvektoren hinweg zu erfassen.
Allgemeine rekurrente neuronale Netzarchitektur
Rekurrente Neuronale Netze sind eine Obermenge der Feed-Forward-Neuronalen Netze, aber sie fügen das Konzept der rekurrenten Verbindungen hinzu. Diese Verbindungen (oder rekurrenten Kanten) erstrecken sich über benachbarte Zeitschritte (z. B. einen vorherigen Zeitschritt) und geben dem Modell das Konzept der Zeit. Die herkömmlichen Verbindungen enthalten in rekurrenten neuronalen Netzen keine Zyklen. Rekurrente Verbindungen können jedoch Zyklen bilden, die auch Verbindungen zurück zu den ursprünglichen Neuronen selbst in zukünftigen Zeitschritten enthalten.
Rekurrente Neuronale Netze - Architektur und Zeitschritte
Auf erhalten die Knoten, die Eingaben entlang der rekurrenten Kanten erhalten, in jedem Zeitschritt, in dem sie Eingaben durch ein rekurrentes Netz senden, Aktivierungen aus dem aktuellen Eingabevektor und aus den versteckten Knoten im vorherigen Zustand des Netzes.
Die Ausgabe wird aus dem verborgenen Zustand zum gegebenen Zeitschritt berechnet. Der vorherige Eingangsvektor des vorherigen Zeitschritts kann den aktuellen Ausgang des aktuellen Zeitschritts über die rekurrenten Verbindungen beeinflussen.
Wir können Schichten dieser spezialisierten rekurrenten Neuronen miteinander verknüpfen, um bessere Modelle zu erstellen. Wir verbinden den Ausgang der vorherigen Schicht mit dem Eingang der nächsten Schicht, ähnlich wie wir mehrschichtige neuronale Netze mit Vorwärtskopplung verbinden.
LSTM-Netzwerke
LSTM Netzwerke sind die am häufigsten verwendete Variante der rekurrenten neuronalen Netze. LSTM-Netzwerke wurden 1997 von Hochreiter und Schmidhuber vorgestellt.27
Die entscheidende Komponente des LSTM28 ist die Speicherzelle und die Gatter (einschließlich des Vergessensgatters,29 aber auch das Eingangsgatter). Der Inhalt der Speicherzelle wird durch die Eingangsgatter und die Vergessensgatter moduliert.30 Wenn beide Gatter geschlossen sind, bleibt der Inhalt der Speicherzelle zwischen einem Zeitschritt und dem nächsten unverändert. Die Gating-Struktur ermöglicht es, dass Informationen über viele Zeitschritte hinweg erhalten bleiben und folglich auch Gradienten über viele Zeitschritte hinweg fließen können. Dadurch kann das LSTM-Modell das Problem des verschwindenden Gradienten umgehen, das bei den meisten rekurrenten neuronalen Netzwerken auftritt.
Eigenschaften von LSTM-Netzen
LSTMs sind für Folgendes bekannt:
- Bessere Update-Gleichungen
- Bessere Backpropagation
Unter findest du einige Beispiele für den Einsatz von LSTMs:
- Generierung von Sätzen (z. B. Sprachmodelle auf Zeichenebene)
- Zeitserien klassifizieren
- Spracherkennung
- Handschrifterkennung
- Modellierung mehrstimmiger Musik
LSTM und bidirektionale rekurrente neuronale Netze (BRNN) haben in den letzten Jahren bei Aufgaben wie den folgenden branchenführende Ergebnisse erzielt:
- Bildbeschriftung
- Sprachübersetzung
- Handschrifterkennung
LSTM-Netzwerke bestehen aus vielen verbundenen LSTM-Zellen und sind beim Lernen sehr effizient.
Ein Hinweis zur Trainingskomplexität bei LSTMs
Die Rechenkomplexität der Vorwärts- und Rückwärtspassoperationen skaliert linear mit der Anzahl der Zeitschritte in der Eingangssequenz.
In den folgenden Abschnitten geben wir einen Überblick über die Architektur und die Komponenten des LSTM.
LSTM-Netzwerk-Architektur
Um die komplexe Anordnung der Verbindungen zwischen den Einheiten und Schichten in LSTM-Netzen besser zu verstehen, wollen wir auf einigen früheren Konzepten aufbauen.
Zu Beginn dieses Buches haben wir das Konzept des mehrschichtigen neuronalen Netzes mit Vorwärtskopplung entwickelt, das in Abbildung 4-20 dargestellt ist.
Wenn wir jede Schicht des in Abbildung 4-20 gezeigten Netzes als einen einzelnen Knoten in einer verflachten Darstellung zeigen würden, sähe es wie in Abbildung 4-21 aus.
Bei rekurrenten neuronalen Netzen führen wir eine Art von Verbindung ein, die die Ausgabe eines Neurons der versteckten Schicht als Eingabe für dasselbe Neuron der versteckten Schicht verwendet. Mit dieser rekurrenten Verbindung können wir den Input aus dem vorherigen Zeitschritt als Teil der eingehenden Informationen in das Neuron übernehmen.
Abbildung 4-22 zeigt, dass wir die rekurrenten Verbindungen in einem LSTM besser visualisieren können, wenn wir das in Abbildung 4-21 gezeigte Netzwerk abflachen.
Abbildung 4-23 veranschaulicht, wie wir dies visuell besser verstehen können, indem wir das Netzwerkdiagramm in Abbildung 4-22 "aufrollen", um zu zeigen, wie die Informationen durch das Netzwerk in einer Vorwärtsbewegung und "über die Zeit" "fließen".
LSTM-Netzwerke geben mehr Informationen über die rekurrente Verbindung weiter als die traditionellen rekurrenten neuronalen Netze, wie wir im nächsten Abschnitt sehen werden.
LSTM-Einheiten
Die Einheiten in den Schichten der rekurrenten neuronalen Netze sind eine Variante des klassischen künstlichen Neurons.
Jede LSTM-Einheit hat zwei Arten von Verbindungen:
- Verbindungen aus dem vorherigen Zeitschritt (Ausgänge dieser Einheiten)
- Verbindungen aus der vorherigen Schicht
Die Speicherzelle in einem LSTM-Netzwerk ist das zentrale Konzept, das es dem Netzwerk ermöglicht, den Zustand über die Zeit zu erhalten. Der Hauptteil der LSTM-Einheit wird als LSTM-Block bezeichnet, wie in Abbildung 4-24 dargestellt.
Hier sind die Komponenten einer LSTM-Einheit:
- Drei Gatter
- Eingangsgatter (Eingangsmodulationsgatter)
- Vergiss Gatter
- Ausgangsgatter
- Blockeingang
- Speicherzelle (das konstante Fehlerkarussell)
- Output-Aktivierungsfunktion
- Guckloch-Verbindungen
Es gibt drei Toreinheiten, die lernen, die lineare Einheit vor irreführenden Signalen zu schützen:
- Das Eingangsgate schützt die Einheit vor irrelevanten Eingangsereignissen.
- Das Vergessenstor hilft dem Gerät, vorherige Speicherinhalte zu vergessen.
- Das Ausgangsgatter gibt den Inhalt der Speicherzelle (oder auch nicht) am Ausgang der LSTM-Einheit frei.
Der Ausgang des LSTM-Blocks ist rekurrent mit dem Eingang des Blocks und allen Gattern des LSTM-Blocks verbunden. Die Eingangs-, Vergessens- und Ausgangsgatter in einer LSTM-Einheit haben sigmoidale Aktivierungsfunktionen für die Einschränkung [0, 1]. Die Eingangs- und Ausgangsaktivierungsfunktion des LSTM-Blocks ist (normalerweise) eine tanh-Aktivierungsfunktion.
Ein Hinweis zum Vergissmeinnicht
Eine Aktivierungsleistung von 1,0 bedeutet "alles erinnern" und eine Aktivierungsleistung von 0,0 bedeutet "alles vergessen". Aus einer anderen Perspektive wäre ein besserer Name für das Vergessenstor vielleicht das "Erinnernstor"!
Aus diesem Grund setzen wir den Vergissmeinnicht-Bias in der Regel auf einen großen Wert, um das Lernen langfristiger Abhängigkeiten zu ermöglichen (wobei der große Wert in DL4J standardmäßig = 1,0 ist).
Unter Verwendung der Notation von Greff et al,31 Abbildung 4-25 zeigt die Vektorformeln für den Vorwärtsdurchlauf einer LSTM-Schicht.
In Tabelle 4-1 sind die einzelnen Variablen in den Gleichungen in Abbildung 4-25 aufgeführt.
Name der Variable | Beschreibung |
---|---|
xt | Eingangsvektor zum Zeitpunkt t |
W | Rechteckige Eingangsgewichtsmatrizen |
R | Quadratische wiederkehrende Gewichtsmatrizen |
p | Guckloch-Gewicht-Vektoren |
b | Bias-Vektoren |
Die selbstrekurrente Verbindung hat ein festes Gewicht von 1,0 (außer bei Modulation), um Probleme mit verschwindenden Gradienten zu vermeiden. Diese Kerneinheit ermöglicht es den LSTM-Einheiten, längerfristige Ereignisse in Sequenzen zu entdecken. Diese Ereignisse können sich über bis zu 1.000 diskrete Zeitschritte erstrecken, im Gegensatz zu älteren rekurrenten Architekturen, die Ereignisse über nur etwa 10 Zeitschritte modellieren konnten.
Für weitere Varianten von LSTMs...
Schau dir das Paper "LSTM: A Search Space Odyssey" an .
LSTM-Schichten
Eine Basisschicht nimmt einen Eingangsvektor x (nicht fixiert) auf und gibt einen Ausgang y. Der Ausgang y wird durch den Eingang x und die Geschichte aller Eingänge beeinflusst. Die Schicht wird durch die rekurrenten Verbindungen von der Geschichte der Eingaben beeinflusst. Das RNN hat einen internen Zustand, der jedes Mal aktualisiert wird, wenn wir einen Vektor in die Schicht eingeben. Der Zustand besteht aus einem einzigen versteckten Vektor.
Ausbildung
LSTM Netzwerke verwenden überwachtes Lernen, um die Gewichte im Netzwerk zu aktualisieren. Sie trainieren mit jeweils einem Eingangsvektor in einer Folge von Vektoren. Die Vektoren sind reellwertig und werden zu Sequenzen von Aktivierungen der Eingangsknoten. Jede Nicht-Eingabeeinheit berechnet ihre aktuelle Aktivierung zu einem bestimmten Zeitschritt. Dieser Aktivierungswert wird als nichtlineare Funktion der gewichteten Summe der Aktivierungen aller Einheiten, von denen sie Verbindungen erhält, berechnet.
Für jeden Eingangsvektor in der Eingabesequenz ist der Fehler gleich der Summe der Abweichungen aller Zielsignale von den entsprechenden Aktivierungen, die vom Netz berechnet werden. Werfen wir nun einen Blick auf die BPTT-Variante der Backpropagation, die bei rekurrenten neuronalen Netzen, einschließlich LSTMs, verwendet wird.
BPTT und verkürzte BPTT
Das Training rekurrenter neuronaler Netze kann sehr rechenintensiv sein. Die traditionelle Option ist die Verwendung von BPTT.
Hinweis
BPTT ist im Grunde dasselbe wie die normale Backpropagation: Wir wenden die Kettenregel an, um die Ableitungen (Gradienten) auf der Grundlage der Verbindungsstruktur des Netzes zu berechnen. Es geht durch die Zeit in dem Sinne, dass einige dieser Gradienten/Fehlersignale auch von zukünftigen Zeitschritten zu aktuellen Zeitschritten zurückfließen, nicht nur von der darüber liegenden Schicht (wie bei der Standard-Backpropagation).
Wenn unser rekurrentes Netz mit langen Sequenzen mit vielen Zeitschritten zu tun hat, empfehlen wir alternativ die Verwendung von trunkierter BPTT. Die verkürzte BPTT reduziert den Rechenaufwand für jede Parameteraktualisierung in einem rekurrenten neuronalen Netz.
Häufigere Parameteraktualisierungen beschleunigen das Training des rekurrenten neuronalen Netzes. Wir empfehlen eine verkürzte BPTT, wenn deine Eingabesequenzen mehr als ein paar hundert Zeitschritte umfassen.
Um die Konzepte der verkürzten BPTT besser zu verstehen, schauen wir uns an, was passiert, wenn wir ein Netz mit einer Zeitserieneingabe der Länge 12 (Zeitschritte) trainieren. In diesem Szenario müssen wir einen Vorwärtsdurchlauf von 12 Schritten durchführen und dann den Fehler des Netzes berechnen. Dann führen wir einen Rückwärtsdurchlauf mit 12 Zeitschritten durch, wie in Abbildung 4-26 gezeigt.
In der Abbildung sind die 12 Zeitschritte nicht so schwierig für den Trainingsprozess. Wenn wir zu Modellen übergehen, die auf Zeitreihendaten mit einigen hundert Schritten oder mehr trainieren, wird das Training schwieriger. Wenn die Anzahl der Schritte in der Zeitreihe 1.000 Schritte beträgt, würde das Standard-Backpropagationstraining 1.000 Zeitschritte für jeden Vorwärts- und Rückwärtsdurchlauf (für jede einzelne Parameteraktualisierung) erfordern. Das wird schnell rechenintensiv, weshalb wir uns alternative Trainingsmethoden wie BPTT und trunkierte BPTT ansehen.
Bei der verkürzten BPTT werden der Vorwärts- und der Rückwärtsdurchlauf in kleinere Operationen aufgeteilt. Die in Abbildung 4-27 gezeigte verkürzte BPTT nimmt einen kleineren Vorwärtsdurchlauf, macht einen ebenso kleinen Rückwärtsdurchlauf und aktualisiert dann den gewünschten Parameter. Dieser kleinere Durchlauf ist ein vom Nutzer konfigurierter Hyperparameter. In der Abbildung ist zu sehen, dass der verkürzte BPTT-Durchlauf vier Zeitschritte beträgt.
Die verkürzte BPTT gilt als die derzeit praktischste Methode für das Training rekurrenter neuronaler Netze. Mit der verkürzten BPTT können wir langfristige Abhängigkeiten mit weniger Rechenaufwand erfassen als mit der regulären BPTT.
Die Gesamtkomplexität der Standard-BPTT und der verkürzten BPTT ist ähnlich und erfordert die gleiche Anzahl von Zeitschritten während des Trainings. Allerdings erhalten wir mehr Parameteraktualisierungen bei gleichem Rechenaufwand (obwohl es bei jeder Parameteraktualisierung einen gewissen Overhead gibt). Wie bei allen Annäherungen gibt es auch bei der verkürzten BPTT einen kleinen Nachteil: Die Länge der Abhängigkeiten, die bei der verkürzten BPTT gelernt werden, kann am Ende kürzer sein als die Ergebnisse des vollständigen BPTT-Algorithmus. In der Praxis lohnt sich dieser Kompromiss in der Regel, solange die Länge der abgeschnittenen BPTT richtig eingestellt ist.
Domänenspezifische Anwendungen und Blended Networks
Wie bereits erwähnt hat, führen rekurrente neuronale Netze viele domänenspezifische Anwendungen aus, wie z. B. die Umwandlung von Sprache in Text, die maschinelle Übersetzung und die Erzeugung von handgeschriebenem Text. Rekurrente Neuronale Netze haben sich in der Welt der Computer Vision bewährt und können Folgendes leisten:
Ein weiteres neues Forschungsgebiet im Bereich Computer Vision mit rekurrenten neuronalen Netzen ist ein Netz, das Informationen aus einem Bild extrahieren kann, indem es nur einen kleinen Bereich auf einmal verarbeitet, und das als rekurrente Modelle der visuellen Aufmerksamkeit bezeichnet wird.36 Diese Modelle sind sehr effektiv bei der Bearbeitung von Bildern, die mit mehreren Objekten überladen sind und für CNNs schwieriger zu klassifizieren sind. Diese Netzwerke kombinieren CNNs für die reine Wahrnehmung und rekurrente neuronale Netze für die Modellierung im Zeitbereich.
Ein weiteres bemerkenswertes hybrides CNN + RNN-Netzwerk ist die Arbeit von Andrej Karpathy und Li Fei-Fei, in der das Netzwerk natürlichsprachliche Beschreibungen von Bildern und ihren Regionen erzeugt.37 Das Modell ist in der Lage, Bildunterschriften zu generieren, indem es Datensätze von Bildern und den dazugehörigen Sätzen verwendet, wie in Abbildung 4-28 dargestellt.
Diese Art von Netzwerk ist eine Kombination aus einem CNN und einem BRNN.
Rekursive neuronale Netze
Rekursive Neuronale Netze können wie rekurrente neuronale Netze mit Eingaben variabler Länge umgehen. Der Hauptunterschied besteht darin, dass rekurrente neuronale Netze in der Lage sind, die hierarchischen Strukturen im Trainingsdatensatz zu modellieren. Bilder bestehen in der Regel aus einer Szene mit vielen Objekten. Die Dekonstruktion von Szenen ist oft ein interessantes Problemfeld, das jedoch nicht trivial ist. Die rekursive Natur dieser Dekonstruktion stellt uns vor die Herausforderung, nicht nur die Objekte in der Szene zu identifizieren, sondern auch, wie die Objekte zusammenhängen, um die Szene zu bilden.
Netzwerkarchitektur
Die Architektur des rekursiven neuronalen Netzes besteht aus einer geteilten Gewichtsmatrix und einer binären Baumstruktur, die es dem rekursiven Netz ermöglicht, unterschiedliche Wortfolgen oder Teile eines Bildes zu lernen. Es ist nützlich als Satz- und Szenenparser. Rekursive Neuronale Netze verwenden eine Variante der Backpropagation, die Backpropagation through Structure (BPTS) genannt wird. Der Feedforward-Durchgang erfolgt von unten nach oben, die Backpropagation von oben nach unten. Stell dir das Ziel als die Spitze des Baums vor, während die Eingaben den unteren Teil bilden.
Arten von rekursiven neuronalen Netzen
Rekursive Neuronale Netze gibt es in mehreren Varianten. Eine davon ist der rekursive Autoencoder. Genau wie sein Cousin, der Feed-Forward-Autocoder, lernen rekursive Autocoder, wie sie die Eingabe rekonstruieren können. Im Fall von NLP lernt er, wie man Kontexte rekonstruiert. Ein semisupervised rekursiver Autoencoder lernt die Wahrscheinlichkeit bestimmter Bezeichnungen in jedem Kontext.
Eine weitere Variante davon ist ein überwachtes neuronales Netz, ein sogenanntes rekursives neuronales Tensornetz, das an jedem Knoten des Baums ein überwachtes Ziel berechnet. Der Tensor-Teil bedeutet, dass es den Gradienten ein wenig anders berechnet, indem es mehr Informationen an jedem Knotenpunkt berücksichtigt, indem es eine weitere Informationsdimension mit Hilfe eines Tensors (eine Matrix mit drei oder mehr Dimensionen) nutzt.
Anwendungen von rekursiven neuronalen Netzen
Sowohl Rekursive als auch rekurrente neuronale Netze haben viele der gleichen Anwendungsfälle. Rekurrente Neuronale Netze werden traditionell in der NLP eingesetzt, weil sie mit binären Bäumen, Kontexten und Parsern für natürliche Sprachen verbunden sind. Konstituenten-Parser zum Beispiel können einen Satz in einen binären Baum zerlegen und ihn nach den sprachlichen Eigenschaften des Satzes segmentieren. Im Fall der rekursiven neuronalen Netze ist es eine Bedingung, dass wir einen Parser verwenden, der die Baumstruktur aufbaut (typischerweise das Constituency Parsing).
Rekursive Neuronale Netze können sowohl granulare Strukturen als auch hierarchische Strukturen auf höherer Ebene in Datensätzen wie Bildern oder Sätzen wiederherstellen. Zu den Anwendungen für rekursive neuronale Netze gehören folgende:
- Zerlegung der Bildszene
- NLP
- Audio-zu-Text-Transkription
Zwei spezielle Netzwerkkonfigurationen, die wir in der Praxis sehen, sind rekursive Autocoder und rekursive neuronale Tensoren. Wir verwenden rekursive Autocodierer, um Sätze für NLP in Segmente zu zerlegen. Wir verwenden rekursive neuronale Tensoren, um ein Bild in seine einzelnen Objekte zu zerlegen und die Objekte in der Szene semantisch zu kennzeichnen.
Rekurrente neuronale Netze sind in der Regel schneller zu trainieren, weshalb wir sie in der Regel in eher temporalen Anwendungen einsetzen, aber es hat sich gezeigt, dass sie auch in NLP-basierten Bereichen wie der Stimmungsanalyse gut funktionieren.
Zusammenfassung und Diskussion
Unter haben wir in diesem Kapitel die wichtigsten neueren Architekturen des Deep Learning vorgestellt. Um diese Architekturen zu gruppieren und zusammenzufassen, stellen wir Folgendes fest:
- Um Daten zu generieren (z. B. Bilder, Audio oder Text), würden wir sie verwenden:
- GANs
- VAEs
- Rekurrente Neuronale Netze
- Um Bilder zu modellieren, würden wir wahrscheinlich verwenden:
- CNNs
- DBNs
- Um Sequenzdaten zu modellieren, würden wir wahrscheinlich verwenden:
- Rekurrente neuronale Netze/LSTMs
In den folgenden Kapiteln stellen wir reale Code-Beispiele für die meisten dieser Netze vor und behandeln Überlegungen zum Training und Tuning verschiedener Arten von neuronalen Netzen. In Kapitel 5 sehen wir, wie diese Konzepte in API-Beispielen zusammenkommen, in denen wir die DL4J Deep Learning Bibliothek in Aktion sehen. Bevor wir zu weiteren Beispielen übergehen, wollen wir ein paar Themen besprechen, die im Zusammenhang mit Deep Learning häufig auftauchen.
Wird Deep Learning andere Algorithmen überflüssig machen?
Die Debatte darüber, dass Deep Learning andere Modellierungsalgorithmen überflüssig macht, wird immer wieder in Internetforen geführt. Die Antwort lautet heute "Nein", denn für viele einfachere Anwendungen des maschinellen Lernens haben wir gesehen, dass viel einfachere Algorithmen für die erforderliche Modellgenauigkeit ausreichen. Modelle wie die logistische Regression sind auch einfacher zu handhaben, daher müssen wir bei dieser Entscheidung den Aufwand gegen die erforderliche Genauigkeit in der jeweiligen Domäne abwägen. Deep-Learning-Algorithmen sind jedoch auch dann gut, wenn wir nur wenig über das angewandte Gebiet wissen und uns mit der Erstellung von Merkmalen schwer tun.
Verschiedene Probleme haben verschiedene beste Methoden
Beim maschinellen Lernen geht es im Großen und Ganzen darum, den richtigen Ansatz in der entsprechenden Situation anzuwenden. Wir sind noch nicht an dem Punkt angelangt, an dem eine einzige Technik die Landschaft dominiert, also müssen wir den Problemraum und die Daten jedes Mal auswerten, wenn wir nach dem besten Modell suchen. Das basiert auf dem "No free lunch theorem".
No Free Lunch Theorem
Das "No free lunch theorem" besagt, dass es kein einziges Modell gibt, das für jedes Problem funktioniert. Die Annahmen für ein gutes Modell für ein bestimmtes Problem gelten möglicherweise nicht für ein anderes Problem. Beim maschinellen Lernen ist es üblich, mehrere Modelle auszuprobieren und dasjenige zu finden, das für ein bestimmtes Problem am besten funktioniert.
Jede maschinelle Lernmethode hat eine gewisse Verzerrung und Varianz. Je näher unser Modell am wahren zugrunde liegenden Modell liegt, desto besser können wir im Durchschnitt mit unserem Lernalgorithmus abschneiden.
Eine andere Möglichkeit, dies zu verstehen, ist, es aus der Sicht eines praktischen Beispiels zu betrachten. Wenn die Daten eindeutig linear sind, wie in den Visualisierungen zu sehen ist, würdest du dann versuchen, die Daten mit einem nichtlinearen Modell (z. B. einem mehrschichtigen Perzeptron) anzupassen? Nein, du würdest das Problem wahrscheinlich mit einer einfacheren Methode angehen, z. B. mit einer logistischen Regression. Bei Kaggle-Wettbewerben variiert die Methode, die am besten abschneidet, von Wettbewerb zu Wettbewerb. Allerdings sind Random Forests und Ensemble-Methoden in der Regel die Gewinner, wenn Deep Learning nicht gewinnt.
Die Größe des Eingabedatensatzes kann ein weiterer Faktor dafür sein, wie geeignet Deep Learning für ein bestimmtes Problem sein kann. Die empirischen Ergebnisse der letzten Jahre haben gezeigt, dass Deep Learning die beste Vorhersagekraft hat, wenn die Datenmenge groß genug ist. Das bedeutet, dass die Ergebnisse von Deep Learning mit zunehmender Größe des Datensatzes besser werden. Neuronale Netze haben eine größere Darstellungskapazität als lineare Modelle und können die Daten besser ausnutzen. Eine gute Faustregel besagt, dass ein Praktiker in der Lage sein sollte, ein neuronales Netz mit mindestens 5.000 beschrifteten Trainingsbeispielen zu trainieren.
Wann brauche ich Deep Learning?
Zum Abschluss dieses Kapitels möchten wir dir ein paar einfache Regeln mit auf den Weg geben, die dir helfen sollen, die Frage zu beantworten: Braucht dieses Projekt Deep Learning?
Wann man Deep Learning einsetzen sollte
Du solltest Deep Learning nutzen, wenn...
- Einfachere Modelle (logistische Regression) erreichen nicht den Genauigkeitsgrad, den dein Anwendungsfall erfordert
- Du hast mit komplexem Mustervergleich in Bildern, NLP oder Audio zu tun
- Du hast Daten mit hoher Dimensionalität
- Du hast die Dimension der Zeit in deinen Vektoren (Sequenzen)
Wann man beim traditionellen maschinellen Lernen bleiben sollte
Du solltest ein traditionelles maschinelles Lernmodell verwenden, wenn...
- Du hast qualitativ hochwertige, niedrigdimensionale Daten, zum Beispiel spaltenförmige Daten aus einem Datenbankexport
- Du versuchst nicht, komplexe Muster in Bilddaten zu finden
Du wirst mit beiden Methoden schlechte Ergebnisse erzielen, wenn die Daten unvollständig und/oder von schlechter Qualität sind.
1 Goodfellow et al. 2014. "Generative Adversarial Networks".
2 Vondrick, Pirsiavash, und Torralba. 2016. "Videos mit Szenendynamik generieren".
3 Zhang et al. 2016. "StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks".
4 Das Bild stammt aus dem GitHub-Repository der DCGAN-Autoren.
5 Mirza und Osindero. 2014. "Conditional Generative Adversarial Nets".
6 Kalchbrenner et al. 2016. "Neural Machine Translation in Linear Time".
7 Gehring et al. 2016. "A Convolutional Encoder Model for Neural Machine Translation".
8 Nogueira dos Santos und Gatti. 2014. "Deep Convolutional Neural Networks for Sentiment Analysis of Short Texts".
9 Eickenberg et al. 2017. "Seeing it all: Convolutional network layers map the function of the human visual system".
10 Krizhevsky et al. 2012. "ImageNet Classification with Deep Convolutional Neural Networks".
11 Ein weiterer Hyperparameter, der häufig in CNNs verwendet wird, ist die Dilatation. DL4J unterstützt die Dilatation derzeit nicht (Stand: Version 0.7).
12 Ioffe und Szegedy. 2015. "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift".
13 Cooijmans et al. 2016. "Recurrent Batch Normalization".
14 Milletari, Navab, und Ahmadi. 2016. "V-Net: Fully Convolutional Neural Networks for Volumetric Medical Image Segmentation".
15 Maturana und Scherer. 2015. "VoxNet: Ein 3D Convolutional Neural Network für die Objekterkennung in Echtzeit".
16 Henaff, Bruna, und LeCun. 2015. "Deep Convolutional Networks on Graph-Structured Data".
17 Conneau et al. 2016. "Very Deep Convolutional Networks for Text Classification".
18 LeCun et al. 1998. "Gradientenbasiertes Lernen bei der Dokumentenerkennung".
19 Krizhevsky, Sutskever und Hinton. 2012. "ImageNet Classification with Deep Convolutional Neural Networks".
20 Zeiler und Fergus. 2013. "Visualisierung und Verständnis von Faltungsnetzen".
21 Szegedy et al. 2015. "Going Deeper with Convolutions".
22 Simonyan und Zisserman. 2015. "Very Deep Convolutional Networks for Large-Scale Image Recognition".
23 He et al. 2015. "Deep Residual Learning for Image Recognition".
24 Graves und Jaitly. 2014. "Towards End-to-End Speech Recognition with Recurrent Neural Network".
25 Nayebi und Vitelli. 2015. "GRUV: Algorithmische Musikgenerierung mit rekurrenten neuronalen Netzen".
26 Sutskever, Vinyals, und Le. 2014. "Sequence to Sequence Learning with Neural Networks".
27 Hochreiter und Schmidhuber. 1997. "Langes Kurzzeitgedächtnis".
28 Gräber. 2012. "Supervised Sequence Labelling with Recurrent Neural Networks".
29 Gers, Schmidhuber und Cummins. 1999. "Lernen, um zu vergessen: Kontinuierliche Vorhersage mit LSTM".
30 Gräber. 2012. "Supervised Sequence Labelling with Recurrent Neural Networks".
31 Greff et al. 2015. "LSTM: A Search Space Odyssey".
32 Cho et al. 2014. "Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation".
33 Srivastava, Mansimov und Salakhutdinov. 2015. "Unüberwachtes Lernen von Videorepräsentationen mit LSTMs".
34 Venugopalan et al. 2014. "Videos in natürliche Sprache übersetzen mit tiefen rekurrenten neuronalen Netzen".
35 Wu et al. 2016. "Image Captioning and Visual Question Answering Based on Attributes and External Knowledge".
36 Mnih et al. 2014. "Recurrent Models of Visual Attention".
37 Karpathy und Fei-Fei. 2014. "Deep Visual-Semantic Alignments for Generating Image Descriptions".
38 Das Bild stammt aus Karpathy und Fei-Fei. 2014. "Deep Visual-Semantic Alignments for Generating Image Descriptions".
Get Deep Learning now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.