Ich benutze ein neuronales Netzwerk, das aus 4 Eingangsneuronen, 1 versteckten Schicht aus 20 Neuronen und einer 7 Neuronenausgabeschicht besteht.
Ich versuche es für einen bcd zu 7-Segment-Algorithmus zu trainieren. Meine Daten sind normalisiert 0 ist -1 und 1 ist 1.
Wenn die Ausgabefehlerauswertung stattfindet, sättigt das Neuron falsch. Wenn die gewünschte Ausgabe 1
ist und die tatsächliche Ausgabe -1
ist, lautet der Fehler 1-(-1)= 2
.
Wenn ich es mit der Ableitung der Aktivierungsfunktion error*(1-output)*(1+output)
multipliziere, wird der Fehler fast 0
Wegen 2*(1-(-1)*(1-1)
.
Wie kann ich diesen Sättigungsfehler vermeiden?
Sättigung bei den Asymptoten der Aktivierungsfunktion ist ein häufiges Problem bei neuronalen Netzwerken. Wenn man sich ein Diagramm der Funktion ansieht, verwundert es nicht: Sie sind fast flach, was bedeutet, dass die erste Ableitung (fast) 0 ist. Das Netzwerk kann nicht mehr lernen.
Eine einfache Lösung besteht darin, die Aktivierungsfunktion zu skalieren, um dieses Problem zu vermeiden. Zum Beispiel, mit Tanh () Aktivierungsfunktion (mein Favorit), ist es empfehlenswert, die folgende Aktivierungsfunktion zu verwenden, wenn die gewünschte Ausgabe in {-1, 1}:
ist %Vor%Folglich ist die Ableitung
%Vor%Dadurch werden die Gradienten in den nichtlinearen Wertebereich gebracht und das Lernen beschleunigt. Für alle Details empfehle ich Yann LeCuns großartige Arbeit Efficient Back-Prop . Im Fall der Aktivierungsfunktion tanh () würde der Fehler als
berechnet werden %Vor%Dies passiert zwangsläufig, egal welche Funktion Sie verwenden. Die Ableitung wird per Definition null sein, wenn die Ausgabe eines von zwei Extremen erreicht. Es ist eine Weile her, seit ich mit Künstlichen Neuronalen Netzen gearbeitet habe, aber wenn ich mich richtig erinnere, ist dies (neben vielen anderen Dingen) eine der Einschränkungen bei der Verwendung des einfachen Back-Propagation-Algorithmus.
Sie können einen Momentum-Faktor hinzufügen, um sicherzustellen, dass es eine Korrektur aufgrund früherer Erfahrungen gibt, auch wenn die Ableitung ist Null.
Sie können es auch nach Epochen trainieren, wo Sie die Delta-Werte für die Gewichtungen akkumulieren, bevor Sie die eigentliche Aktualisierung durchführen (im Vergleich zur Aktualisierung jeder Iteration). Dies mildert auch Bedingungen, bei denen die Delta-Werte zwischen zwei Werten oszillieren.
Möglicherweise gibt es erweiterte Methoden, wie Methoden zweiter Ordnung für die Rückpropagation, die dieses spezielle Problem mildern.
Beachten Sie jedoch, dass tanh bei den Unendlichkeiten -1 oder +1 erreicht und das Problem rein theoretisch ist.
Nicht ganz sicher, ob ich die Frage richtig lese, aber wenn ja, sollten Sie Ihre Eingaben und Ziele zwischen 0,9 und -0,9 skalieren, was Ihren Derivaten helfen würde, vernünftiger zu werden.
Tags und Links neural-network