Je regarde comment implémenter le décrochage sur un réseau de neurones profond et j'ai trouvé quelque chose de contre-intuitif. Dans la phase avant, les activations du masque de décrochage avec un tenseur aléatoire de 1 et 0 pour forcer le filet à apprendre la moyenne des poids. Cela aide le net à mieux se généraliser. Mais pendant la phase de mise à jour de la descente de gradient, les activations ne sont pas masquées. Cela me semble contre-intuitif. Si je masque les activations de connexions avec abandon, pourquoi ne devrais-je pas masquer la phase de descente du gradient?
9
Réponses:
Dans le décrochage, comme décrit dans http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf , les poids ne sont pas masqués. Au lieu de cela, les activations des neurones sont masquées, par exemple telles qu'elles sont présentées pour la formation (c'est-à-dire que le masque est randomisé pour chaque marche avant et backprop dégradé, jamais répété).
Les activations sont masquées lors de la passe avant et les calculs de gradient utilisent le même masque lors de la rétropropagation de cet exemple. Cela peut être implémenté en tant que modificateur dans une description de couche, ou en tant que couche de suppression séparée.
Pendant la phase de mise à jour du poids, généralement appliqué sur un mini-lot (où chaque exemple aurait eu un masque différent appliqué), il n'y a plus d'utilisation de masques de décrochage. Les valeurs de gradient utilisées pour la mise à jour ont déjà été affectées par les masques appliqués lors de la propagation arrière.
J'ai trouvé une référence utile pour apprendre comment fonctionne l'abandon, pour peut-être vous implémenter, est la boîte à outils Deep Learn pour Matlab / Octave.
la source