Question

Je lis à propos de rétropropagation, l'un des nombreux processus impliqués dans la descente de gradient, et je ne pouvais pas saisir tout à fait l'intuition dans l'une des équations.

http://neuralnetworksanddeeplearning.com/chap2.html#MathJax-Element -185-Frame

équation An pour l'erreur $ \ delta ^ l $ en termes de l'erreur dans la couche suivante, $ \ delta ^ {l + 1} $: En particulier

$$ \ Delta ^ l = ((w ^ {l + 1}) ^ T ^ {delta de la l + 1}) \ circ \ sigma '(z ^ l), $$

où $ (w ^ {l + 1}) ^ T $ est la transposée de la matrice de poids $ w ^ {l + 1} $ pour le $ (l + 1) ^ {e} $ couche.

...

Quand on applique la matrice de poids TRANSPOSE $ (w ^ {l + 1}) ^ T $, on peut penser intuitivement ce que le déplacement de l'erreur en arrière à travers le réseau, nous donnant une sorte de mesure de l'erreur à la sortie du $ l ^ {e} $ couche.

Je sais comment chacun des termes sont dérivés algébriquement (de plus bas du texte), mais je ne peux pas saisir la partie intuitive. En particulier, je ne comprends pas comment l'application de la transposition de la matrice de poids est comme déplacer l'arrière d'erreur.

Les mathématiques est assez simple. L'équation est la simplification de l'erreur dans la couche $ l $ exprimé en termes d'erreur dans la couche $ l + 1 $. Mais, tout le peu d'intuition ne vient pas naturellement.

Quelqu'un pourrait-il expliquer s'il vous plaît, dans quel sens l'application de la transposition est comme « déplacer les arrière d'erreur »?

Était-ce utile?

La solution

dans quel sens l'application de la transposition est comme « déplacer les arrière d'erreur »?

Il est pas. Ou au moins vous ne devriez pas trop penser l'analogie.

Ce que vous faites est en fait le calcul du gradient - ou un dérivé partiel - du terme d'erreur / coût par rapport aux activations et le poids du réseau. Cela se fait en appliquant de façon répétée la règle de chaîne des conditions qui dépendent les uns des autres dans le réseau, jusqu'à ce que vous avez le gradient pour toutes les variables que vous contrôlez dans le réseau (généralement vous êtes intéressé à changer les poids entre les neurones, mais vous pouvez modifier d'autres choses si elles sont sous votre contrôle - c'est exactement la profondeur de rêve fonctionne aussi, au lieu de traiter les coefficients de pondération en tant que variable, on traite l'image d'entrée comme une).

L'analogie est utile en ce qu'elle explique la progression et l'objectif des calculs répétés à travers des couches. Il est également correct en ce que les valeurs de gradient dans une couche dépend de façon critique sur les valeurs dans les couches « supérieures ». Cela peut conduire à des problèmes sur la gestion des intuitions avec des valeurs de gradient dans les réseaux profonds.

Il n'y a pas de relation entre la prise de la transposition de la matrice et « déplacer les arrière d'erreur ». En fait, vous prenez des sommes sur les termes reliés par le poids du modèle NN, et qui se trouve à la même opération comme la multiplication de matrice donnée. La multiplication matricielle est une façon concise d'écrire la relation (et est utile quand on regarde Optimisations), mais n'est pas essentielle à la compréhension des réseaux de neurones.

L'instruction « déplacer l'erreur en arrière » est à mon avis une cause commune des problèmes lorsque les développeurs qui n'ont pas étudié la théorie essayer avec soin pour la mettre en œuvre. Je l'ai vu pas mal de tentatives de mise en œuvre de la propagation de retour ce culte de fret en termes d'erreur et multiplications sans compréhension. Il ne permet pas ici que certaines combinaisons de fonctions de coût et les fonctions d'activation de la couche de sortie ont été délibérément choisi d'avoir des dérivés très simples, de sorte que ressemble le réseau de neurones est la copie des valeurs d'erreur dans presque multiplications magiques en valeur d'activation, etc. en fait, ces dérivés termes simples prend une connaissance raisonnablement compétente du calcul de base.

Autres conseils

I comme à l'image pré-multiplication de la matrice de poids comme raccourci pour multiplier les poids des connexions correspondant à un neurone particulier (par exemple $ j ^ {e} $ ) neurone dans le $ l ^ {e} $ couche pour chaque neurone dans la classe $ (l-1) ^ {e} $ couche.

De même, avant la multiplication avec la transposée de la matrice de poids est comme un raccourci pour multiplier les poids des connexions correspondant à un neurone particulier (disons $ k ^ {e} $ ) dans le $ (l-1) ^ {e} $ couche de chaque neurone dans le $ l ^ {e} $ couche.

Cette intuition découle de la définition de la matrice de poids, comme $ w ^ l_ {jk} $ est définie de telle sorte que $ w ^ l_ {jk} $ pour indiquer le poids de la connexion de la classe $ k ^ {e} $ neurone dans le $ (l-1) ^ {e} $ couche à la $ j ^ {e} $ neurone dans le $ l ^ {e} $ couche. w ^ l_ {jk}
(source: neuralnetworksanddeeplearning.com )

Et comme vous pouvez interpréter Prémultiplication avec une matrice en gardant la première constante de l'indice et en boucle sur le second indice, l'intuition de pré-multiplication avec la matrice de poids pour obtenir la somme sur les poids de la couche précédente et prémultipliant avec la matrice de poids pour obtenir la somme sur les poids de la couche suivante semble naturel.

Matrix Multiplication

Aussi je voudrais terminer en citant Jon von Neumann en disant

« Jeune homme, en mathématiques que vous ne comprenez pas les choses. Vous venez de vous habituer à eux. »

Licencié sous: CC-BY-SA avec attribution
scroll top