Vergessen Sie die Schicht in einem wiederkehrenden neuronalen Netzwerk (RNN) -


13

Ich versuche, die Dimensionen der einzelnen Variablen in einer RNN in der Vergessen-Ebene herauszufinden, bin mir jedoch nicht sicher, ob ich auf dem richtigen Weg bin. Das nächste Bild und die folgende Gleichung stammen aus Colahs Blogpost "Understanding LSTM Networks" :

Bildbeschreibung hier eingeben

wo:

  • xt ist die Eingabe desVektorsder Größem1
  • ht-1 ist Stand der Größe verstecktn1 - Vektor
  • ist eine Verkettung (zum Beispiel, wenn x t = [ 1 , 2 , 3 ] , h t - 1 = [ 4 , 5 , 6 ] , dann [ x t , h t - 1 ] = [ 1 , 2 , 3 , 4 , 5 , 6 ] )[xt,ht-1]xt=[1,2,3],ht-1=[4,5,6][xt,ht-1]=[1,2,3,4,5,6]
  • ist die Gewichtung derMatrixder Größe k ( m + n ) , wobei k die Anzahl der Zellzustände ist (wenn m = 3 und n = 3 im obigen Beispiel, und wenn wir 3 Zellzustände haben, dann ist w f = 3 3 Matrix)wfk(m+n)km=3n=3wf=33
  • ist eine Vorspannung der Größe k 1 Vektor, wobei k die Anzahl der Zellzustände ist (da k = 3 wie im obigen Beispiel ist, ist b f ein 3 1 Vektor).bfk1kk=3bf31

Wenn wir als: [ 1 2 3 4 5 6 5 6 7 8 9 10 3 4 5 6 7 8 ]wf

[1234565678910345678]

Und zu sein: [ 1 , 2 , 3 ]bf[1,2,3]

Dann ist Wf.[ht-1,xt]=

[1234565678910345678].[123456]=[91175133]

Dann können wir die Vorspannung W f addieren . [ H t - 1 , x t ] + b f =Wf.[ht-1,xt]+bf=

[91175133]+[123]=[92177136]

Dann füttern wir sie in eine Sigmoidfunktion: , wobeix=[ 92 177 136 ], daher führen wir dieses Funktionselement weise aus und erhalten[ 1 1 1 ].11+e-xx=[92177136]

[111]

Das heißt, für jeden Zellzustand (es gibt k = 3 Zellzustände) lassen wir ihn zur nächsten Schicht übergehen.Ct-1k=3

Ist die obige Annahme richtig?

Dies bedeutet auch, dass die Anzahl der Zellenstatus und versteckten Status gleich ist?

Antworten:


14

Gute Frage!

tl; dr: Der Zellenstatus und der verborgene Status sind zwei verschiedene Dinge, aber der verborgene Status ist vom Zellenstatus abhängig und sie haben tatsächlich die gleiche Größe.

Längere Erklärung

Der Unterschied zwischen den beiden ist aus dem folgenden Diagramm ersichtlich (Teil desselben Blogs):

Der Zellzustand ist die fette Linie, die von Westen nach Osten über die Spitze verläuft.

Der Zellzustand ist die fette Linie, die von Westen nach Osten über die Spitze verläuft. Der gesamte grüne Block wird als "Zelle" bezeichnet.

Der verborgene Zustand aus dem vorherigen Zeitschritt wird als Teil der Eingabe zum aktuellen Zeitschritt behandelt.

Es ist jedoch etwas schwieriger, die Abhängigkeit zwischen den beiden zu erkennen, ohne eine vollständige exemplarische Vorgehensweise durchzuführen. Ich werde das hier tun, um eine andere Perspektive zu bieten, die jedoch stark vom Blog beeinflusst wird. Meine Notation wird dieselbe sein und ich werde Bilder aus dem Blog in meiner Erklärung verwenden.

Ich mag es, die Reihenfolge der Operationen ein wenig anders zu sehen, als sie im Blog dargestellt wurden. Persönlich, wie ausgehend vom Eingangstor. Ich werde diesen Standpunkt im Folgenden erläutern. Beachten Sie jedoch, dass der Blog möglicherweise der beste Weg ist, einen LSTM rechnerisch einzurichten. Diese Erklärung ist rein konzeptionell.

Folgendes passiert:

Das Eingangstor

Bildbeschreibung hier eingeben

txtht-1

xt=[1,2,3]ht=[4,5,6]

xtht-1[1,2,3,4,5,6]

WichWich[xt,ht-1]+bichWichbich

