[PYTHON] Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 5

Einführung

Ich fing plötzlich an zu studieren "Deep Learning von Grund auf neu - Verarbeitung natürlicher Sprache". Beachten Sie, dass ich in Kapitel 5 gestolpert bin ist.

Die Ausführungsumgebung ist macOS Catalina + Anaconda 2019.10 und die Python-Version ist 3.7.4. Weitere Informationen finden Sie in Kapitel 1 dieses Memos.

Kapitel 5 Wiederkehrendes neuronales Netz (RNN)

Dieses Kapitel beschreibt das wiederkehrende neuronale Netzwerk.

5.1 Wahrscheinlichkeits- und Sprachmodell

Es erklärt das Sprachmodell und die Probleme beim Versuch, CBOW als Sprachmodell zu verwenden. Ich denke, dass der Grund, warum Gleichung 5.8 eine Annäherung ist, darin besteht, dass CBOW die Wortfolge ignoriert.

Da word2vec die Wortfolge ignoriert, scheint es, dass die in diesem Kapitel erlernte RNN besser ist, wenn sie für verteilte Ausdrücke verwendet wird. Die RNN wurde jedoch zuerst und später geboren, um die Anzahl der Vokabeln zu erhöhen und die Qualität zu verbessern. Es ist interessant, dass word2vec von der Firma vorgeschlagen wurde und dass es tatsächlich der entgegengesetzte Fluss war.

5.2 Was ist RNN?

Erklärung von RNN. Die Tanh-Funktion (Bicurve-Tangentenfunktion) wird als Aktivierungsfunktion angezeigt, aber aus irgendeinem Grund gibt es in diesem Buch keine Erklärung. Lassen Sie uns also mit "Tanh" nach Details suchen.

Etwas besorgniserregender ist die Unterstützung, zum Anfang zurückzukehren, wenn die Daten beim Mini-Batch-Lernen bis zum Ende verwendet werden. In diesem Fall werden das Ende und der Anfang des Korpus verbunden. In erster Linie behandelt dieses Buch den PTB-Korpus jedoch als "eine große Zeitreihendaten" und berücksichtigt nicht einmal die Satzbrüche (siehe den Teil mit der Skorpionmarke in der Mitte von S.87). Daher kann es sinnlos sein, sich Gedanken darüber zu machen, ob das Ende und der Anfang miteinander verbunden sind.

5.3 Implementierung von RNN

Die Implementierung sollte etwas schwierig sein, da der Wiederholungsknoten nach dem Weglassen des Bias $ b $ in den Abbildungen 5-19 und 5-20 weggelassen wird. Die Vorwärtsausbreitung kann wie in der Abbildung gezeigt implementiert werden, da sie gesendet wird. Bei der Berechnung von $ db $ durch Rückausbreitung muss sie jedoch bewusst hinzugefügt werden. Gerade dieser Teil der Qualitätssicherung befand sich auch in Teratail (Teratail: Warum Summe Summe db mit Achse = 0 in Backpropagation von RNN).

Auch die Tanh-Funktion, die dieses Mal herauskam, wird ohne Erklärung implementiert, aber die Vorwärtsausbreitung kann mit numpy.tanh () wie im Code des Buches berechnet werden. Für die Rückausbreitung ist der Teil "dt = dh_next * (1 --h_next ** 2)" die Differenzierung von tanh, die ausführlich in "Anhang A Unterscheidung von Sigmoidfunktion und tanh-Funktion" am Ende des Buches erläutert wird. es gibt.

