Quelqu'un peut-il me dire comment je suis censé construire un réseau neuronal en utilisant la méthode batch?
J'ai lu que, en mode batch, pour tous les échantillons de l'ensemble d'apprentissage, nous calculons l'erreur, les poids delta et donc delta pour chaque neurone du réseau, puis au lieu de mettre à jour immédiatement les poids, nous les accumulons, puis avant de commencer la prochaine époque, nous mettons à jour les poids.
J'ai également lu quelque part que, la méthode par lots est comme la méthode en ligne, mais avec la différence qu'il suffit de résumer les erreurs pour tous les échantillons dans l'ensemble de formation, puis d'en prendre la moyenne et de l'utiliser pour mettre à jour les poids comme on fait dans la méthode en ligne (la différence est juste cette moyenne) comme ceci:
for epoch=1 to numberOfEpochs
for all i samples in training set
calculate the errors in output layer
SumOfErrors += (d[i] - y[i])
end
errorAvg = SumOfErrors / number of Samples in training set
now update the output layer with this error
update all other previous layers
go to the next epoch
end
- Laquelle de ces méthodes est vraiment la bonne méthode de traitement par lots?
- Dans le premier cas, l'accumulation de tous les poids delta ne se traduit-elle pas par un nombre énorme?
Réponses:
L'utilisation de la moyenne ou de la somme est équivalente, en ce sens qu'il existe des paires de taux d'apprentissage pour lesquelles elles produisent la même mise à jour.
Pour confirmer cela, rappelez d'abord la règle de mise à jour:
Puis laissezμE n n μE n w
la source
Les deux réponses sont équivalentes. Personnellement, je le considérerais comme une erreur moyenne au lieu de la somme. Mais rappelez-vous que la descente du gradient a un paramètre appelé le taux d'apprentissage, et que seule une partie du gradient de l'erreur est soustraite. Ainsi, si l'erreur est définie comme total de la moyenne peut être compensée en modifiant le taux d'apprentissage.
la source