Nehmen wir an, wir gehen von einer sechsdimensionalen Eingabe (der Länge des verketteten Eingabevektors) zu einer dreidimensionalen Entscheidung darüber, welche Zustände aktualisiert werden sollen. Das heißt, wir brauchen eine 3x6-Gewichtsmatrix und einen 3x1-Vorspannungsvektor. Geben wir die folgenden Werte an:

Wich=[111111222222333333]

bich=[111]

Die Berechnung wäre:

[111111222222333333][123456]+[111]=[224262]

icht=σ(Wich[xt,ht-1]+bich)

σ(x)=11+exp(-x)x

σ([224262])=[11+exp(-22),11+exp(-42),11+exp(-62)]=[1,1,1]

Auf Englisch bedeutet dies, dass wir alle unsere Bundesstaaten aktualisieren werden.

Das Eingangstor hat einen zweiten Teil:

Ct~=teinnh(WC[xt,ht-1]+bC)

In diesem Teil soll berechnet werden, wie wir den Status aktualisieren würden, wenn wir dies tun würden. Dies ist der Beitrag der neuen Eingabe zu diesem Zeitpunkt zum Zellzustand. Die Berechnung erfolgt auf die gleiche Weise wie oben beschrieben, jedoch mit einer Tanh-Einheit anstelle einer Sigmoid-Einheit.

Ct~icht

ichtCt~

Dann kommt das Vergessentor, das der Kern Ihrer Frage war.

Das Vergessentor

Bildbeschreibung hier eingeben

Der Zweck des Vergessens besteht darin, zuvor erlernte Informationen zu entfernen, die nicht mehr relevant sind. Das Beispiel im Blog basiert auf der Sprache, wir können uns aber auch ein Schiebefenster vorstellen. Wenn Sie eine Zeitreihe modellieren, die auf natürliche Weise durch ganze Zahlen dargestellt wird, wie die Anzahl infektiöser Personen in einem Gebiet während eines Krankheitsausbruchs, dann möchten Sie sich nicht länger die Mühe machen, diesen Bereich in Betracht zu ziehen, wenn Nachdenken darüber, wie die Krankheit als nächstes reisen wird.

Genau wie die Eingabeebene übernimmt die Vergesseebene den verborgenen Zustand des vorherigen Zeitschritts und die neue Eingabe des aktuellen Zeitschritts und verkettet sie. Es geht darum, stochastisch zu entscheiden, was man vergisst und woran man sich erinnert. In der vorherigen Berechnung habe ich eine Sigmoid-Schicht-Ausgabe aller Einsen gezeigt, aber in Wirklichkeit war sie näher an 0,999 und ich habe aufgerundet.

Die Berechnung sieht ungefähr so ​​aus, wie wir es in der Eingabeebene gemacht haben:

ft=σ(Wf[xt,ht-1]+bf)

Dies gibt uns einen Vektor der Größe 3 mit Werten zwischen 0 und 1. Stellen wir uns vor, er hätte uns gegeben:

[0,5,0,8,0.9]

Dann entscheiden wir stochastisch anhand dieser Werte, welche dieser drei Informationsteile zu vergessen sind. Eine Möglichkeit besteht darin, eine Zahl aus einer gleichmäßigen (0, 1) Verteilung zu generieren, und wenn diese Zahl geringer ist als die Wahrscheinlichkeit, dass sich die Einheit einschaltet (0,5, 0,8 und 0,9 für die Einheiten 1, 2 und 3) jeweils), dann schalten wir das Gerät ein. In diesem Fall würden wir diese Information vergessen.

Kurznotiz: Die Eingabeebene und die Vergessebene sind unabhängig voneinander. Wenn ich eine Wettperson wäre, würde ich wetten, dass dies ein guter Ort für die Parallelisierung ist.

Aktualisieren des Zellenstatus

Bildbeschreibung hier eingeben

Jetzt haben wir alles, was wir brauchen, um den Zellstatus zu aktualisieren. Wir nehmen eine Kombination der Informationen aus den Eingaben und den Vergessen-Gates:

Ct=ftCt-1+ichtCt~

Nun, das wird ein bisschen seltsam. Anstatt wie bisher zu multiplizieren gibt das Hadamard-Produkt an, bei dem es sich um ein Einstiegsprodukt handelt.

Nebenbei: Hadamard-Produkt

Zum Beispiel, wenn wir zwei Vektoren hätten x1=[1,2,3] und x2=[3,2,1] und wir wollten das Hadamard-Produkt nehmen, wir würden dies tun:

x1x2=[(13),(22),(31)]=[3,4,3]

Beenden Sie beiseite.

Auf diese Weise kombinieren wir das, was wir zum Zellstatus (Eingabe) hinzufügen möchten, mit dem, was wir aus dem Zellstatus entfernen möchten (Vergessen). Das Ergebnis ist der neue Zellzustand.

Das Ausgangstor

