Deep Neural Network - Backpropogation con ReLU


17

Sto incontrando qualche difficoltà nel ricavare la propagazione indietro con ReLU e ho fatto un po 'di lavoro, ma non sono sicuro di essere sulla strada giusta.

Funzione di costo: dove è il valore reale e è un valore previsto. Supponi anche che > 0 sempre.y y x12(yy^)2yy^x


1 livello ReLU, dove il peso al 1 ° livello èw1

inserisci qui la descrizione dell'immagine

dCdw1=dCdRdRdw1

dCw1=(yReLU(w1x))(x)


2 strati ReLU, in cui i pesi al 1 ° strato sono e il 2 ° strato è E volevo aggiornare il 1 ° stratow 1 w 2w2w1w2

inserisci qui la descrizione dell'immagine

dCdw2=dCdRdRdw2

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

DaReLU(w1ReLU(w2x))=w1w2x


ReLU a 3 strati, dove i pesi al 1 ° strato sono , 2 ° strato e 3 ° stratow 2 w 1w3w2w1

inserisci qui la descrizione dell'immagine

dCdw3=dCdRdRdw3

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

Da ReLU(w1ReLU(w2(ReLU(w3))=w1w2w3x

Poiché la regola della catena dura solo con 2 derivati, rispetto a un sigmoide, che potrebbe essere lungo quanto n numero di strati.


Supponiamo di voler aggiornare tutti i pesi a 3 livelli, dove w1 è il 3 ° livello, w2 è il 2 ° livello,w1 è il 3 ° strato

dCw1=(yReLU(w1x))(x)

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

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

Se questa derivazione è corretta, in che modo impedisce la scomparsa? Rispetto al sigmoide, dove nell'equazione abbiamo moltiplicato per 0,25, mentre ReLU non ha moltiplicazioni di valore costante. Se ci sono migliaia di strati, ci sarebbe molta moltiplicazione a causa dei pesi, quindi questo non causerebbe il gradiente di sparizione o esplosione?


@NeilSlater Grazie per la tua risposta! Puoi elaborare, non sono sicuro di cosa volevi dire?
user1157751,

Ah, penso di sapere cosa intendevi. Bene, il motivo per cui ho sollevato questa domanda è che sono sicuro che la derivazione sia corretta? Ho cercato in giro e non ho trovato un esempio di ReLU completamente derivato da zero?
user1157751,

Risposte:


15

Definizioni operative della funzione ReLU e dei suoi derivati:

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

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

La derivata è la funzione di step unitario . Ciò ignora un problema in x=0 , in cui il gradiente non è definito in modo rigoroso, ma ciò non rappresenta un problema pratico per le reti neurali. Con la formula sopra, la derivata su 0 è 1, ma potresti ugualmente trattarla come 0, o 0,5 senza alcun impatto reale sulle prestazioni della rete neurale.


Rete semplificata

Con queste definizioni, diamo un'occhiata alle tue reti di esempio.

Stai eseguendo la regressione con la funzione di costo C=12(yy^)2. Hai definitoRcome uscita del neurone artificiale, ma non hai definito un valore di input. Lo aggiungerò per completezza: chiamaloz, aggiungi un po 'di indicizzazione per layer, e preferiscolettereminuscole per i vettori e maiuscole per le matrici, quindir(1)output del primo layer,z(1)per i suoi input eW(0)per il peso che collega il neurone al suo inputx(in una rete più grande, che potrebbe connettersi a unrpiù profondorvalore invece). Ho anche regolato il numero di indice per la matrice di peso - perché sarà più chiaro per la rete più grande. NB Per ora sto ignorando di avere più del neurone in ogni strato.

Osservando il tuo semplice 1 strato, 1 rete di neuroni, le equazioni feed-forward sono:

z(1)=W(0)x

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

La derivata della funzione di costo con una stima di esempio è:

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

Utilizzo della regola chain per la propagazione posteriore al valore di pre-trasformazione ( z ):

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

Questo Cz(1) è una fase intermedia e una parte critica dei passaggi di backprop che collegano insieme. Le derivazioni spesso saltano questa parte perché combinazioni intelligenti di funzione di costo e livello di output ne semplificano la realizzazione. Qui non lo è.

Per ottenere il gradiente rispetto al peso W(0) , si tratta di un'altra iterazione della regola della catena:

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

. . . perché z(1)=W(0)x quindi z(1)W(0)=x

Questa è la soluzione completa per la tua rete più semplice.

Tuttavia, in una rete a più livelli, devi anche portare la stessa logica fino al livello successivo. Inoltre, in genere hai più di un neurone in uno strato.


Rete ReLU più generale

(k)i(k+1)j

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

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

rjoutput is still rjoutputyj. However, ignore that for now, and look at the generic way to back propagate, assuming we have already found Crj(k+1) - just note that this is ultimately where we get the output cost function gradients from. Then there are 3 equations we can write out following the chain rule:

First we need to get to the neuron input before applying ReLU:

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

We also need to propagate the gradient to previous layers, which involves summing up all connected influences to each neuron:

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

And we need to connect this to the weights matrix in order to make adjustments later:

  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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.