Backprop attraverso i livelli di pooling massimo?


62

Questa è una piccola domanda concettuale che mi assilla da un po 'di tempo: come possiamo propagare indietro attraverso uno strato di max pooling in una rete neurale?

Mi sono imbattuto nei livelli di max pooling durante questa esercitazione per la libreria nn di Torch 7. La libreria estrae il calcolo del gradiente e passa in avanti per ogni livello di una rete profonda. Non capisco come viene fatto il calcolo del gradiente per un livello di pool massimo.

So che se hai un input nel neurone del livello , allora (definito come ) è dato da: il δ i l δ i l=Ezioliolδiol δil=θδiol=Eziol

δiol=θ'(ziol)Σjδjl+1wio,jl,l+1

Quindi, un livello di pool massimo riceverebbe i del livello successivo come al solito; ma poiché la funzione di attivazione per i neuroni del max pooling accetta un vettore di valori (oltre il quale raggiunge il massimo) come input, non è più un singolo numero, ma un vettore ( dovrebbe essere sostituito da ). Inoltre, , essendo la funzione max, non è differenziabile rispetto ai suoi input.δ i l θδjl+1δiolθ'(zjl)θ({zjl})θ

Quindi .... come dovrebbe funzionare esattamente?

Risposte:


58

Non vi è alcun gradiente rispetto ai valori non massimi, poiché modificarli leggermente non influisce sull'output. Inoltre il max è localmente lineare con la pendenza 1, rispetto all'ingresso che effettivamente raggiunge il max. Pertanto, il gradiente dallo strato successivo viene restituito solo a quel neurone che ha raggiunto il massimo. Tutti gli altri neuroni ottengono un gradiente zero.

Quindi nel tuo esempio, sarebbe un vettore di tutti gli zeri, tranne per il fatto che l' esima posizione otterrà valori doveδiolio*{δjl+1}io*=un'rgmun'Xio(ziol)


7
Oh giusto, non ha senso propagarsi indietro attraverso i neuroni non massimi - questa era un'intuizione cruciale. Quindi, se ora lo capisco correttamente, la propagazione all'indietro attraverso il livello max pooling seleziona semplicemente il valore max. neurone del livello precedente (su cui è stato effettuato il max-pooling) e continua la propagazione di ritorno solo attraverso quello.
shinvu,

Ma non è necessario moltiplicarsi con la derivata della funzione di attivazione?
Jason

1
@Jason: la funzione max è localmente lineare per l'attivazione che ha ottenuto il massimo, quindi la sua derivata è costante 1. Per le attivazioni che non sono state superate, è 0. È concettualmente molto simile alla differenziazione della ReLU (x ) = funzione di attivazione max (0, x).
Chrigi,

Qual è il passo è inferiore alla larghezza del kernel per il pooling massimo?
Vatsal

1
Bella risposta! Che dire del caso limite in cui più voci hanno lo stesso valore massimo (ad esempio 2 valori hanno 0 da una ReLU e gli altri due sono negativi)?
DankMasterDan

6

Pooling massimo

Supponiamo quindi di avere uno strato P che si trova sopra uno strato PR. Quindi il passaggio in avanti sarà qualcosa del genere:

Pio=f(ΣjWiojPRj) ,

dove è l'attivazione dell'ith neurone dello strato P, f è la funzione di attivazione e W sono i pesi. Quindi se ne ricavate, con la regola della catena ottenete che i gradienti scendano come segue:Pio

grun'd(PRj)=Σiogrun'd(Pio)f'Wioj

f=iodf=0f'=1f'=0

grun'd(PRmun'X neuron)=Σiogrun'd(Pio)Wio mun'X neuron

grun'd(PRotherS)=0.


2

La risposta di @ Shinvu è ben scritta, vorrei indicare un video che spiega il gradiente dell'operazione Max () e questo all'interno di un grafico computazionale che è veloce da capire.!

durante l'implementazione dell'operazione maxpool (un nodo computazionale in un grafo computazionale-Your NN architecture), abbiamo bisogno di una funzione che crea una matrice "maschera" che tenga traccia di dove si trova il massimo della matrice. True (1) indica la posizione del massimo in X, le altre voci sono False (0). Teniamo traccia della posizione del massimo perché questo è il valore di input che alla fine ha influenzato l'output e quindi il costo. Backprop sta calcolando i gradienti rispetto al costo, quindi tutto ciò che influenza il costo finale dovrebbe avere un gradiente diverso da zero. Pertanto, il backprop "propagherà" il gradiente a questo particolare valore di input che ha influenzato il costo.

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.