LSTM wurde speziell erfunden, um das Problem des verschwindenden Gradienten zu vermeiden. Dies soll mit dem Constant Error Carousel (CEC) geschehen, das in der folgenden Abbildung (von Greff et al. ) Der Schleife um die Zelle entspricht .
(Quelle: deeplearning4j.org )
Und ich verstehe, dass dieser Teil als eine Art Identitätsfunktion angesehen werden kann, also ist die Ableitung eine und der Gradient bleibt konstant.
Was ich nicht verstehe ist, wie es aufgrund der anderen Aktivierungsfunktionen nicht verschwindet? Die Eingabe-, Ausgabe- und Vergessen-Gatter verwenden ein Sigmoid, dessen Ableitung höchstens 0,25 beträgt, und g und h waren traditionell tanh . Wie verschwindet das Zurückpropagieren durch diese, ohne dass der Gradient verschwindet?
quelle
Antworten:
Der Fluchtgradient lässt sich am besten im eindimensionalen Fall erklären. Das Mehrdimensionale ist komplizierter, aber im Wesentlichen analog. Sie können es in diesem ausgezeichneten Artikel [1] nachlesen.
Angenommen , wir einen versteckten Zustand haben zum Zeitschritt t . Wenn wir die Dinge einfach machen und Vorurteile und Eingaben entfernen, haben wir h t = σ ( w h t - 1 ) . Dann kannst du das zeigenht t
Der Faktor ist mit !!! markiert. ist das Entscheidende. Wenn das Gewicht ungleich 1 ist, fällt es entweder exponentiell schnell auf Null ab
In LSTMs haben Sie den Zellstatus . Die Ableitung dort hat die Form ∂st
Hier istvtder Eingang zum Vergessungsgatter. Wie Sie sehen, handelt es sich nicht um einen exponentiell schnell abklingenden Faktor. Folglich gibt es mindestens einen Pfad, auf dem der Gradient nicht verschwindet. Zur vollständigen Herleitung siehe [2].
[1] Pascanu, Rasvan, Tomas Mikolov und Yoshua Bengio. "Über die Schwierigkeit, immer wiederkehrende neuronale Netze zu trainieren." ICML (3) 28 (2013): 1310 & ndash; 1318.
[2] Bayer, Justin Simon. Sequenzdarstellungen lernen. Diss. München, Technische Universität München, Diss., 2015, 2015.
quelle
Das Bild des LSTM-Blocks von Greff et al. (2015) beschreibt eine Variante, die die Autoren Vanilla LSTM nennen . Es ist ein bisschen anders als die ursprüngliche Definition von Hochreiter & Schmidhuber (1997). Die ursprüngliche Definition enthielt weder das Vergessenstor noch die Gucklochverbindungen.
Der Begriff Konstantes Fehlerkarussell wurde in der Originalarbeit verwendet, um die wiederkehrende Verbindung des Zellenzustands zu kennzeichnen. Betrachten Sie die ursprüngliche Definition, bei der der Zellenzustand nur durch Hinzufügen geändert wird, wenn sich das Eingangsgatter öffnet. Der Gradient des Zellzustandes gegenüber dem Zellzustand zu einem früheren Zeitpunkt ist Null.
Ein Fehler kann immer noch durch das Ausgangstor und die Aktivierungsfunktion in die CEC gelangen. Die Aktivierungsfunktion verringert die Größe des Fehlers ein wenig, bevor er zur CEC hinzugefügt wird. CEC ist der einzige Ort, an dem der Fehler unverändert auftreten kann. Wenn sich das Eingangsgatter wieder öffnet, tritt der Fehler durch das Eingangsgatter, die Aktivierungsfunktion und die affine Transformation aus, wodurch die Größe des Fehlers verringert wird.
Somit wird der Fehler reduziert, wenn er durch eine LSTM-Schicht zurückverbreitet wird, jedoch nur, wenn er in die CEC eintritt und diese verlässt. Wichtig ist, dass es sich in der CEC nicht ändert, egal wie lange es unterwegs ist. Dies löst das Problem in der grundlegenden RNN, dass jeder Zeitschritt eine affine Transformation und Nichtlinearität anwendet, was bedeutet, dass der Fehler umso kleiner wird, je länger der Zeitabstand zwischen dem Eingang und dem Ausgang ist.
quelle
http://www.felixgers.de/papers/phd.pdf Please refer to section 2.2 and 3.2.2 where the truncated error part is explained. They don't propagate the error if it leaks out of the cell memory (i.e. if there is a closed/activated input gate), but they update the weights of the gate based on the error only for that time instant. Later it is made zero during further back propagation. This is kind of hack but the reason to do is that the error flow along the gates anyway decay over time.
quelle
I'd like to add some detail to the accepted answer, because I think it's a bit more nuanced and the nuance may not be obvious to someone first learning about RNNs.
For the vanilla RNN,∂ht′∂ht=∏k=1t′−twσ′(wht′−k) .
For the LSTM,∂st′∂st=∏k=1t′−tσ(vt+k)
The difference is for the vanilla RNN, the gradient decays withwσ′(⋅) while for the LSTM the gradient decays with σ(⋅) .
For the LSTM, there's is a set of weights which can be learned such thatσ(⋅)≈1 Suppose vt+k=wx for some weight w and input x . Then the neural network can learn a large w to prevent gradients from vanishing.
e.g. In the 1D case ifx=1 , w=10 vt+k=10 then the decay factor σ(⋅)=0.99995 , or the gradient dies as: (0.99995)t′−t
For the vanilla RNN, there is no set of weights which can be learned such thatwσ′(wht′−k)≈1
e.g. In the 1D case, supposeht′−k=1 . The function wσ′(w∗1) achieves a maximum of 0.224 at w=1.5434 . This means the gradient will decay as, (0.224)t′−t
quelle