Question

Mise à jour:. Une meilleure formulation de la question

Je suis en train de comprendre l'algorithme de rétropropagation avec un réseau de neurones XOR comme un exemple. Dans ce cas, il y a 2 neurones d'entrée + 1 polarisation, 2 neurones de la couche cachée + 1 polarisation, et 1 neurone de sortie.

 A   B  A XOR B
 1    1   -1
 1   -1    1
-1    1    1
-1   -1   -1


(source: wikimedia.org )

J'utilise stochastique rétropropagation .

Après avoir lu un peu plus que j'ai trouvé que l'erreur de l'unité de sortie se propage aux couches cachées ... Au départ, ce fut confus, parce que quand vous arrivez à la couche d'entrée du réseau de neurones, chaque neurone obtient un ajustement d'erreur à la fois des neurones dans la couche cachée. En particulier, la façon dont l'erreur est distribuée est difficile à saisir au premier abord.

Étape 1 calculer la sortie pour chaque instance d'entrée.
Étape 2 calculer l'erreur entre le neurone de sortie (s) (dans notre cas, il n'y a qu'un) et la valeur cible (s):
Etape 2
Étape 3 nous utilisons l'erreur de l'étape 2 pour calculer l'erreur pour chaque unité cachée h:
Etape 3

Le « kh de poids » est le poids entre l'unité cachée h et l'unité de sortie k, et cela est source de confusion, car l'unité d'entrée n'a pas un poids directe associé à l'unité de sortie. Après avoir regardé la formule pendant quelques heures, je commençais à penser à ce que la somme signifie, et je commence à arriver à la conclusion que chaque poids de neurone d'entrée qui se connecte aux neurones de la couche cachée est multipliée par l'erreur de sortie et résumé . Ceci est une conclusion logique, mais la formule semble un peu confus car il dit clairement le « poids kh » (entre la couche de sortie k et couche cachée h).

Est-ce que je comprends bien tout ici? Quelqu'un peut-il confirmer?

Quelle est O (h) de la couche d'entrée? Je crois comprendre que chaque noeud d'entrée possède deux sorties: l'une qui va dans le premier noeud de la couche cachée et une qui va dans le second noeud couche cachée. Laquelle des deux sorties doit être branchée dans la partie O(h)*(1 - O(h)) de la formule
Etape 3

Était-ce utile?

La solution

Le tutoriel que vous avez publié ici est en train de faire fausse route. Je double vérifié contre deux livres standard et deux de mes implémentations de travail de Bishop. Je vais indiquer ci-dessous où exactement.

Une chose importante à garder à l'esprit est que vous êtes toujours à la recherche pour les dérivés de la fonction d'erreur par rapport à une unité ou poids. Les premiers sont les deltas, ce dernier est ce que vous utilisez pour mettre à jour votre poids.

Si vous voulez comprendre rétropropagation, vous devez comprendre la règle de la chaîne. Il est tout au sujet de la règle de la chaîne ici. Si vous ne savez pas comment cela fonctionne exactement, vérifier à wikipedia - il est pas difficile. Mais dès que vous comprenez les dérivations, tout tombe en place. Promettre! :)

∂E / ∂W peut être constitué en ∂E / ∂O ∂O / ∂W via la règle de la chaîne. est facilement calculé ∂O / ∂W, car il est tout simplement le dérivé de l'activation / sortie d'une unité par rapport au poids. ∂E / ∂O est en fait ce que nous appelons les deltas. (Je suppose que E, o et W sont des vecteurs / matrices ici)

Nous avons les pour les unités de production, puisque c'est où l'on peut calculer l'erreur. (La plupart du temps, nous avons une fonction d'erreur qui se résume à delta (t_k -. O_k), par exemple pour la fonction d'erreur quadratique dans le cas des sorties linéaires et entropie croisée en cas pour les sorties logistiques)

La question est maintenant, comment pouvons-nous obtenir les dérivés pour les unités internes? Eh bien, nous savons que la sortie d'une unité est la somme de toutes les unités entrantes pondérées par leur poids et l'application d'une fonction de transfert par la suite. Ainsi o_k = f (somme (w_kj * o_j, pour tout j)).

