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?