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 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
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= ⎡⎣⎢123123123123123123⎤⎦⎥
bich=⎡⎣⎢111⎤⎦⎥
Die Berechnung wäre:
⎡⎣⎢123123123123123123⎤⎦⎥⋅ ⋅⎣⎢⎢⎢⎢⎢⎢⎢⎢123456⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥+ ⎡⎣⎢111⎤⎦⎥= ⎡⎣⎢224262⎤⎦⎥
icht= σ( Wich⋅ [ xt, ht - 1] + bich)
σ( x ) = 11 + e x p ( - x )x
σ( ⎡⎣⎢224262⎤⎦⎥) = [ 11 + e x p ( - 22 ), 11 + e x p ( - 42 ), 11 + e x p ( - 62 )] = [ 1 , 1 , 1 ]
Auf Englisch bedeutet dies, dass wir alle unsere Bundesstaaten aktualisieren werden.
Das Eingangstor hat einen zweiten Teil:
Ct~= t a n h ( 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
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
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= ft∘ Ct - 1+ it∘ Ct~
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:
x1∘ x2= [ ( 1 ≤ 3 ) , ( 2 ≤ 2 ) , ( 3 ≤ 1 ) ] = [ 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
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= ot∘ t a n h ( Ct)
Der aktuelle Zellenzustand und das Ausgangsgatter müssen sich also darauf einigen, was ausgegeben werden soll.
Das heißt, wenn das Ergebnis von t a n h ( 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= σ( W⋅ ht)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!