Propagazione inversa attraverso livelli massimi di pooling


13

Ho una piccola domanda secondaria a questa domanda .

Capisco che quando si propaga indietro attraverso uno strato di pool massimo il gradiente viene instradato indietro in modo tale che il neurone nel livello precedente che è stato selezionato come max ottenga tutto il gradiente. Ciò di cui non sono sicuro al 100% è come il gradiente nel livello successivo viene reindirizzato al livello di pooling.

Quindi la prima domanda è se ho un livello di pooling collegato a un livello completamente connesso, come l'immagine qui sotto.

Esempio 1

Quando si calcola il gradiente per il "neurone" ciano del livello di pooling, posso sommare tutti i gradienti dai neuroni del livello FC? Se questo è corretto, allora ogni "neurone" del livello di pooling ha lo stesso gradiente?

Ad esempio, se il primo neurone dello strato FC ha un gradiente di 2, il secondo ha un gradiente di 3 e il terzo un gradiente di 6. Quali sono i gradienti dei "neuroni" blu e viola nello strato di raggruppamento e perché?

E la seconda domanda è quando il livello di pooling è collegato a un altro livello di convoluzione. Come calcolo quindi il gradiente? Vedi l'esempio sotto.

example2

Per il "neurone" più in alto a destra dello strato di raggruppamento (quello verde delineato) prendo semplicemente il gradiente del neurone viola nel successivo strato conv e lo instrado indietro, giusto?

Che ne dici di quello verde pieno? Ho bisogno di moltiplicare insieme la prima colonna di neuroni nel livello successivo a causa della regola della catena? O devo aggiungerli?

Per favore, non pubblicare un sacco di equazioni e dimmi che la mia risposta è proprio lì perché ho cercato di avvolgere la testa attorno alle equazioni e ancora non capisco perfettamente, ecco perché sto ponendo questa domanda in modo semplice modo.


Per quanto riguarda la tua prima domanda, la backpropagation è vedere quali pesi e input influenzano la tua perdita in che modo. In caso di pool massimo, solo il massimo dei neuroni influenza l'uscita (tranne quando c'è un pareggio). Quindi propagare l'errore solo al neurone che aveva il massimo valore di attivazione.
Jan van der Vegt,

Sì, lo capisco e l'ho anche detto in un riassunto all'inizio del mio post. Ma non capisco come faccio a "combinare" il gradiente dei neuroni del livello successivo per propagare indietro. Spero tu sappia cosa intendo.
Majster,

Risposte:


5

Se questo è corretto, allora ogni "neurone" del livello di pooling ha lo stesso gradiente?

No. Dipende dai pesi e dalla funzione di attivazione. E più comunemente i pesi sono diversi dal primo neurone dello strato di pool allo strato FC come dal secondo strato dello strato di pool allo strato FC.

Quindi in genere avrai una situazione come:

FCio=f(ΣjWiojPj)

Dove è l'ith neurone nello strato completamente connesso, è il jth neurone nello strato di pool e è la funzione di attivazione e i pesi.FCioPjfW

Ciò significa che il gradiente rispetto a P_j è

grun'd(Pj)=Σiogrun'd(FCio)f'Wioj .

Che è diverso per j = 0 o j = 1 perché W è diverso.

E la seconda domanda è quando il livello di pooling è collegato a un altro livello di convoluzione. Come calcolo quindi il gradiente?

Non fa differenza a quale tipo di layer è connesso. È sempre la stessa equazione. Somma di tutti i gradienti sul livello successivo moltiplicata per il modo in cui l'output di quei neuroni è influenzato dal neurone sul livello precedente. La differenza tra FC e Convoluzione è che in FC tutti i neuroni nel livello successivo forniranno un contributo (anche se forse piccolo) ma in Convoluzione la maggior parte dei neuroni nel livello successivo non sono affatto influenzati dal neurone nel livello precedente, quindi il loro contributo è esattamente zero.

Per il "neurone" più in alto a destra dello strato di raggruppamento (quello verde delineato) prendo semplicemente il gradiente del neurone viola nel successivo strato conv e lo instrado indietro, giusto?

Giusto. Inoltre, anche il gradiente di qualsiasi altro neurone su quello strato di convoluzione che prende come input il neurone più a destra più in alto dello strato di pooling.

Che ne dici di quello verde pieno? Ho bisogno di moltiplicare insieme la prima colonna di neuroni nel livello successivo a causa della regola della catena? O devo aggiungerli?

Aggiungili. A causa della regola della catena.

Max Pooling Fino a questo punto, il fatto che fosse max pool era totalmente irrilevante, come puoi vedere. Il pool massimo è solo il fatto che la funzione di attivazione su quel livello è . Ciò significa che i gradienti per i livelli precedenti sono:mun'Xgrun'd(PRj)

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

Ma ora per il neurone massimo e per tutti gli altri neuroni, quindi per il neurone massimo nel livello precedente e per tutti gli altri neuroni. Così:f=iodf=0f'=1f'=0

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

grun'd(PRotherS)=0.

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.