Backprop a través de Max-Pooling Layers?

62

Esta es una pequeña pregunta conceptual que me ha estado molestando por un tiempo: ¿Cómo podemos propagarnos a través de una capa de agrupación máxima en una red neuronal?

Me encontré con capas de agrupación máxima mientras revisaba este tutorial para la biblioteca nn de Torch 7. La biblioteca abstrae el cálculo de gradiente y pasa hacia adelante para cada capa de una red profunda. No entiendo cómo se realiza el cálculo de gradiente para una capa de agrupación máxima.

Sé que si tienes una entrada entrando en la neurona i de la capa l , entonces δ i l (definida como δ i l = Ezililδil ) viene dado por: δil=θδil=Ezil

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

Entonces, una capa de agrupación máxima recibiría los 's de la siguiente capa como de costumbre; pero dado que la función de activación para las neuronas de agrupación máxima toma un vector de valores (sobre el cual maximiza) como entrada, δ i l ya no es un número único, sino un vector ( θδjl+1δiltendría que ser reemplazado porθ( { z j l } )). Además,θ, siendo la función máxima, no es diferenciable con respecto a sus entradas.θ(zjl)θ({zjl})θ

Entonces ... ¿cómo debería funcionar exactamente?

Shinvu
fuente

Respuestas:

58

No hay gradiente con respecto a los valores no máximos, ya que cambiarlos ligeramente no afecta la salida. Además, el máximo es localmente lineal con pendiente 1, con respecto a la entrada que realmente alcanza el máximo. Por lo tanto, el gradiente de la siguiente capa se devuelve solo a esa neurona que alcanzó el máximo. Todas las demás neuronas tienen gradiente cero.

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

abora
fuente
77
Ah, claro, no tiene sentido volver a propagarse a través de las neuronas no máximas; esa fue una idea crucial. Entonces, si ahora entiendo esto correctamente, la propagación inversa a través de la capa de agrupación máxima simplemente selecciona el máximo. neurona de la capa anterior (en la que se realizó la agrupación máxima) y continúa la propagación hacia atrás solo a través de eso.
shinvu
¿Pero no necesitas multiplicar con la derivada de la función de activación?
Jason
1
@Jason: la función max es localmente lineal para la activación que obtuvo el máximo, por lo que la derivada de la misma es constante 1. Para las activaciones que no se realizaron, es 0. Eso es conceptualmente muy similar a diferenciar la ReLU (x ) = función de activación máxima (0, x).
Chrigi
¿Cuál es el paso es menor que el ancho del núcleo para la agrupación máxima?
Vatsal
1
¡Gran respuesta! ¿Qué pasa con el caso límite donde varias entradas tienen el mismo valor máximo (por ejemplo, 2 valores tienen 0 de un ReLU, y los otros dos son negativos)?
DankMasterDan
6

Max Pooling

Supongamos que tiene una capa P que viene encima de una capa PR. Entonces el pase hacia adelante será algo como esto:

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
fuente
2

La respuesta de @ Shinvu está bien escrita, me gustaría señalar un video que explica el gradiente de la operación Max () y esto dentro de un gráfico computacional que es rápido de entender.

mientras implementamos la operación maxpool (un nodo computacional en un gráfico computacional: su arquitectura NN), necesitamos una función que cree una matriz de "máscara" que realice un seguimiento de dónde está el máximo de la matriz. Verdadero (1) indica la posición del máximo en X, las otras entradas son Falso (0). Hacemos un seguimiento de la posición del máximo porque este es el valor de entrada que finalmente influyó en la salida y, por lo tanto, en el costo. Backprop está calculando gradientes con respecto al costo, por lo que cualquier cosa que influya en el costo final debe tener un gradiente distinto de cero. Entonces, backprop "propagará" el gradiente de regreso a este valor de entrada particular que había influido en el costo.

anu
fuente