[PYTHON] Rekursives neuronales Netzwerk: Eine Einführung in RNN

Rekursive Neuronale Netze (RNNs) waren auf dem Gebiet der Verarbeitung natürlicher Sprache sehr erfolgreich und sind derzeit einer der heißesten Algorithmen. Ich denke jedoch, dass es nur eine begrenzte Anzahl von Büchern gibt, die erklären, wie RNN tatsächlich funktioniert und wie man es baut, bevor es populär wird. Dieser Beitrag konzentrierte sich auf diesen Teil und wurde mit meinem Freund Denny (Autor von WildML Blog) geschrieben.

Jetzt möchte ich das RNN-basierte Sprachmodell erklären. Das Sprachmodell hat zwei Verwendungszwecke. Die erste ist zu bewerten, wie wahrscheinlich es ist, dass ein Satz tatsächlich erscheint. Diese Punktzahl ist ein Kriterium für die grammatikalische und semantische Korrektheit. Solche Modelle werden beispielsweise bei der maschinellen Übersetzung verwendet. Zweitens kann das Sprachmodell neuen Text generieren (ich persönlich denke übrigens, dass es eine coolere Verwendung ist). Auch wenn es auf Englisch ist, erklärt und entwickelt Andrej Karpathys Blog ein RNN-Sprachmodell auf Wortebene, daher braucht es Zeit. Wenn Sie eine haben, lesen Sie diese bitte.

