Frage zu LSTM in Neuronalen Netzen.

Zespire

Lieutenant
Registriert
März 2007
Beiträge
857
Hey habe wieder einmal Lust bekommen mich mit Neuronalen Netzwerken zu beschäftigen und würde gerne für ein zwei Spielereien LSTM implementieren dabei kam mir folgende Idee für ein Memory Neuron.

Es gibt zwei Weight-Sets für den vorstehenden Layer eines für die Aktivierungsfunktion und das zweite für das „Update Gate“.

Es wird geprüft ob die erste Aktivierungsfunktion > 0 ist falls ja wird der Wert(T) des Neuron mit einer zweiten Funktion aktualisiert und ausgegeben bis das „Update Gate“ wieder schaltet.

neuron.png
C#:
   double activationValue = 0;

        for (int i = 0; i < parentLayer.Length; i++)
            activationValue += parentLayer[i].Delta * weightSecondGate[i] * biasSecondGate[i];

        if (System.Math.Tanh(activationValue) > 0)
        {
            activationValue = 0;

            for (int i = 0; i < parentLayer.Length; i++)
                activationValue += parentLayer[i].Delta * Weight[i] * Bias[i];

            delta = System.Math.Tanh(activationValue);

        }
Also an sich funktioniert das Konstrukt auch jedoch werden bei regulären LSTM die Werte noch mit einander Addiert oder Multipliziert (Aktueller Input und Gespeicherter Input) oder gemeinsam für Aktivierungsfunktionen genutzt.
Ich würde gerne wissen welche konkreten Vorteile ergeben sich bei der Nutzung einer regulären LSTM Zelle besonders weshalb es sich lohnt den gespeicherten Wert zusammen mit dem Aktuellen zu Nutzen um den neuen Output zu bilden.
 
Soweit ich es verstehe: In einer normalen LSTM Zelle speichert man 'bewusst' Werte ein. Werden diese Zellen erneut getriggert so ergibt sich aus dem gespeicherten Wert ein Nutzen durch diesen Erfahrungswert. Für Zeitserien etwa, dass der folgende Zeitschritt nur eine geringe Abweichung zum vorigen hat, weshalb man eine Addition des Erfahrungswertes mit einfließen lässt. Oder bei Sprachanwendungen, dass bestimmte Worte oft aufeinander folgend benutzt werden. Triggert man jetzt die Memory Zelle auf ein bestimmtes Wort, sind Worte A, B, C die wahrscheinlichsten Nachfolger, D, F und G aber zu 0% wahrscheinlich.

Wenn du deinen Erfahrungswert aber immer wieder aktualisierst und dann auch nicht in die nächste Berechnung mit einfließen lassen willst, wofür dann ein LSTM?
 
  • Gefällt mir
Reaktionen: Zespire und Maviapril2
Grüße und danke für die Antwort welche den Einsatz von LTSM gut beschreibt hab auch selbst noch einmal genauer nachgelesen da ich in erster Linie Schwierigkeiten habe nachzuvollziehen weshalb der Alte Output mit in den neuen Einbezogen wird.
Edit:Noch einmal gelesen und du hast genau den Punkt gut beschrieben aber Gestern hatte es noch nicht klick gemacht :p


Dabei dient soweit ich es verstanden habe eine Memory-Zelle nicht nur dem aufbewahren von Informationen(Das was meine Zeichnung machen würde) sondern auch der Verarbeitung.

Auf https://colah.github.io/posts/2015-08-Understanding-LSTMs/ wird z.B geschrieben das die Zelle im ersten Durchlauf speichern könnte das es sich um ein Subjekt handelt und im zweiten Ableitet kann ob Singular oder Plural.

Ich ging davon aus es ginge nur darum eine Information zu speichern also z.B gib Subjekt aus bis ein Verb kommt oder ein noch simpleres ist es ein Subjekt Ja/Nein.

InGate0: Eingehende Information.
InGate1: Entscheidet ob der Speicher aktuallisiert wird.
OutGate0: Gibt immer den Speicher aus initalisiert wird mit 0.

Auf mein Beispiel bezogen bräuchte man dann wohl nach Hinten Größere oder mehr Layer die dann z.B vom Subjekt ableiten können ob Singular,Plural oder welches Geschlecht eine vollwertige LSTM Zelle ist dazu selbst in der Lage…

Edit2:
Zu den Erfahrungswerten ich habe auch feed forward Neuronen so das der vorherige Durchlauf dem nächsten Informationen mit gibt.

Für einfache Sachen wie 2D Autos beibringen einer Straße zu folgen braucht man das alles wohl nicht aber es macht Spaß etwas rumzuprobieren...
 
Zuletzt bearbeitet:
Zurück
Oben