Deep Neural Network - Propagacja wsteczna z ReLU


17

Mam pewne trudności w uzyskaniu wstecznej propagacji za pomocą ReLU i wykonałem trochę pracy, ale nie jestem pewien, czy jestem na dobrej drodze.

Funkcja kosztu: gdzie jest wartością rzeczywistą, a jest wartością przewidywaną. Zakładamy również, że > 0 zawsze.Y Y x12(yy^)2yy^x


1 warstwa ReLU, gdzie waga na 1. warstwie wynosiw1

wprowadź opis zdjęcia tutaj

dCdw1=dCdRdRdw1

dCw1=(yReLU(w1x))(x)


2 warstwy ReLU, gdzie wagi na 1. warstwie to , a 2. warstwa to I chciałem zaktualizować 1. warstwęw 1 w 2w2w1w2

wprowadź opis zdjęcia tutaj

dCdw2=dCdRdRdw2

dCw2=(yReLU(w1ReLU(w2x))(w1x)

PonieważReLU(w1ReLU(w2x))=w1w2x


3 warstwy ReLU, gdzie wagi na 1. warstwie to , 2. warstwa i 3. warstwaw 2w3w2w1

wprowadź opis zdjęcia tutaj

dCdw3=dCdRdRdw3

dCw3=(yReLU(w1ReLU(w2(ReLU(w3)))(w1w2x)

PonieważReLU(w1ReLU(w2(ReLU(w3))=w1w2w3x

Ponieważ reguła łańcuchowa trwa tylko z 2 pochodnymi, w porównaniu do sigmoidu, który może być tak długi, jak liczba warstw.n


Powiedzmy, że chciałem zaktualizować wszystkie grubości 3 warstw, gdzie to trzecia warstwa, to druga warstwa, to trzecia warstwaw 2 w 1w1w2w1

dCw1=(yReLU(w1x))(x)

dCw2=(yReLU(w1ReLU(w2x))(w1x)

dCw3=(yReLU(w1ReLU(w2(ReLU(w3)))(w1w2x)

Jeśli to wyprowadzenie jest poprawne, w jaki sposób zapobiega to zniknięciu? W porównaniu z sigmoidem, w którym mamy wiele mnożenia przez 0,25 w równaniu, podczas gdy ReLU nie ma żadnego stałego mnożenia wartości. Jeśli istnieją tysiące warstw, mnożenie byłoby duże ze względu na ciężary, to czy nie spowodowałoby to zanikania lub eksplozji gradientu?


@NeilSlater Dziękujemy za odpowiedź! Czy możesz to rozwinąć, nie jestem pewien, co miałeś na myśli?
user1157751

Ach, chyba wiem o co ci chodziło. Powodem, dla którego podniosłem to pytanie, jest to, że jestem pewien, że pochodzenie jest poprawne? Rozejrzałem się i nie znalazłem przykładu ReLU pochodzącego całkowicie od podstaw?
user1157751

Odpowiedzi:


15

Definicje robocze funkcji ReLU i jej pochodnej:

ReLU(x)={0,if x<0,x,otherwise.

ddxReLU(x)={0,if x<0,1,otherwise.

Pochodna jest funkcją kroku jednostkowego . Ignoruje to problem przy x=0 , gdzie gradient nie jest ściśle określony, ale nie jest to praktyczny problem dla sieci neuronowych. Przy powyższym wzorze pochodna przy 0 wynosi 1, ale można ją traktować tak samo jak 0 lub 0,5 bez rzeczywistego wpływu na wydajność sieci neuronowej.


Uproszczona sieć

Dzięki tym definicjom przyjrzyjmy się przykładowym sieciom.

Prowadzisz regresję z funkcją kosztu C=12(yy^)2Rzr(1)z(1)W(0)xrzamiast tego). Dostosowałem także numer indeksu macierzy masy - dlaczego stanie się to wyraźniejsze dla większej sieci. NB Na razie ignoruję posiadanie więcej niż neuronu w każdej warstwie.

Patrząc na twoją prostą 1 warstwę, 1 sieć neuronową, równania sprzężenia zwrotnego są następujące:

z(1)=W(0)x

y^=r(1)=ReLU(z(1))

Pochodną funkcji kosztu z przykładowego oszacowania jest:

Cy^=Cr(1)=r(1)12(yr(1))2=12r(1)(y22yr(1)+(r(1))2)=r(1)y

z

Cz(1)=Cr(1)r(1)z(1)=(r(1)y)Step(z(1))=(ReLU(z(1))y)Step(z(1))

Cz(1)

W(0)

CW(0)=Cz(1)z(1)W(0)=(ReLU(z(1))y)Step(z(1))x=(ReLU(W(0)x)y)Step(W(0)x)x

z(1)=W(0)xz(1)W(0)=x

To pełne rozwiązanie dla Twojej najprostszej sieci.

Jednak w sieci warstwowej musisz również przenieść tę samą logikę do następnej warstwy. Zazwyczaj masz więcej niż jeden neuron w warstwie.


Bardziej ogólna sieć ReLU

(k)i(k+1)j

zj(k+1)=iWij(k)ri(k)

rj(k+1)=ReLU(zj(k+1))

rjoutputrjoutputyjCrj(k+1)

Najpierw musimy dostać się do wejścia neuronu przed zastosowaniem ReLU:

  1. Czj(k+1)=Crj(k+1)rj(k+1)zj(k+1)=Crj(k+1)Step(zj(k+1))

Musimy również propagować gradient do poprzednich warstw, co obejmuje zsumowanie wszystkich połączonych wpływów do każdego neuronu:

  1. Cri(k)=jCzj(k+1)zj(k+1)ri(k)=jCzj(k+1)Wij(k)

Musimy połączyć to z macierzą wag, aby później wprowadzić zmiany:

  1. CWij(k)=Czj(k+1)zj(k+1)Wij(k)=Czj(k+1)ri(k)

You can resolve these further (by substituting in previous values), or combine them (often steps 1 and 2 are combined to relate pre-transform gradients layer by layer). However the above is the most general form. You can also substitute the Step(zj(k+1)) in equation 1 for whatever the derivative function is of your current activation function - this is the only place where it affects the calculations.


Back to your questions:

If this derivation is correct, how does this prevent vanishing?

Your derivation was not correct. However, that does not completely address your concerns.

The difference between using sigmoid versus ReLU is just in the step function compared to e.g. sigmoid's y(1y), applied once per layer. As you can see from the generic layer-by-layer equations above, the gradient of the transfer function appears in one place only. The sigmoid's best case derivative adds a factor of 0.25 (when x=0,y=0.5), and it gets worse than that and saturates quickly to near zero derivative away from x=0. The ReLU's gradient is either 0 or 1, and in a healthy network will be 1 often enough to have less gradient loss during backpropagation. This is not guaranteed, but experiments show that ReLU has good performance in deep networks.

If there's thousands of layers, there would be a lot of multiplication due to weights, then wouldn't this cause vanishing or exploding gradient?

Yes this can have an impact too. This can be a problem regardless of transfer function choice. In some combinations, ReLU may help keep exploding gradients under control too, because it does not saturate (so large weight norms will tend to be poor direct solutions and an optimiser is unlikely to move towards them). However, this is not guaranteed.


Was a chain rule performed on dCdy^?
user1157751

@user1157751: No, Cy^=Cr(1) because y^=r(1). The cost function C is simple enough that you can take its derivative immediately. The only thing I haven't shown there is the expansion of the square - would you like me to add it?
Neil Slater

But C is 12(yy^)2, don't we need to perform chain rule so that we can perform the derivative on y^? dCdy^=dCdUdUdy^, where U=yy^. Apologize for asking really simple questions, my maths ability is probably causing trouble for you : (
user1157751

If you can make things simpler by expanding. Then please do expand the square.
user1157751

@user1157751: Yes you could use the chain rule in that way, and it would give the same answer as I show. I just expanded the square - I'll show it.
Neil Slater
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.