8 votes

La formation par lots utilise la somme des mises à jour ? ou la moyenne des mises à jour ?

J'ai quelques questions sur la formation par lots des réseaux neuronaux.

Tout d'abord, lorsque nous mettons à jour les poids en utilisant l'apprentissage par lots, la quantité de changement est constituée des gradients accumulés pour la taille du lot. Dans ce cas, la quantité de changement est la somme des gradients ? ou la moyenne des gradients ?

Si la réponse est la somme des gradients, le montant du changement sera beaucoup plus important que pour la formation en ligne, car les montants sont cumulés. Dans ce cas, je ne pense pas que les poids puissent être bien optimisés.

Sinon, si la réponse est la moyenne des gradients, alors il semble très raisonnable de bien optimiser les poids. Cependant, dans ce cas, nous devons nous entraîner beaucoup plus de fois que l'entraînement en ligne car il ne met à jour les poids qu'une seule fois pour la taille du lot de données.

Deuxièmement, quelle que soit la réponse à la première question, lorsque j'utilise les codes d'exemple CNN de Tensorflow pour MNIST comme suit, il peut optimiser le poids si rapidement, de sorte que la précision de la formation devient supérieure à 90% même dans la deuxième étape.

\=======================================================================

train_step = tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy) accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) for i in range(1000): batch = mnist.train.next_batch(100) if i%100 == 0: train_accuracy = sess.run(accuracy, feed_dict={x:batch[0], y_:batch[1], keep_prob: 1.0}) sess.run(train_step, feed_dict={x: batch[0], y_:batch[1], keep_prob:1.0})

\========================================================================

Veuillez expliquer comment Tensorflow optimise le poids si rapidement.

4voto

Arnaud De Broissia Points 555

La réponse à cette question dépend de votre fonction de perte.

Si loss_element est votre fonction de perte pour un élément du lot, alors, la perte de votre lot sera une fonction de toutes vos pertes individuelles.

Par exemple, si vous choisissez d'utiliser tf.reduce_mean alors votre perte est moyennée sur tous les éléments de votre lot. Et le gradient aussi. Si vous utilisez tf.reduce_sum alors votre gradient sera la somme de tous vos gradients par élément.

2voto

user7573566 Points 111

C'est la même chose que d'utiliser la somme des gradients ou le gradient moyen, car vous devrez ensuite trouver un bon taux d'apprentissage qui tiendra probablement compte de la division par la taille du lot dans la moyenne du gradient.

Cependant, l'utilisation de la moyenne sur le lot présente l'avantage d'avoir une perte comparable entre deux formations utilisant des tailles de lot différentes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X