Différences entre les techniques de rétropropagation

17

Juste pour le plaisir, j'essaie de développer un réseau de neurones.

Maintenant, pour la rétropropagation, j'ai vu deux techniques.

Le premier est utilisé ici et dans de nombreux autres endroits également.

Ce qu'il fait c'est:

  • Il calcule l'erreur pour chaque neurone de sortie.
  • Il la propage en retour dans le réseau (calcul d'une erreur pour chaque neurone interne).
  • Il met à jour les poids avec la formule: (où est le changement de poids, la vitesse d'apprentissage, l'erreur du neurone recevant l'entrée de la synapse et étant la sortie envoyée sur la synapse).
  • Il se répète pour chaque entrée de l'ensemble de données, autant de fois que nécessaire.

Cependant, le réseau neuronal proposé dans ce tutoriel (également disponible sur GitHub) utilise une technique différente:

  • Il utilise une fonction d'erreur (l'autre méthode a une fonction d'erreur, mais ne l'utilise pas pour la formation).
  • Il a une autre fonction qui peut calculer l'erreur finale à partir des poids.
  • Il minimise cette fonction (par descente de gradient).

Maintenant, quelle méthode devrait être utilisée?

Je pense que le premier est le plus utilisé (parce que j'ai vu différents exemples l'utiliser), mais ça marche aussi?

En particulier, je ne sais pas:

  • N'est-il pas davantage soumis aux minimums locaux (puisqu'il n'utilise pas de fonctions quadratiques)?
  • Étant donné que la variation de chaque poids est influencée par la valeur de sortie de son neurone de sortie, les entrées de l'ensemble de données qui produisent simplement des valeurs plus élevées dans les neurones (pas seulement celles de sortie) influencent-elles les poids plus que les autres entrées?

Maintenant, je préfère la première technique, car je la trouve plus simple à mettre en œuvre et plus facile à penser.

Cependant, s'il présente les problèmes que j'ai mentionnés (ce que j'espère que ce n'est pas le cas), y a-t-il une raison réelle de l'utiliser sur la deuxième méthode?

Aspie96
la source

Réponses:

6

Les deux exemples présentent essentiellement la même opération:

  • Dans les deux cas, le réseau est entraîné à la descente de gradient à l'aide de l'erreur quadratique rétropropagrée calculée à la sortie.
  • Les deux exemples utilisent la fonction logistique pour l'activation des nœuds (le dérivé de la fonction logistique sest s(1 - s). Ce dérivé est évidemment très facile à calculer, et cela fait partie de la raison pour laquelle il a été si largement utilisé (de nos jours, la fonction d'activation ReLU est plus populaire , notamment avec les réseaux convolutifs).
  • La première méthode utilise également l' élan .

La principale différence que je peux voir est que dans le premier cas, la rétropropagation est itérative tandis que dans le deuxième exemple, elle est effectuée en mode batch.

La dernière vidéo de la série de Welch Labs présente une méthode quasi-newtonienne qui offre l'avantage de trouver le minimum de la fonction de coût en calculant la Hesse (matrice de dérivées de second ordre de l'erreur par rapport aux poids). Cependant, cela ressemble à comparer des pommes et des oranges - la descente du gradient de vanille n'utilise pas d'informations de second ordre.

cantordust
la source