Rekurrente Neuronale Netze leicht erklärt - Teil 2

December 27, 2021
5 min
NLP
Credits to blende12 from pixabay.com

Den ersten Teil unserer Serie über Rekurrente Neuronale Netze habe wir mit zwei Schwächen der simplen Architektur von RNNs abgeschlossen. Dabei ging es zum einen darum, wie man unterschiedlich lange Sätze übersetzen kann und zum anderen um die Übersetzung von Wörtern, deren Sinn von Wörtern abhängen, die weiter hinten im Satz stehen. Bei der bisher vorgestellten Architektur werden Kontextinformationen ausschließlich in Leserichtung übergeben. In diesem Artikel werden wir Lösungen für beide Probleme vorstellen und zeigen, wie die Lösungen in die Architektur eines RNN eingebaut werden. Davor gehen wir zudem noch auf die Backpropagation von RNNs ein.

Backpropagation

Im ersten Teil haben wir die Forward Propagation eines RNN vorgestellt. Hier möchten wir mit der Backpropagation anknüpfen. Wie bei jeder Backpropagation startet auch diese mit dem Vergleich der Vorhersage und des tatsächlichen Werts. Dies entspricht im Bereich NLP der korrekten Vorhersage von Wörtern. Die Differenz zwischen der Vorhersage und dem tatsächlichen Wort wird mathematisch mithilfe des Verlusts (Loss) gebildet. Das Berechnen des Verlusts findet für jedes Wort einzeln statt.

Verlust in einem RNN

Um den Verlust zu berechnen, könnte beispielsweise der Cross Entropy Loss genutzt werden:

Es könnten auch andere Verlustfunktionen genutzt werden. Der Verlust des gesamten Satzes berechnet sich durch die Summe der Verluste aller Wörter, also aus:

Ausgehend von den Verlusten werden nun die Parameter w und b wie bei einer gewöhnlichen Backpropagation gebildet. Der Unterschied besteht dabei im Miteinbeziehen der Parameter von at+1 bei der Berechnung von at bei der Backpropagation. Im Schaubild sieht das dann so aus:

Backpropagation bei einem RNN

Bidirektionale RNNs

Durch die Backpropagation werden die Parameter für die Vorhersagen berechnet. Was dabei jedoch nicht berücksichtigt wird, sind die Einflüsse auf Vorhersagen von Wörtern, die weiter hinter hinten im Satz stehen. Dieses Problem kann durch sogenannte Bidirektionale Rekurrente Neuronale Netze (BRNN) gelöst werden.

Dabei wird das Prinzip von RNNs umgedreht und dem Netz zusätzlich hinzugefügt. Veranschaulicht sieht das folgendermaßen aus:

Bidirektionales Rekurrentes Neuronales Netz

In grün ist das ursprüngliche RNN abgebildet, das um das violette RNN ergänzt wurde. Die Berechnung des umgekehrten RNN verläuft analog zu den Berechnungen des ursprünglichen RNN. Auch die Backpropagation läuft analog ab. Die jeweiligen Parameter für a sind in der Abbildung mit einem Pfeil für die entsprechende Richtung gekennzeichnet. Der Clou an BRNNs ist, dass die Vorhersagen für y abhängig von beiden Richtungen sind. Die Sätze werden quasi von beiden Seiten her gebildet. Dadurch erreicht man, dass bei der Vorhersage von Wörtern auch hintere Satzteile berücksichtigt werden.

Informationsfluss in einem Bidirektionalen RNN

Die Übersetzung des Wortes Chips wird demnach durch die Informationen vor dem Wort und die Informationen nach dem Wort gebildet. Dies kann die Qualität von Übersetzungen erheblich verbessern, da Satzzusammenhänge besser abgebildet werden.

Verschiedene Arten von RNNs

Sind die Sätze bei Übersetzungsaufgaben unterschiedlich lang oder ist der Task ein anderer als die Übersetzung, muss eine andere Modellarchitektur gewählt werden. In den bisher gezeigten Beispielen haben wir uns der Einfachheit halber auf Übersetzungsaufgaben mit gleich langen Sätzen beschränkt. Dies deckt jedoch nicht die ganze Bandbreite an Möglichkeiten von RNNs ab.

In diesem Artikel haben wir schon verschiedene Use-Cases gezeigt, die mithilfe von RNNs gelöst werden können. Die Use-Cases wurden dabei in One-to-Many, Many-to-One und Many-to-Many eingeteilt. One oder Many beschreibt dabei die Anzahl der Sequenzen in den Input- oder Output-Daten. Wie dies konkret aussieht und wie die entsprechenden RNNs im Bereich des Natural Language Processing aussehen, möchten wir jetzt beschreiben.

One-to-Many

Architekturen mit One-to-Many sind im Bereich des NLP eher unüblich. Denkbar wäre es bei Natural Language Generation Tasks – also Text, bei dem das erste Wort vorgegeben wird und bei dem dann durch das Hinzufügen immer weiterer Worte ein Satz oder ein gesamter Text gebildet. Basis für die Vorhersage des Worts bildet dabei stets das vorherige Wort.

Many-to-One

Sequence Models werden nach Many-to-One eingesetzt, wenn eine Sequenz eingelesen wird und ein einzelnes Ergebnis ausgegeben wird. Ein Beispiel dafür ist die Sentiment Analysis. Dabei wird beispielsweise detektiert, ob eine Kundenrezension positiv ist oder negativ. Ein Sentiment Analysis System könnte z.B. erkennen, dass die Rezension „Bin sehr zufrieden mit dem Kauf“ positiv ist. Dabei werden die Informationen aus den jeweiligen Inputs von Wort zu Wort weitergegeben, bis am Ende ein Ergebnis ermittelt wird.

Automatische Bewertung einer Kundenrezension
Many-to-Many

Für Many-to-Many Architekturen gibt es zwei verschiedene Möglichkeiten. Den einen Anwendungsfall haben wir schon ausführlich behandelt. So zum Beispiel bei den Übersetzungen, die weiter oben dargestellt sind. Doch diese Architektur ist nur für Übersetzungen möglich, bei denen die Länge der Sequenzen der Inputs und Outputs identisch sind – es sich also um gleich lange Sätze auf beiden Sprachen handelt.

Die andere Möglichkeit kombiniert Many-to-One und One-to-Many, um jeweils Sequenzen in In- und Outputs zu behandeln. Beim Anwendungsfall der Übersetzung wird also der gesamte Satz eingelesen. Aus dem letzten Hidden State wird dann aber kein einzelner Wert generiert (wie im Beispiel oben), sondern ein Satz nach und nach gebildet – wie bei den One-to-Many Use-Cases. Die Informationen über den Satz und die einzelnen Elemente werden also einmal „übergeben“ und auf Basis dessen wird der Zielsatz nach und nach gebildet.

Übersetzung mit einem RNN

Durch diese Architektur eines RNNs können Übersetzungen realisiert werden. Diese Architektur hat allerdings eine Schwäche, je länger die Sätze werden, denn sämtliche Informationen über den Satz aus allen Teilen des Satzes müssen in einem einzigen Übergabewert gespeichert werden – also einem einzigen Vektor. Je weiter ein Wort vorne in einem Satz steht, desto schwieriger ist es dem Netz dann, angemessen viele Informationen über diesen Input zu speichern. Je länger der Satz insgesamt ist, desto schwieriger ist es, alle Informationen in dem Übergabevektor zu speichern.

Referenzen
Portrait of Blogger
Nicolai Maisch
<  Previous
Rekurrente Neuronale Netze leicht erklärt – Teil 1
Next  >
GRU und LSTM - eine Einführung

Kommentare