Comment les poids sont-ils mis à jour dans la méthode d'apprentissage par lots dans les réseaux de neurones?

15

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?
Rika
la source
1
La méthode "correcte" dépend du contexte. Il s'avère que dans de nombreux cas, la mise à jour des poids une seule fois par époque convergera beaucoup plus lentement que la mise à jour stochastique (mise à jour des poids après chaque exemple). J'ajouterai qu'il existe un consensus sur le fait que vous souhaiterez généralement utiliser une certaine forme de mise à jour par lots, mais beaucoup plus souvent que 1x par époque.
Tahlor

Réponses:

9

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:

Δwjej=-αEwjej

Puis laissez μEnnμEnw

Δwjej=-α(nμ)wjej=-αnμwjej

ΔwΔw

Sean Easter
la source
1
La descente en gradient de mini-lots est-elle la même descente en gradient de lots? Je suis perdu ici! sinon quelle est la différence entre ceux-ci? Corrigez-moi si je me trompe, en mode batch, l'ensemble des données doit être lu par lots, les dégradés sont calculés, et quand tous sont lus, ils sont moyennés puis les paramètres sont mis à jour, tandis que, en mini-batch, chacun le lot est lu, les gradients sont calculés, puis les paramètres sont mis à jour, puis le mini-lot suivant est lu jusqu'à la fin de l'époque.
Rika
1
C'est la définition généralement donnée: mettre à jour les paramètres en utilisant un sous-ensemble des données d'entraînement à la fois. (Il existe certaines méthodes dans lesquelles les mini-lots sont échantillonnés au hasard jusqu'à la convergence, c.-à-d. Que le lot ne sera pas traversé à une époque.) Voir si cela est utile.
Sean Easter
0

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.

jlimahaverford
la source
merci, mais si elles sont vraiment les mêmes, pourquoi se donner la peine de gaspiller autant de mémoire en conservant les mises à jour cumulatives pour chaque modèle, alors que nous ne pouvons que additionner les erreurs qui ne seraient qu'une simple variable?
Rika