Perché le funzioni di attivazione non centrate sullo zero sono un problema nella backpropagation?


26

Ho letto qui il seguente:

  • Le uscite Sigmoid non sono centrate sullo zero . Ciò è indesiderabile poiché i neuroni nei livelli successivi di elaborazione in una rete neurale (ne parleremo presto) riceveranno dati che non sono centrati sullo zero. Ciò ha implicazioni sulla dinamica durante la discesa del gradiente, perché se i dati che entrano in un neurone sono sempre positivi (es. elementally in )), allora il gradiente sui pesi durante la backpropagazione diventerà tutti sono positivi o tutti negativi (a seconda del gradiente dell'intera espressione x>0f=wTx+bwf). Ciò potrebbe introdurre dinamiche a zig-zag indesiderabili negli aggiornamenti del gradiente per i pesi. Tuttavia, si noti che una volta sommati questi gradienti attraverso una serie di dati, l'aggiornamento finale per i pesi può avere segni variabili, mitigando in qualche modo questo problema. Pertanto, questo è un inconveniente ma ha conseguenze meno gravi rispetto al problema di attivazione saturo sopra.

Perché avere tutti (elementally) porterebbe a gradienti tutti positivi o tutti negativi su ?x>0w



2
Ho anche avuto la stessa identica domanda guardando i video CS231n.
metropolitana del

Risposte:


28

f=wixi+b
dfdwi=xi
dLdwi=dLdfdfdwi=dLdfxi

poiché , il gradiente ha sempre lo stesso segno di (tutto positivo o tutto negativo).xi>0dLdwidLdf

Aggiorna
Supponiamo che ci siano due parametri e , se i gradienti di due dimensioni hanno sempre lo stesso segno, significa che possiamo muoverci approssimativamente nella direzione nord-est o sud-ovest nello spazio dei parametri.w1w2

Se il nostro obiettivo sembra essere nel nord-est, possiamo solo muoverci a zig-zag per arrivarci, proprio come un parcheggio parallelo in uno spazio ristretto. (perdona il mio disegno)

inserisci qui la descrizione dell'immagine

Pertanto le funzioni di attivazione tutto positivo o tutto negativo (relu, sigmoid) possono essere difficili per l'ottimizzazione basata sul gradiente. Per risolvere questo problema possiamo normalizzare in anticipo i dati per essere centrati su zero come nella normalizzazione batch / layer.

Un'altra soluzione a cui riesco a pensare è quella di aggiungere un termine di bias per ogni input in modo che il layer diventi I gradienti sono quindi il segno non dipenderà esclusivamente da .

f=wi(xi+bi).
dLdwi=dLdf(xibi)
xi


Per favore, correggimi se sbaglio, ma il valore di dL / df non dovrebbe essere trasposto di x ie xT poiché useremmo l'idea di Jacobin qui.
chinmay,

@chinmay scusa per la risposta tardiva, penso che sia il risultato di quindi il valore di dL / df non dipende da x, e di solito è uno scalare, e sono 1d vettori, quindi dL / df dovrebbe anche essere uno scalare, giusto? w T x + b L w xfwTx+bLwx
dontloo,

Sì, è un grande errore di battitura da parte mia. Intendevo df / dw .... ma penso che dipenda di più dal vettore xe se si tratta di un vettore di riga o di un vettore di colonna
chinmay

@dontloo scusate la risposta molto tardi, ma qual è il problema con i gradienti che hanno lo stesso segno di ? Perché è una cosa negativa? dL/df
floyd

1
@floyd ciao Ho appena aggiunto alcuni aggiornamenti per la tua domanda
dontloo
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.