Bildbeschreibung hier eingeben

Dies wird uns den neuen verborgenen Zustand geben. Im Wesentlichen besteht der Punkt des Ausgangsgatters darin, zu entscheiden, welche Informationen der nächste Teil des Modells berücksichtigen soll, wenn der nachfolgende Zellenzustand aktualisiert wird. Das Beispiel im Blog lautet wieder Sprache: Wenn das Substantiv Plural ist, ändert sich die Verbkonjugation im nächsten Schritt. Wenn in einem Krankheitsmodell die Anfälligkeit von Personen in einem bestimmten Gebiet anders ist als in einem anderen Gebiet, kann sich die Wahrscheinlichkeit ändern, eine Infektion zu bekommen.

Die Ausgabeebene übernimmt dieselbe Eingabe erneut, berücksichtigt dann jedoch den aktualisierten Zellstatus:

Öt=σ(WÖ[xt,ht-1]+bÖ)

Dies gibt uns wieder einen Vektor von Wahrscheinlichkeiten. Dann berechnen wir:

ht=Ötteinnh(Ct)

Der aktuelle Zellenzustand und das Ausgangsgatter müssen sich also darauf einigen, was ausgegeben werden soll.

Das heißt, wenn das Ergebnis von teinnh(Ct) ist [0,1,1] nachdem die stochastische Entscheidung getroffen wurde, ob jede Einheit an oder aus ist, und das Ergebnis von Öt ist [0,0,1]Wenn wir dann das Hadamard-Produkt nehmen, werden wir bekommen [0,0,1], und nur die Einheiten, die sowohl vom Ausgangstor als auch im Zellenzustand eingeschaltet wurden, sind Teil der endgültigen Ausgabe.

[BEARBEITEN: Es gibt einen Kommentar im Blog, der sagt, die ht wird wieder in eine tatsächliche Ausgabe von umgewandelt yt=σ(Wht)Dies bedeutet, dass die tatsächliche Ausgabe auf dem Bildschirm (vorausgesetzt, Sie haben einige) das Ergebnis einer anderen nichtlinearen Transformation ist.]

Das Diagramm zeigt das htGehe zu zwei Stellen: der nächsten Zelle und zur 'Ausgabe' - zum Bildschirm. Ich denke, dass der zweite Teil optional ist.

Es gibt viele Varianten von LSTMs, aber das deckt das Wesentliche ab!


Danke für deine Antwort! Ich habe eine zusätzliche Frage, es macht dir nichts aus. Ein tiefes neuronales Netzwerk kann tief sein, weil die Ableitung von ReLU 1 ist (wenn die Ausgabe größer als 0 ist). Ist das auch für diese Zelle so? Ich bin nicht sicher, wie Tanh und Sigmoid eine konstante Ableitung von 1 haben können?
user1157751

Gern geschehen! Ein neuronales Netzwerk wird als "tief" angesehen, wenn es mehr als eine verborgene Schicht hat. Die Ableitungen der Aktivierungsfunktionen (tanh, sigmoid, ReLU) beeinflussen, wie das Netzwerk trainiert wird. Wie Sie sagen, da ReLU eine konstante Steigung hat, wenn seine Eingabe größer als 0 ist, ist seine Ableitung 1, wenn wir uns in diesem Bereich der Funktion befinden. Tanh- und Sigmoid-Einheiten haben eine Ableitung nahe 1, wenn wir uns in der Mitte ihrer Aktivierungsregion befinden, aber ihre Ableitung wird nicht konstant sein. Vielleicht sollte ich einen separaten Blog-Beitrag zu den Derivaten machen ...
StatsSorceress

Können Sie ein Beispiel für deren Ableitung nahe 1 in der Aktivierungsregion zeigen? Ich habe eine Menge Ressourcen gesehen, die sich mit dem Derivat befassen, aber keine Mathematik durchgeführt wurde.
user1157751

Gute Idee, aber es wird einige Zeit dauern, bis ich einen richtigen Beitrag dazu geschrieben habe. Denken Sie in der Zwischenzeit an die Form der Tanh-Funktion - es ist ein längliches 'S'. In der Mitte ist die Ableitung am höchsten. Wo das S flach ist (die Schwänze des S), ist die Ableitung 0. Ich habe eine Quelle gesehen, dass die Sigmoiden eine maximale Ableitung von 0,25 haben, aber ich habe kein Äquivalent für tanh.
StatsSorceress

Der Teil, den ich nicht verstehe, ist im Gegensatz zu ReLU mit einer Konstanten-1-Ableitung, bei der x> 0 ist, aber Sigmoid und Tanh hatten einen variablen Wert für beide Ableitungen. Wie kann das "konstant" sein?
user1157751
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.