Backprop através de camadas de pool máximo?

62

Esta é uma pequena questão conceitual que me incomoda há um tempo: como podemos retropropagar através de uma camada de pool máximo em uma rede neural?

Me deparei com camadas de pool máximo durante o tutorial da biblioteca nn do Torch 7. A biblioteca abstrai o cálculo do gradiente e as passagens para frente para cada camada de uma rede profunda. Não entendo como o cálculo do gradiente é feito para uma camada de pool máximo.

Eu sei que se você tem uma entrada entrando no neurônio i da camada l , então δ i l (definido como δ i l = Ezililδil ) é dado por: δil=θδil=Ezil

δil=θ(zil)jδjl+1wi,jl,l+1

Portanto, uma camada de pool máximo receberá os 's da próxima camada, como de costume; mas como a função de ativação para os neurônios de pool máximo recebe um vetor de valores (sobre o qual ele atinge o máximo) como entrada, δ i l não é mais um número único, mas um vetor ( θδjl+1δilteria que ser substituído porθ( { z j l } )). Além disso,θ, sendo a função max, não é diferenciável em relação às entradas.θ(zjl)θ({zjl})θ

Então .... como deve funcionar exatamente?

shinvu
fonte

Respostas:

58

Não há gradiente em relação aos valores não máximos, pois alterá-los levemente não afeta a saída. Além disso, o máximo é localmente linear com a inclinação 1, com relação à entrada que realmente atinge o máximo. Assim, o gradiente da próxima camada é passado de volta apenas para o neurônio que atingiu o máximo. Todos os outros neurônios obtêm gradiente zero.

δili{δjl+1}i=argmaxi(zil)

abora
fonte
7
Ah, certo, não há sentido em se propagar de volta pelos neurônios não-máximos - essa foi uma percepção crucial. Portanto, se agora entendi isso corretamente, a propagação traseira através da camada de pool máximo simplesmente seleciona o máximo. neurônio da camada anterior (na qual o pool máximo foi realizado) e continua a propagação traseira somente através disso.
Shinvu 13/05
Mas você não precisa se multiplicar com a derivada da função de ativação?
21718 Jason
11
@ Jason: A função max é localmente linear para a ativação que obteve o máximo, portanto a derivada é constante 1. Para as ativações que não passaram, é 0. Isso é conceitualmente muito semelhante à diferenciação da ReLU (x ) = função de ativação máxima (0, x).
Chrigi 5/02
Qual é o passo menor que a largura do kernel para o pool máximo?
Vatsal 04/03
11
Ótima resposta! E o caso da borda em que várias entradas têm o mesmo valor máximo (por exemplo, 2 valores têm 0 de uma ReLU e os outros dois são negativos)?
DankMasterDan 23/04
6

Max Pooling

Então, suponha que você tenha uma camada P que vem em cima de uma camada PR. Então o passe para frente será mais ou menos assim:

Pi=f(jWijPRj)

Pi

grad(PRj)=igrad(Pi)fWij

f=idf=0f=1f=0

grad(PRmax neuron)=igrad(Pi)Wi max neuron

grad(PRothers)=0.

patapouf_ai
fonte
2

@ A resposta do Shinvu está bem escrita, gostaria de apontar para um vídeo que explica o gradiente da operação Max () e isso dentro de um gráfico computacional que é rápido de entender.!

ao implementar a operação maxpool (um nó computacional em um gráfico computacional - sua arquitetura NN), precisamos de uma função que crie uma matriz de "máscara" que monitore onde está o máximo da matriz. Verdadeiro (1) indica a posição do máximo em X, as outras entradas são Falsas (0). Mantemos o controle da posição do máximo, porque esse é o valor de entrada que influenciou a saída e, portanto, o custo. O Backprop está computando gradientes com relação ao custo; portanto, qualquer coisa que influencie o custo final deve ter um gradiente diferente de zero. Portanto, o backprop "propaga" o gradiente de volta para esse valor de entrada específico que influenciou o custo.

anu
fonte