znikający gradient i zero gradientu

Sep 30 2020

Istnieje dobrze znany problem vanishing gradientw BackPropagationuczeniu Feedforward Neural Network (FNN)(tutaj nie bierzemy pod uwagę zanikającego gradientu rekurencyjnej sieci neuronowej).

Nie rozumiem, dlaczego znikający gradient nie oznacza zerowego gradientu, czyli optymalnego rozwiązania, jakiego oczekujemy? Widziałem odpowiedź, że znikający gradient nie jest dokładnie zerowym gradientem, po prostu oznacza, że ​​aktualizacja parametru jest bardzo powolna. Jednak w gradiencie przyzwoitym nie chcemy osiągnąć dokładnie zerowego gradientu i zatrzymamy się, gdy parametr się nie zmieni$\epsilon,$ co jest tym samym przypadkiem znikającego gradientu.

Czy ktoś może dać mi jasną odpowiedź?

Odpowiedzi

1 JavierTG Sep 30 2020 at 20:53

Względnie niski gradient nie zawsze oznacza, że ​​osiągnęliśmy punkt krytyczny

Niska wartość składnika gradientu niekoniecznie oznacza, że ​​zbliżamy się do punktu krytycznego dla tego parametru. Oznacza to, że funkcja niewiele się zmieni, jeśli dokonamy aktualizacji opartej wyłącznie na tym składniku gradientu.

Na przykład pomyśl o funkcji $f(w_1,w_2) = 0.001w_1^2 + w_2^2\rightarrow$ dla punktu o podobnych współrzędnych będziemy mieli składnik gradientu $1000$ razy większy w $w_2$ kierunek niż w $w_1$ kierunek.

Więc w tej funkcji (którą możemy zinterpretować jako naszą funkcję kosztu), jeśli zainicjujemy nasze parametry na podobną wartość, doprowadzi to do znacznie wolniejszej poprawy $w_1$ kierunku, jak widać na następnym wykresie konturowym dla szybkości uczenia się $0.5$:

Jak widać, nawet daleko od minimum na $(0, 0)^T$, ulepszenia $w_1$ są bardzo małe, więc potrzebujemy wielu iteracji, aby osiągnąć minimum $w_1$. A potem osiągnął minimum$1000$iteracje! Więc gdybyśmy zainicjowali algorytm ostrzejszym punktem, w ogóle nie osiągnąłby minimum.

Więc teraz rozumiemy, że nawet jeśli mamy niską wartość gradientu, nasze parametry niekoniecznie muszą być zbliżone do wartości, która osiąga minimum (lub ogólnie punkt krytyczny) funkcji kosztu. W przeciwieństwie do tego, mogą dostrzec znaczne spowolnienie procesu uczenia się .

W praktyce możemy uniknąć tego niepożądanego zachowania, stosując pewne modyfikacje metody gradientu. Na przykład zobacz Adagrad . W tej metodzie składniki gradientu są normalizowane na podstawie bieżących i poprzednich wartości wielkości gradientu w każdym kierunku. W związku z tym mamy określony współczynnik uczenia się dla każdego wymiaru.


Rozumowanie z propagacją wsteczną przy użyciu prostego NN

Aby zobaczyć, dlaczego te mniejsze składowe gradientu mogą występować również w sieciach neuronowych, możemy użyć prostego NN składającego się tylko z jednego neuronu na warstwę, tak jak następny:

Jak wiemy, element gradientu określony przez pochodną funkcji kosztu, $C$, w odniesieniu do wagi $w^l$ warstwy $l$, we w pełni połączonym NN jest wyrażeniem lewym: $$\frac{\partial C}{\partial w^l}= \delta^l (a^{l-1})^T \,\,\,\,\,\,\,\,\xrightarrow[]{\text{in our simple NN}}\,\,\,\,\,\,\,\, \frac{\partial C}{\partial w^l}=\delta^l a^{l-1}$$

Gdzie $\delta^l$ jest terminem „błędu” ($\partial C/\partial z^l$), i $a^{l-1}$ reprezentuje wektor aktywacji neuronów z poprzedniej warstwy ($l-1$). Zauważ, że w prostym NN przedstawionym powyżej nie musimy transponować$a^{l-1}$ ponieważ jest skalarem (jeden neuron na warstwę $\rightarrow$ jedna aktywacja na warstwę).

Zwykle jesteśmy w stanie łatwo obliczyć „błąd” ostatniej warstwy ($\delta^L$), ale nie wiemy, jak to obliczyć dla poprzednich warstw, więc korzystamy z wstecznej propagacji :

$$\delta^l = \left((w^{l+1})^T\,\,\delta^{l+1}\right)\odot g(z^l) \,\,\,\,\,\,\,\,\xrightarrow[]{\text{in our simple NN}}\,\,\,\,\,\,\,\, \delta^l=w^{l+1} \,g(z^l) \,\,\delta^{l+1} $$

Gdzie $g(z^l)$ reprezentuje funkcję aktywacji neuronu podanego terminu $z^l$.

Tak więc dla dowolnej warstwy $l$, jaki to termin $\partial C/ \partial w^l$obliczone ?. Korzystając z poprzedniego rozumowania dla prostego NN, teraz wiemy, że:

$$ \begin{align} \delta^{l} &= w^{l+1} \,g(z^{l}) \,\,\color{blue}{\delta^{l+1}}\\ \\ & = w^{l+1} \,g(z^{l}) \,\,\color{blue}{w^{l+2} \,g(z^{l+1}) \,\,\delta^{l+2}}\\ \\ &= w^{l+1}\color{blue}{w^{l+2}...w^{L}}\,\,g(z^{l})\color{blue}{g(z^{l+1})...g(z^{L})\,\,\delta^L} \end{align} $$ Gdzie niebieskie terminy są równoważne $\delta^{l+1}$.

Jak widzieliśmy wcześniej, ten termin $\delta^l$ pomnożone przez aktywację neuronu z poprzedniej warstwy $a^{l-1}$, daje nam pożądane $\partial C/\partial w^l$:

$$ \frac{\partial C}{\partial w^l} = \delta^{l}a^{l-1} = w^{l+1}\color{blue}{w^{l+2}...w^{L}}\,\,g(z^{l})\color{blue}{g(z^{l+1})...g(z^{L})\,\,\delta^L} \,\,a^{l-1}$$

Więc teraz możemy wyraźnie zobaczyć, że aktualizacje są dokonywane na wadze $w^l$ zależą bezpośrednio od wartości wszystkich wag i pobudzeń kolejnych warstw.

Oznacza to, że dla dowolnej wartości$w^l$ (może być bardzo odbiegający od optymalnego jak w sytuacji wykreślonej na początku), jego składowa gradientu może dążyć do zera, jeśli którakolwiek z wag lub aktywacji, $g(z)$(lub ich kombinacja) kolejnych warstw dąży do zera. Ten niepożądany efekt, jak powiedziałeś w pytaniu, jest znany jako znikający gradient .

Teraz rozumiemy, że nawet jeśli waga ma wartość $\partial C/\partial w^l$blisko zera nie oznacza to, że osiągnęliśmy punkt krytyczny dla tej wagi. Co więcej, uczenie się tych parametrów znacznie spowolni, ponieważ ich aktualizacje są proporcjonalne do ich odpowiedniej składowej gradientu. Więc mogą utknąć w wartości dalekiej od minimum!

Na koniec należy zauważyć, że ten niepożądany efekt może stać się ważniejszy wraz ze wzrostem liczby kolejnych warstw.