Nach meinem Verständnis tritt das Problem des verschwindenden Gradienten beim Training neuronaler Netze auf, wenn der Gradient jeder Aktivierungsfunktion kleiner als 1 ist, so dass das Produkt dieser Gradienten sehr klein wird, wenn Korrekturen durch viele Schichten zurückpropagiert werden.
Ich weiß, dass es andere Lösungen wie eine Gleichrichteraktivierungsfunktion gibt , aber meine Frage ist, warum wir nicht einfach eine Variation der häufig verwendeten Tanh- Funktion verwenden können.
Wenn die Aktivierungsfunktion von der Form war dann ist der maximal mögliche Gradient . Also wennWir haben keinen Fall mehr, in dem das Produkt der Gradienten notwendigerweise auf 0 geht.
Gibt es einen Grund, warum eine solche Aktivierungsfunktion sonst fehlschlagen würde?
Antworten:
Du hast Recht. Zumn>1 Die Multiplikation von Ableitungen geht nicht unbedingt auf Null, da jede Ableitung möglicherweise größer als eins sein kann (bis zun ).
Aus praktischen Gründen sollten wir uns jedoch fragen, wie einfach es ist, diese Situation aufrechtzuerhalten (die Multiplikation von Derivaten von Null fernzuhalten). Welche erweist sich als ziemlich hart im Vergleich zu relu, die 1 - Derivat = gibt, speziell jetzt, wo es auch eine Chance Gefälle Explosion .
Einführung
Angenommen, wir habenK Derivate (stehen für Tiefe K ) wie folgt multipliziert
g=∂f(x)∂x∣∣∣x=x1⋯∂f(x)∂x∣∣∣x=xK
jeweils mit unterschiedlichen Werten bewertet x1 zu xK . In einem neuronalen Netzwerk jeweilsxi ist eine gewichtete Summe der Ausgaben h aus der vorherigen Schicht, z x=wth .
WieK erhöht, wollen wir wissen, was es braucht, um das Verschwinden von zu verhindern g . Zum Beispiel für den Fall vonf(x)=tanh(x) wir können das nicht verhindern, weil jede Ableitung kleiner als eins ist, außer für x=0 dh
∂f(x)∂x=∂tanh(x)∂x=1−tanh2(x)<1 for x≠0
Es gibt jedoch eine neue Hoffnung, die auf Ihrem Vorschlag basiert. Zumf(x)=tanh(nx) , Derivat könnte bis gehen n>1 dh
∂f(x)∂x=∂tanh(nx)∂x=n(1−tanh2(nx))<n for x≠0.
Wann sind die Kräfte ausgeglichen?
Hier ist der Kern meiner Analyse:
Der Vaterx muss weg von 0 desto schwieriger ist es, unten ein Derivat herzustellen 1n Je einfacher es ist, zu verhindern, dass die Multiplikation verschwindet. Diese Frage versucht die Spannung zwischen Gut zu analysieren x ist nahe Null und schlecht x ist weit von Null entfernt. Zum Beispiel, wenn gut und schlechtx 's sind ausgeglichen, sie würden eine Situation wie schaffen
g=n×n×1n×n×1n×1n=1.
Im Moment versuche ich optimistisch zu sein, indem ich nicht willkürlich groß betrachte xi 's, da kann auch einer von ihnen bringen g willkürlich nahe Null.
Für den Sonderfall vonn=1 , irgendein |x|>0 führt zu einer Ableitung <1/1=1 Daher ist es fast unmöglich, das Gleichgewicht zu halten (zu verhindern g vom Verschwinden) als Tiefe K erhöht sich z
g=0.99×0.9×0.1×0.995⋯→0.
Für den allgemeinen Fall vonn>1 Wir gehen wie folgt vor
∂tanh(nx)∂x<1n⇒n(1−tanh2(nx))<1n⇒1−1n2<tanh2(nx)⇒1−1n2−−−−−−√<|tanh(nx)|⇒x>t1(n):=1ntanh−1(1−1n2−−−−−−√)or x<t2(n):=−t1(n)=1ntanh−1(−1−1n2−−−−−−√)
So für |x|>t1(n) ist die Ableitung kleiner als 1n . In Bezug auf die Größe kleiner als eins ergibt sich daher die Multiplikation zweier Ableitungen mitx1∈R und |x2|>t1(n) zum n>1 entspricht einer beliebigen Ableitung für n=1 dh
(∂tanh(nx)∂x∣∣∣x=x1∈R×∂tanh(nx)∂x∣∣∣x=x2,|x2|>t1(n))≡∂tanh(x)∂x∣∣∣x=z,z∈R∖{0}.
Mit anderen Worten,
Nun, um zu sehen, wie einfach (oder schwer) es ist zu haben|x|>t1(n) , lasst uns planen t1(n) und t2(n) (Schwellenwerte sind für eine kontinuierliche aufgetragen n ).
Wie Sie sehen können, um eine Ableitung zu haben≥1/n wird das größte Intervall bei erreicht n=2 , was immer noch eng ist! Dieses Intervall ist[−0.658,0.658] Bedeutung für |x|>0.658 ist die Ableitung kleiner als 1/2 . Hinweis: Ein etwas größeres Intervall ist erreichbar, wennn darf kontinuierlich sein.
Basierend auf dieser Analyse können wir nun zu einer Schlussfolgerung gelangen:
Wenn also ihre Ableitungen mit der anderen Hälfte gepaart sind, würde die Multiplikation jedes Paares bestenfalls über eins liegen (erforderlich, dass neinx ist weit in große Werte), dh
(∂f(x)∂x∣∣∣x=x1∈R×∂f(x)∂x∣∣∣x=x2∈[−0.658,0.658])>1
In der Praxis dürfte es jedoch mehr als die Hälfte davon gebenx ist außerhalb von [−0.658,0.658] oder ein paar x ist mit großen Werten, die verursachen g auf Null verschwinden. Es gibt auch ein Problem mit zu vielenx ist nahe Null, was ist
Wie groß ist zu groß?
Hier führe ich eine ähnliche Analyse durch, um zu sehen
Um diese Frage zu beantworten, leiten wir die folgende Ungleichung ab
das zeigt zum Beispiel für die TiefeK=50 und n=2 , ein Wert außerhalb [−9.0,9.0] erzeugt eine Ableitung <1/249 . Dieses Ergebnis gibt eine Vorstellung davon, wie einfach es für ein paar istx ist um 5-10, um die Mehrheit der guten aufzuheben x 's.
Einbahnstraßen-Analogie
Basierend auf den vorherigen Analysen konnte ich eine qualitative Analogie unter Verwendung einer Markov-Kette aus zwei Zuständen liefern[g≫0] und [g∼0] das modelliert grob das dynamische Verhalten des Gradienten g wie folgt
Wenn das System in den Status wechselt[g∼0] Es gibt nicht viel Gefälle, um die Werte wieder in den Zustand zu versetzen (zu ändern) [g≫0] . Dies ähnelt einer Einbahnstraße, die irgendwann passiert wird, wenn wir ihr genügend Zeit geben (ausreichend große Epochen), da keine Konvergenz des Trainings stattfindet (andernfalls haben wir eine Lösung gefunden, bevor ein verschwindender Gradient auftritt).
Eine weitergehende Analyse des dynamischen Verhaltens des Gradienten wäre möglich, indem eine Simulation an tatsächlichen neuronalen Netzen durchgeführt wird (die möglicherweise von vielen Parametern wie Verlustfunktion, Breite und Tiefe des Netzes und Datenverteilung abhängt) und erstellt wird
Explodierendes Gradientenproblem
Wir haben den Aspekt "Verschwindender Gradient" von behandelttanh(nx) . Im Gegenteil, für den Aspekt " explodierender Gradient " sollten wir uns Sorgen machen, zu viele zu habenx ist nahe Null, was möglicherweise einen Gradienten erzeugen könnte nK , was zu numerischer Instabilität führt. Für diesen Fall eine ähnliche Analyse basierend auf Ungleichheit
∂tanh(nx)∂x>1⇒|x|<1ntanh−1(1−1n−−−−−√)
shows that for n=2 , around half or more of xi 's should be outside of [−0.441,0.441] to have g around O(1) away from O(nK) . This leaves an even smaller region on RK in which K tanh(nx) functions would work well together (neither vanished, nor exploded); reminding that tanh(x) does not have the exploding gradient problem.
quelle
I have plotted what you are referring in the following picture. As you can see, by employing a coefficient as the input of the tanh function, you are limiting the range of changes of the function with respect tox axis. This has a negative effect. The reason is that although you are making the slope sharper for a very small region in the domain, you are making the differentiation of the other points in the domain more close to zero. The vanishing problem occurs due to the fact that the outputs of neurons go far from the zero and they will be biased to each of the two directions. After that, the differentiation value is so much small and due to begin smaller than one and bigger than zero, it gets even smaller after being multiplied by the other differentiations which are like itself.
Another nice question can be this that you have a coefficient value smaller than one. I've illustrated that In the following picture. In this figure, you are changing the function in a way that you have a differentiation which is larger than before in more points of the domain, but again it is smaller than one. This is not valuable for deep networks.
As I have mentioned, in both cases which you employ coefficient, the derivative would be smaller than one and is not valuable for deep networks.
quelle
The derivative of tanh(x) is sech(x)^2, where sech(x)=2e^x/(1+e^(2x)). Hence, when you see the gradient decreases to 0, that means x converges to +/- infinity . If you consider tanh(nx), then the derivative is n sech(nx)^2, and sech(nx)^2 converges to 0 faster than n converging to infinity, when x converges to +/- infinity. Therefore, heuristically, multiplying the argument by bigger n will make things worse.
quelle
Thanks to everyone for their great answers - they've really helped in thinking about this problem - and I recommend anyone interested in the problem having a look - but there's a much simpler route to an answer:
When we replacetanh(x) with tanh(nx) as an activation function we have changed nothing about the performance of the activation function.
All we have done is rescaled all the weights and biases of the network - which we are free to do arbitrarily. This will not affect the performance of the network, but certainly will the initialization. Previously I had stated that it will not affect the training either - but I'm now not sure I can state this with full confidence.
quelle