Außerdem wird auf Seite 205 die Geschichte von "... (3-Punkt-Punkt)" angezeigt, die der Geschichte des "3-Punkt-Lesers" auf Seite 34 entspricht. [Kapitel 1 dieses Memos](https://qiita.com/segavvy/items/91be1d4fc66f7e322f25#13-%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3 % 83% AB% E3% 83% 8D% E3% 83% 83% E3% 83% 88% E3% 83% AF% E3% 83% BC% E3% 82% AF% E3% 81% AE% E5% AD Wie ich in% A6% E7% BF% 92) geschrieben habe, ist es besser, die Beziehung zwischen Slices und Ansichten von ndarray zu verstehen, als sich daran zu erinnern, dass es mit 3-Punkt-Punkten überschrieben wird.

5.4 Implementierung von Layern, die Zeitreihendaten verarbeiten

Die Erklärung des Codes wird weggelassen, ist aber einfach und verständlich.

Die Time Embedding-Ebene (TimeEmbedding-Klasse in common / time_layers.py) durchläuft einfach $ T $ von Embedding-Ebenen.

In der Time Affine-Ebene (TimeAffine-Klasse von common / time_layers.py) wird anstelle von $ T $ -Zeiten die Stapelgröße $ N $ in $ T $ -Zeiten transformiert und sofort berechnet, und das Ergebnis ist das Original. Es wird effizienter, indem es in eine Form umgewandelt wird.

Die Ebene "Zeit-Softmax mit Verlust" ("TimeSoftmaxWithLoss" -Klasse in common / time_layers.py) entspricht den Angaben im Buch, aber ich befürchtete, dass eine Maske mit "ignore_label" implementiert wurde. Wenn das richtige Antwortetikett -1 ist, werden sowohl der Verlust als auch der Gradient auf 0 gesetzt und bei der Berechnung von $ L $ vom Nenner $ T $ ausgeschlossen. Der Vorgang zum Setzen des richtigen Antwortetiketts auf -1 ist jedoch jetzt Ich glaube nicht, dass es da war. Ich kann es in einem späteren Kapitel verwenden, also werde ich es vorerst verlassen.

5.5 Lernen und Bewerten von RNNLM

Leider liefert diese Implementierung keine guten Ergebnisse, wenn der gesamte PTB-Datensatz verwendet wird. Daher habe ich mit dem vorherigen Kapitel Aozora Bunkos vorab geschriebener Text gespielt. Ich habe auch aufgehört zu studieren. Es wird gesagt, dass es im nächsten Kapitel verbessert wird, also werde ich es dort versuchen.

Abgesehen davon fand ich den Code rn = np.random.randn in SimpleRnnlm .__ init __ () nützlich, da Python Funktionen einfach in Variablen einfügen und verwenden kann. In der Sprache C ist es kompliziert, eine Funktion in eine Variable (einen Funktionseinstiegspunkt in eine Variable) mit vielen "*" und "()" einzufügen, und es ist kompliziert, sie zu verwenden, und ich bin in meinen aktiven Tagen nicht wirklich gut darin. Did: Schweiß:

5.6 Zusammenfassung

Ich habe es geschafft, Zeitreihendaten zu verarbeiten. .

Das ist alles für dieses Kapitel. Wenn Sie Fehler haben, wäre ich Ihnen dankbar, wenn Sie darauf hinweisen könnten.

Recommended Posts

Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 5
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 2
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 1
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 4
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 1
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 3
Ein Amateur stolperte in Deep Learning von Grund auf neu. Hinweis: Kapitel 7
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 5
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 4
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 2
[Lernnotiz] Deep Learning von Grund auf neu gemacht [Kapitel 7]
Deep Learning / Deep Learning von Grund auf neu Kapitel 6 Memo
[Lernnotiz] Deep Learning von Grund auf neu gemacht [Kapitel 5]
[Lernnotiz] Deep Learning von Grund auf neu gemacht [Kapitel 6]
Deep Learning / Deep Learning von Grund auf neu Kapitel 7 Memo
[Lernnotiz] Deep Learning von Grund auf neu gemacht [~ Kapitel 4]
Deep Learning von Grund auf neu
Deep Learning von Grund auf neu ① Kapitel 6 "Lerntechniken"
Deep Learning von Grund auf neu Kapitel 2 Perceptron (Memo lesen)
Deep Learning von Grund auf 1-3 Kapitel
Deep Learning / Deep Learning von Grund auf neu 2 Kapitel 4 Memo
Deep Learning / Deep Learning von Grund auf neu Kapitel 3 Memo
Deep Learning / Deep Learning von Null 2 Kapitel 5 Memo
Erstellen Sie mit Docker eine Umgebung für "Deep Learning von Grund auf neu"
Tiefes Lernen von Grund auf neu (Kostenberechnung)
Deep Learning / Deep Learning von Null 2 Kapitel 7 Memo
Deep Learning / Deep Learning von Null 2 Kapitel 8 Memo
Deep Learning / Deep Learning von Grund auf neu Kapitel 5 Memo
Deep Learning / Deep Learning von Grund auf neu Kapitel 4 Memo
Deep Learning / Deep Learning von Grund auf neu 2 Kapitel 3 Memo
Deep Learning Memo von Grund auf neu gemacht
Deep Learning / Deep Learning von Null 2 Kapitel 6 Memo
Schreiben Sie Ihre Eindrücke von der Deep Learning 3 Framework Edition, die von Grund auf neu erstellt wurde
Tiefes Lernen von Grund auf neu (Vorwärtsausbreitung)
Tiefes Lernen / Tiefes Lernen von Grund auf 2-Versuchen Sie, GRU zu bewegen
"Deep Learning von Grund auf neu" mit Haskell (unvollendet)
[Windows 10] Aufbau einer "Deep Learning from Scratch" -Umgebung
Lernbericht über das Lesen von "Deep Learning von Grund auf neu"
[Deep Learning von Grund auf neu] Über die Optimierung von Hyperparametern
"Deep Learning from Grund" Memo zum Selbststudium (Teil 12) Deep Learning
Python vs Ruby "Deep Learning von Grund auf neu" Kapitel 2 Logikschaltung von Perceptron
Python vs Ruby "Deep Learning von Grund auf neu" Kapitel 4 Implementierung der Verlustfunktion
Selbststudien-Memo "Deep Learning from Grund" (unlesbares Glossar)
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 9) MultiLayerNet-Klasse
Ein Amateur versuchte Deep Learning mit Caffe (Einführung)
GitHub des guten Buches "Deep Learning von Grund auf neu"
Ein Amateur versuchte Deep Learning mit Caffe (Übung)
[Lernnotiz] Deep Learning von Grund auf ~ Implementierung von Dropout ~
Ein Amateur hat Deep Learning mit Caffe ausprobiert (Übersicht)
Python vs Ruby "Deep Learning von Grund auf neu" Zusammenfassung
"Deep Learning from Grund" Memo zum Selbststudium (10) MultiLayerNet-Klasse
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 11) CNN
Python vs Ruby "Deep Learning von Grund auf neu" Kapitel 3 Implementierung eines dreischichtigen neuronalen Netzwerks
Deep Learning von Grund auf neu Die Theorie und Implementierung des mit Python erlernten Deep Learning Kapitel 3
Lua-Version Deep Learning von Grund auf neu Teil 5.5 [Bereitstellung von pkl-Dateien in Lua Torch]
[Deep Learning von Grund auf neu] Ich habe die Affine-Ebene implementiert
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 19) Datenerweiterung
Anwendung von Deep Learning 2 von Grund auf neu Spam-Filter