Rekurrente Neuronale Netze leicht erklärt – Teil 1

November 28, 2021
7 min
NLP
Credits to blende12 from pixabay.com

Im vorherigen Blogeintrag haben wir beschrieben, warum man Sequence Models benötigt und in welchen Fällen man diese einsetzt. Ein Sequence Model an sich ist kein Machine Learning Algorithmus. Dadurch wird lediglich das Prinzip beschrieben, sequenzielle Daten durch Machine Learning Algorithmen zu verarbeiten. In diesem Artikel geht es um die wohl bekannteste Implementierung von Sequence Models – um Rekurrente Neuronale Netze, auf Englisch Recurrent Neural Networks oder schlicht RNNs. Wir werden zeigen, wie man Sequence Models umsetzt und wie sich der Aufbau von einem klassischen Neuronalen Netz – einem Feedforward Neural Network (FNN) – unterscheidet. Natürlich werden wir dabei wieder auf konkrete Beispiele eingehen, um das Thema so anschaulich wie möglich zu erklären.

Klassische Neuronale Netze

Klassische neuronale Netze sind ein gutes Mittel dafür, durch das Training auf einer großen Anzahl von Daten, Vorhersagen für bestimmte Ausgangsvariablen auf Basis von Inputs zu treffen. Um das zu verdeutlichen, möchten wir im Folgenden kurz skizzieren, wie die Netze aufgebaut sind und wie die Vorhersagen dadurch zustande kommen. Wenn euch der Aufbau und die Funktionsweise von neuronalen Netzen im Detail interessiert, könnt ihr das in diesem in diesem Blogeintrag nachlesen.

Ein Neuronales Netz besteht stets aus einem Input Layer, einem Output Layer und meistens zusätzlich aus Hidden Layern. Im Input Layer werden dabei die Eingangsdaten vorgegeben und im Output Layer die Vorhersage(n) getroffen. Möchte man zum Beispiel die Miete einer Kölner Wohnung auf Basis verschiedener Inputdaten durch ein Neuronales Netz vorhersagen, so könnten die Inputs dafür die Wohnungsgröße, das Baujahr des Hauses, die Anzahl der Supermärkte in einem Radius von einem Kilometer oder der Abstand zum Dom sein.

Der Abstand der Wohnungen zum Kölner Dom ist möglicherweise interessant für die Vorhersage des Mietpreises. (Screenshot Google Maps)  

Durch das Training auf Basis vieler Inputdaten und der dazugehörigen tatsächlichen Mietpreise können durch das Neuronale Netz Vorhersagen für andere Mietobjekte getroffen werden, indem das Netz ermittelt, welche Inputdaten den wohl größten Einfluss auf den Mietpreis haben. Keine der Vorhersagen hat einen Einfluss auf die vorhergesagte Miete in einer anderen Wohnung. Ob die Miete einer Wohnung in Ehrenfeld auf 600€ im Monat vorhergesagt wird, hat keinen Einfluss auf die darauf folgende Vorhersage der Miete einer Wohnung in Deutz. Jede Vorhersage steht also für sich allein, da die einzelnen Mietpreise der Objekte unabhängig voneinander sind.

Doch wie würde sowas mit sequenziellen Daten aussehen, z.B. bei einer maschinellen Übersetzung? Dies möchten wir anhand eines Beispiels zeigen:

Die Input-Daten dieses neuronalen Netzes sind Sätze, die ins Englische übersetzt werden sollen. Das Modell würde hierfür auf einer großen Anzahl an deutsch-englischen Satzpaaren trainiert werden, z.B. auf dem Satz „Leonie geht gerne ins Kino“. Ein Problem des neuronalen Netzes wird sofort klar. Der äquivalente englische Satz beinhaltet eine andere Anzahl an Wörtern. Die Anzahl der Units der Input- und Output-Layer ist in diesem Modell aber vorgegeben. Dieses Problem könnte jedoch mit einer kleinen Trickserei umgangen werden, indem man die Anzahl der Units in Input- und Output-Layern relativ hoch setzt und fehlende Units z.B. mit Nullen ausfüllt. Dies würde die Mehrzahl der Sätze allerdings verfälschen.

