C'est une petite question conceptuelle qui me hante depuis un moment: comment pouvons-nous propager en arrière à travers une couche de regroupement maximal dans un réseau de neurones?
Je suis tombé sur des couches de max-pooling en parcourant ce tutoriel pour la bibliothèque nn de Torch 7. La bibliothèque résume le calcul du gradient et les passes directes pour chaque couche d'un réseau profond. Je ne comprends pas comment le calcul du gradient est effectué pour une couche de regroupement maximal.
Je sais que si vous avez une entrée allant dans le neurone i de la couche l , alors δ i l (défini comme δ i l = ∂ E ) est donné par: δil=θ
Ainsi, une couche de regroupement maximal recevrait les de la couche suivante comme d'habitude; mais comme la fonction d’activation pour les neurones de regroupement maximal prend en entrée un vecteur de valeurs (sur lequel elle est maximale), n’est plus un nombre unique, mais un vecteur ( devrait être remplacé par ). De plus, θδ i l θ∇& thetav( { z j l } ) , étant la fonction max, n'est pas différentiable en ce qui concerne ses entrées.
Alors .... comment cela devrait-il fonctionner exactement?
Max Pooling
Supposons donc que vous avez une couche P qui vient au-dessus d’une couche PR. Ensuite, la passe avant ressemblera à ceci:
,Pje= f( ΣjWje jPRj)
où est l'activation du treizième neurone de la couche P, f est la fonction d'activation et W les poids. Donc, si vous dérivez cela, vous obtenez par la règle de chaîne que les gradients s'écoulent comme suit:Pje
.gr a d( PRj) = ∑jegr a d( Pje) f′Wje j
Mais maintenant, si vous avez mise en commun max, pour le neurone max et f = 0 pour tous les autres neurones, donc f ' = 1 pour le neurone max dans la couche précédente et f ' = 0 pour tous les autres neurones. Alors:F= i d F= 0 F′= 1 F′= 0
la source
La réponse de @ Shinvu est bien écrite, je voudrais pointer sur une vidéo qui explique le gradient de l'opération Max () et cela dans un graphique de calcul rapide à saisir.!
lors de la mise en œuvre de l'opération maxpool (un noeud de calcul dans un graphe de calcul - Votre architecture NN), nous avons besoin d'une fonction qui crée une matrice "masque" qui garde une trace de l'emplacement du maximum de la matrice. True (1) indique la position du maximum dans X, les autres entrées sont False (0). Nous gardons une trace de la position du maximum parce que c'est la valeur d'entrée qui a finalement influencé la sortie, et donc le coût. Backprop calcule les gradients en fonction du coût. Par conséquent, tout ce qui influence le coût final doit avoir un gradient non nul. Ainsi, backprop "propagera" le dégradé sur cette valeur d'entrée particulière qui avait influencé le coût.
la source