Alors qu'est-ce que nous faisons est, dérivons o_k par rapport à o_j. Depuis delta_j = ∂E / ∂o_j = ∂E / ∂o_k ∂o_k / ∂o_j = delta_k ∂o_k / o_j. Donc, étant donné delta_k, nous pouvons calculer delta_j!

Faisons cela. o_k = f (somme (w_kj * o_j, pour tout j)) => ∂o_k / ∂o_j = f '(somme (w_kj * o_j, pour tout j)) * w_kj = f' (z_k) * w_kj.

Pour le cas de la fonction de transfert sigmoïde, cela devient z_k (1 - z_k) * w_kj. ( Voici l'erreur dans le tutoriel, l'auteur dit o_k (1 - o_k) * w_kj !)

Autres conseils

Je ne suis pas sûr de ce que votre question est en fait, mais je suis passé par moi-même tutoriel et je peux vous assurer, autre qu'une faute de frappe une évidence, il n'y a rien de mal à ce sujet.

Je vais faire l'hypothèse que votre question est parce que vous êtes confus au sujet de la façon dont la rétropropagation caché delta est dérivé. Si tel est votre question, s'il vous plaît considérer


(source: pandamatak.com )

Vous êtes probablement confus quant à la façon dont l'auteur dérivé cette équation. Ceci est en fait une simple application de la règle de la chaîne à plusieurs variables. A savoir, (ce qui suit est tiré de wikipedia )

"Supposons que chaque argument de z = f (u, v) est une fonction à deux variables de telle sorte que u = h (x, y) et v = g (x, y), et que ces fonctions sont différentiables . Ensuite, la règle de la chaîne ressemblerait à ceci:

text alt

text alt «

Maintenant, imaginez l'extension de la règle de la chaîne par un argument d'induction à

E (z ' 1 , z' 2 , .., z ' n ) où z ' k est la sortie de la couche de sortie du kième pré-activation, et z ' k (p ji ), qui est-à-dire que E est une fonction de z' et z » est elle-même fonction de w ji (si cela n'a pas de sens pour vous d'abord pense très attentivement sur la façon dont un NN est configuré.) l'application de la règle de la chaîne directement étendue à n variables:

Ae (z ' 1 , z' 2 , .., z ' n ) / < sub> AW ji = Σ k AE / Az ' k Az ' k / AW ji

qui est le plus important étape, l'auteur applique alors la règle de la chaîne à nouveau, cette fois dans la somme d'élargir le Azi ' k / Gp < sub> ji terme, qui est

Az ' k / AW ji = Az' k / δo j δo j / Az j Az j / AW ji .

Si vous avez des difficultés à comprendre la règle de la chaîne, vous devrez peut-être suivre un cours sur le calcul à plusieurs variables, ou lire une telle section dans un manuel.

Bonne chance.

Ce que je lis de l'équation de l'étape 3 est:

  1. O_h = dernière sortie de cette unité cachée (O_h sur la couche d'entrée est la valeur d'entrée réelle)
  2. w_kh = poids de connexion entre cette unité cachée et une unité de la couche suivante (vers la sortie)
  3. delta_k = erreur de l'unité de la couche suivante (vers la sortie, même unité que point précédent)

Chaque unité dispose d'une seule sortie, mais chaque liaison entre la sortie et la couche suivante est pondérée. Ainsi, la sortie est la même, mais à l'extrémité de réception, chaque unité recevra une valeur différente si le poids des liens est différent. O_h se réfère toujours à la valeur de ce neurone pour la dernière itération. Erreur ne s'applique pas à la couche d'entrée, comme par définition, l'entrée n'a pas « erreur » en tant que tel.

L'erreur doit être couche calculée par couche, à partir du côté de la sortie, car nous avons besoin des valeurs d'erreur de la couche N + 1 pour calculer la couche N. Vous avez raison, il n'y a pas de lien direct entre l'entrée et la sortie dans rétropropagation .

Je crois que l'équation est correcte, si contraire à l'intuition. Ce qui est probablement la confusion est que la propagation vers l'avant pour chaque unité, nous devons considérer toutes les unités et les liens sur la gauche de l'appareil (valeurs d'entrée), mais pour la propagation d'erreur (rétropropagation) était doivent prendre en compte les unités à droite (sortie valeur) de l'unité en cours de traitement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top