Der Leser geht davon aus, dass die rudimentären Dinge über neuronale Netze unterdrückt werden. Wenn nicht, [Erstellen wir mit Python ein neuronales Netzwerk ohne Verwendung einer Bibliothek](http://blog.moji.ai/2015/12/python% e3% 81% a7% e3% 83% a9 % e3% 82% a4% e3% 83% 96% e3% 83% a9% e3% 83% aa% e3% 83% bc% e3% 82% 92% e4% bd% bf% e3% 82% 8f% e3 % 81% 9a% e3% 81% ab% e3% 80% 81% e3% 83% 8b% e3% 83% a5% e3% 83% bc% e3% 83% a9% e3% 83% ab% e3% 83 Bitte lesen Sie% 8d% e3% 83% 83% e3% 83% 88 /). In diesem Beitrag wird ein nicht rekursives Netzwerkmodell erläutert und erstellt.

Was ist RNN (Recurrent Neural Network)?

Der Vorteil von RNN besteht darin, dass Sie fortlaufende Informationen wie Sätze verwenden können. Die traditionelle Idee neuronaler Netze ist nicht so, vorausgesetzt, die Eingabedaten (und die Ausgabedaten) sind unabhängig voneinander. Diese Annahme ist jedoch oft falsch. Wenn Sie beispielsweise das nächste Wort vorhersagen möchten, sollten Sie wissen, was das vorherige Wort war, oder? R in RNN bedeutet Wiederkehrend, wodurch Sie unabhängig von der vorherigen Berechnung für jedes kontinuierliche Element dieselbe Arbeit ausführen können. Mit anderen Worten, RNN hat den Speicher, um sich zuvor berechnete Informationen zu merken. Theoretisch kann RNN sehr lange Textinformationen verwenden. Wenn ich es jedoch tatsächlich implementiere, kann ich mich nur an die Informationen von vor einigen Schritten erinnern (ich werde weiter unten näher auf diese Angelegenheit eingehen). Schauen wir uns nun eine allgemeine RNN in der folgenden Tabelle an.

rnn.jpg A recurrent neural network and the unfolding in time of the computation involved in its forward computation. Source: Nature

Das obige Diagramm wird innerhalb des RNN erweitert. Bereitstellen bedeutet einfach, ein bestelltes Netzwerk zu schreiben. Wenn Sie beispielsweise einen Satz aus 5 Wörtern haben, ist das erweiterte Netzwerk ein 5-Schicht-Neuronales Netzwerk mit 1 Schicht und 1 Wort. Die Formel zur Berechnung der RNN lautet wie folgt.

$ x_t $ ist die Eingabe für den Schritt $ t $. Zum Beispiel ist $ x_1 $ ein Vektor, der den folgenden Wörtern zugeordnet ist: $ s_t $ ist ein verstecktes Element während des $ t $ -Schritts. Dies ist der Speicher des Netzwerks. $ s_t $ wird basierend auf dem vorherigen versteckten Element berechnet. Und die Eingabe in diesem Schritt ist $ s_t = f (U x_x + W s_ {t-1}) $. Zu den $ f $ -Funktionen gehören tanh und ReLU Nichtlinearer Typ ist üblich. Das $ s_ {-1} $, das zur Berechnung des ersten versteckten Elements benötigt wird, beginnt normalerweise bei 0. $ o_t $ ist die Ausgabe im Schritt $ t $. Wenn Sie beispielsweise die folgenden Wörter vorhersagen möchten, ist $ o_t $ ein Vektor von Vorhersagewahrscheinlichkeiten ($ o_t = softmax (V s_t) $).

Was RNN kann

RNN hat bereits viele Erfolgsgeschichten auf dem Gebiet der Verarbeitung natürlicher Sprache hinter sich. Nachdem wir ein wenig über RNNs verstanden haben, werden wir eine der am häufigsten verwendeten RNNs vorstellen, LSTM. LSTM kann entfernte Schrittbeziehungen besser lernen als RNN. Keine Sorge, LSTM hat im Grunde die gleiche Algorithmusstruktur wie das diesmal zu erstellende RNN. Der einzige Unterschied besteht in der Art und Weise, wie die verborgenen Elemente berechnet werden. Wir planen, LSTM in Zukunft zu behandeln. Wenn Sie interessiert sind, registrieren Sie sich bitte für den E-Mail-Newsletter.

Sprachmodell und Satzgenerierung

Das Sprachmodell kann die Erscheinungswahrscheinlichkeit des nächsten Wortes vorhersagen, indem das vorherige Wort in einer Reihe von Wörtern verwendet wird. Es wird für die maschinelle Übersetzung verwendet, da es messen kann, wie oft Sätze erscheinen. Eine weitere gute Sache, um das nächste Wort vorhersagen zu können, ist, dass Sie ein generatives Modell erhalten können, das neue Sätze durch Stichproben aus der Wahrscheinlichkeit der Ausgabe generieren kann. Daher ist es möglich, abhängig von den Trainingsdaten verschiedene Dinge zu generieren. Im Sprachmodell sind die Eingabedaten eine kontinuierliche Folge von Wörtern. Und die Ausgabe wird eine Folge von vorhergesagten Wörtern sein. Wenn wir das Netzwerk trainieren, möchten wir, dass die Ausgabe des $ t $ -Schritts die folgenden Wörter enthält, also setzen wir $ o_t = x_ {t + 1} $.

Obwohl es auf Englisch sein wird, ist das Folgende eine Referenz für Artikel über Sprachmodelle und Texterzeugung.

Maschinenübersetzung

Die maschinelle Übersetzung ähnelt dem Sprachmodell dahingehend, dass Sätze in der Ausgangssprache (z. B. Japanisch) als Eingabe verwendet werden. Und die Ausgabe sind zum Beispiel englische Sätze. Der Unterschied zum Sprachmodell besteht darin, dass die Ausgabedaten nach dem Lesen der vollständigen Eingabedaten mit der Verarbeitung beginnen. Daher benötigt das erste Wort des übersetzten Satzes die Information des vollständigen Eingabesatzes.

Screen-Shot-2015-09-17-at-10.39.06-AM-1024x557.png RNN for Machine Translation. Image Source: http://cs224d.stanford.edu/lectures/CS224d-Lecture8.pdf

Obwohl es auf Englisch ist, ist das Folgende eine Referenz für Artikel zur maschinellen Übersetzung.

Spracherkennung

Unter Verwendung eines kontinuierlichen akustischen Signals von einer Schallquelle als Eingabe wird ein kontinuierliches Sprachsegment wahrscheinlich vorhergesagt.

Obwohl es auf Englisch sein wird, ist das Folgende eine Referenz für Artikel zur Spracherkennung.

Generierung von Bildzusammenfassungen

Sie können Convolutional Neural Networks und RNN verwenden, um eine Übersicht über ein unbeschriftetes Bild zu erstellen. Wie Sie aus dem Bild unten sehen können, ist es möglich, eine Zusammenfassung mit einer ziemlich hohen Wahrscheinlichkeit zu erstellen. Screen-Shot-2015-09-17-at-11.44.24-AM-1024x349.png

Deep Visual-Semantic Alignments for Generating Image Descriptions. Source: http://cs.stanford.edu/people/karpathy/deepimagesent/

Zug RNN

Das Erlernen von RNN ähnelt dem Trainieren eines herkömmlichen neuronalen Netzwerks, für RNN verwenden wir jedoch einen etwas anderen Backpropagation-Algorithmus. Da die RNN-Parameter in jedem Schritt im Netzwerk verwendet werden, verwendet der schrittweise Gradient die Berechnung des vorherigen Schritts sowie die Berechnung des aktuellen Schritts. Um beispielsweise den Gradienten von $ t = 4 $ zu berechnen, müssen Sie 3 Schritte zurückgehen und die Gradienten hinzufügen. Dies wird als Back Propagation Through Time (BPTT) bezeichnet. Wenn Sie nicht verstehen, was es bedeutet, machen Sie sich keine Sorgen. Ich werde die Details in einem späteren Beitrag schreiben. Denken Sie vorerst daran, dass RNNs, die mit BPTT trainiert wurden, umso schwieriger zu trainieren sind, je weiter sie entfernt sind. Ein LSTM-ähnlicher Algorithmus (eine Art RNN) wurde entwickelt, um dieses Problem zu lösen.

Anwendung von RNN

Jüngste Forschungsanstrengungen haben zur Entwicklung komplexerer RNN-Modelle geführt, mit denen die Mängel traditioneller RNNs beseitigt werden können. Ich werde das in einem zukünftigen Beitrag erklären, aber in diesem Beitrag werde ich Ihnen eine kurze Einführung geben.

Bidirectional RNN In Bidirectional RNN wird die Ausgabe von $ t $ nicht nur basierend auf dem unmittelbar vorhergehenden Element, sondern auch basierend auf dem nachfolgenden Element berechnet. Wenn Sie beispielsweise Wörter vorhersagen, die im vorherigen Teil nicht vorkommen, sollte die Wahrscheinlichkeit einschließlich der letzteren Wörter berechnet werden. Stellen Sie sich ein bidirektionales RNN als eine Überlappung zweier RNNs vor. Die Ausgabe wird aus zwei versteckten Elementen berechnet.

bidirectional-rnn-300x196.png

Deep (Bidirectional) RNN Deep RNN ähnelt Bidirectional RNN, hat jedoch mehrere Schichten pro Schritt. Wenn Sie versuchen, es zu implementieren, erhalten Sie eine höhere Lernfähigkeit (obwohl Sie immer noch viele Lerndaten benötigen).

Screen-Shot-2015-09-16-at-2.21.51-PM-272x300.png

LSTM-Netzwerk

Wie ich bereits erwähnt habe, ist das LSTM-Netzwerk heutzutage eines der beliebtesten RNNs. LSTM hat im Grunde die gleiche Struktur wie RNN, führt jedoch eine andere Funktion zur Berechnung versteckter Elemente durch. Der LSTM-Speicher heißt Cell und kann als Black Box mit dem vorherigen Element $ h_ {t-1} $ und dem aktuellen Element $ x_t $ als Eingaben betrachtet werden. Wählen Sie in der Blackbox die Zelle aus, die im Speicher gespeichert werden soll. Kombinieren Sie dann das vorherige Element, das aktuelle Element und die Eingabe. Infolgedessen ist es möglich, die Beziehungen zwischen weit voneinander entfernten Wörtern erfolgreich zu extrahieren. LSTM ist etwas schwer zu verstehen, aber wenn Sie interessiert sind, ist es auf Englisch, aber die Erklärung von hier ist leicht zu verstehen. schauen Sie bitte.

Recommended Posts

Rekursives neuronales Netzwerk: Eine Einführung in RNN
Einführung in Private TensorFlow
Eine Einführung in das maschinelle Lernen
Eine Einführung in die Python-Programmierung
Einführung in die Bayes'sche Optimierung
Eine Einführung in Mercurial für Nicht-Ingenieure
Erste Schritte mit Python für Nicht-Ingenieure
[Python Tutorial] Eine einfache Einführung in Python
Eine Einführung in Python für maschinelles Lernen
Eine Einführung in die Objektorientierung - Geben Sie einem Objekt ein Kind.
Eine Einführung in Python für C-Sprachprogrammierer
[Für Anfänger] Super Einführung in neuronale Netze, die selbst Katzen verstehen können
Einführung in MQTT (Einführung)
Einführung in Scrapy (1)
Eine Einführung in maschinelles Lernen für Bot-Entwickler
Einführung in Scrapy (3)
Erste Schritte mit Supervisor
Eine Einführung in die objektorientierte Programmierung für Anfänger von Anfängern
Einführung in Tkinter 1: Einführung
Eine Einführung in Cython, ohne tief zu gehen
Einführung in PyQt
Einführung in Scrapy (2)
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 13 Memo "Wiederkehrende neuronale Netze"
Eine Einführung in die statistische Modellierung für die Datenanalyse
[Linux] Einführung in Linux
Einführung in Scrapy (4)
Einführung in Python "Re" 1 Erstellen einer Ausführungsumgebung
Einführung in discord.py (2)
Eine Einführung in die Sprachanalyse für Musik-Apps
Einführung in Cython ohne tief zu gehen -2-
Rekursive neuronale Netze untersuchen: Können Sie periodische Funktionen reproduzieren?
Eine grobe Einführung in die neuronale maschinelle Übersetzungsbibliothek
Einführung in die verteilte Parallelverarbeitung von Python durch Ray
Einführung in Word2Vec, die auch Katzen verstehen können
Einführung in das maschinelle Lernen mit Simple Perceptron
Einführung in Lightning Pytorch
Erste Schritte mit Web Scraping
Einführung in nichtparametrische Felder
Einführung in EV3 / MicroPython
Einführung in die Python-Sprache
Einführung in OpenCV (Python) - (2)
Einführung in PyQt4 Teil 1
[PyTorch Tutorial ③] NEURALE NETZWERKE
Einführung in die Abhängigkeitsinjektion
Einführung in Private Chainer
Einführung in das maschinelle Lernen
Ich habe versucht, das grundlegende Modell des wiederkehrenden neuronalen Netzwerks zu implementieren
Eine Einführung in die Objektorientierung: Ändern Sie den internen Status eines Objekts
Einführung in Python, die auch Affen verstehen können (Teil 3)
Eine Einführung in die funktionale Programmierung zur Verbesserung der Debugging-Effizienz in 1 Minute
Eine Einführung in die moderne Socket-API zum Erlernen in C.
Einführung in Python, die auch Affen verstehen können (Teil 1)
Einführung in Python, die auch Affen verstehen können (Teil 2)