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 = ∂ E ) é dado por: δil=θ
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 ( θteria 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.
Então .... como deve funcionar exatamente?
fonte
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:
fonte
@ 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.
fonte