Das noch größere Problem ist jedoch, dass das Modell kein Gefühl dafür entwickelt, um welche Art von Wörtern es sich bei bestimmten Inputs handelt. In diesem Beispiel befindet sich der Name „Leonie“ an erster Stelle. Das Modell sollte jedoch bei anderen Sätzen „Leonie“ auch als Namen klassifizieren – also den Output-Satz auch korrekt bilden, auch wenn der Name nicht an erster Stelle steht. Dies ist mit dieser Modellarchitektur nicht möglich.

Rekurrente Neuronale Netze

Vereinfacht kann man sagen, dass eine Übersetzung mittels rekurrenten neuronalen Netzen Wort für Wort stattfindet, ohne dass dabei der Zusammenhang im Satz außen vor gelassen wird. Konkret wird ein Wort yt mithilfe des Wortes xt und den Informationen aus dem Wort vorher at-1 vorhergesagt. In einem beispielhaften Schema sieht das wie folgt aus:

Das bedeutet, dass das Wort an dritter Stelle (crisps) nicht nur mithilfe des deutschen Wortes an dritter Stelle Chips übersetzt wurde, sondern auch Informationen aus vorherigen Wörtern verwendet wurde. Dadurch werden zusätzliche Informationen zu dem Wort übermittelt. Sieht eine Übersetzungssoftware nur das Wort Chips, könnte auch das Computerbauteil gemeint sein. Durch das Miteinbeziehen der vorherigen Begriffe kann die Software erkennen, dass es sich hierbei aber wohl doch um das Lebensmittel handeln muss.

Forward Propagation

Doch wie berechnet man rekurrente neuronale Netze? Bei klassischen neuronalen Netzen nutzt man die Parameter w und b, um durch Input-Daten die Werte der Hidden Units oder der Output-Daten zu berechnen. Dies ist hier grundsätzlich nicht anders – auch hier nutzt man Gewichte (w) und einen Bias (b), um Werte zu berechnen.

Jedoch werden die Werte auf andere Weise verknüpft. Um den linearen Teil eines Neurons zu berechnen, nutzen wir neben x, w und b zusätzlich auch den Wert des vorherigen Neurons at-1. Eingesetzt in eine Aktivierungsfunktion g (z.B. tanh oder ReLU) sieht die Berechnung von at dann folgendermaßen aus:

a0 ist dabei ein Vektor von Nullen.

Um ein Wort vorherzusagen (also um y zu berechnen), nutzt man ebenso eine Aktivierungsfunktion (z.B. Sigmoid oder Softmax), die wie bei einer Berechnung üblich neben dem Inputwert durch w und b bestimmt wird. yt berechnet man also wie folgt:

Durch diese Art der Berechnung fließen die Ergebnisse und Berechnungen von vorherigen Worten in einem Satz stets auch in die Berechnung eines neuen Worts ein.

Wer genau hinsieht, dem ist vielleicht auch aufgefallen, dass es sich in unserem Beispiel um gleich lange Sätze in beiden Sprachen handelt. Das Beispiel im ersten Satz (Leonie geht gerne ins Kino) könnte auch durch diese Architektur nicht ohne weiteres übersetzt werden. Durch diese Art der Berechnung ist also das Problem von verschieden langen Sätzen noch nicht gelöst.

Außerdem ist es ja auch möglich, dass ein satzbestimmendes, sinngebendes Wort (wie das Wort isst) erst weiter hinten in einem Satz steht. Beginnt ein Satz beispielsweise mit „Er findet die Ärzte …“, so wäre es für die Vorhersage weiterer Wörter durchaus interessant, ob es sich dabei um Mediziner handelt oder um den Namen einer Band. Das Modell könnte bei reiner Betrachtung der vorherigen Wörter keinen Unterschied feststellen und hätte somit keine Informationen, in welche Richtung der Satz gehen soll. Diese Problematik wird durch Bidirektionale Rekurrente Netze gelöst. Wie diese aussehen, wie man verschieden lange Sätze übersetzt und wie die Backpropagation aussieht, erfahrt ihr im nächsten Teil dieser Serie.

.

In diesem Video erklärt Richard Socher die Notation etwas anders, vielleicht hilft euch das beim Verständnis :) 

Referenzen
Portrait of Blogger
Nicolai Maisch
<  Previous
Sequence Models – eine Einführung
Next  >
Rekurrente Neuronale Netze leicht erklärt - Teil 2

Kommentare