Quelle est la différence entre Epoch et itération lors de la formation d'un perceptron multicouche?
Dans la terminologie du réseau de neurones:
Exemple: si vous avez 1000 exemples de formation et que la taille de votre lot est de 500, il faudra 2 itérations pour terminer 1 époque.
FYI: Taille du lot de compromis par rapport au nombre d’itérations pour former un réseau de neurones
Le terme "lot" est ambigu: certaines personnes l'utilisent pour désigner l'ensemble de la formation et d'autres personnes, pour désigner le nombre d'exemples de formation dans une passe avant/arrière (comme je l'ai fait dans cette réponse). Pour éviter cette ambiguïté et préciser que le lot correspond au nombre d'exemples d'apprentissage d'une passe en avant/en arrière, on peut utiliser le terme mini .
Epoch et itération décrivent des choses différentes.
Un Epoch décrit le nombre de fois où l'algorithme voit le jeu de données entier. Ainsi, chaque fois que l'algorithme a vu tous les échantillons du jeu de données, une époque est terminée.
Une itération décrit le nombre de fois qu'un batch de données transmises par l'algorithme. Dans le cas des réseaux de neurones, cela signifie que passe avant et passe arrière. Ainsi, chaque fois que vous passez un lot de données via le NN, vous complétez une itération.
Un exemple pourrait le rendre plus clair.
Supposons que vous ayez un jeu de données de 10 exemples (ou échantillons). Vous avez une taille de lot de 2 et vous avez indiqué que vous souhaitez que l'algorithme s'exécute sur 3 périodes.
Par conséquent, à chaque époque, vous avez 5 lots (10/2 = 5). Chaque lot est passé par l'algorithme, vous avez donc 5 itérations par époque. Depuis que vous avez spécifié 3 époques, vous avez un total de 15 itérations (5 * 3 = 15) pour la formation.
De nombreux algorithmes d'apprentissage de réseau neuronal impliquent de faire plusieurs présentations de l'ensemble de données au réseau neuronal. Souvent, une seule présentation de l'ensemble des données est appelée "époque". En revanche, certains algorithmes présentent des données au réseau de neurones un cas à la fois.
"Itération" est un terme beaucoup plus général, mais puisque vous en avez parlé avec "Epoch", je suppose que votre source fait référence à la présentation d'un seul cas à un réseau de neurones.
Vous avez des données d’entraînement que vous mélangez et choisissez dans des mini-lots. Lorsque vous ajustez vos poids et biais en utilisant un mini-lot, vous avez terminé une itération. Une fois que vous avez épuisé vos mini-lots, vous avez terminé une époque. Ensuite, vous mélangez à nouveau vos données d'entraînement, sélectionnez à nouveau vos mini-lots et parcourez-les à nouveau. Ce serait votre deuxième époque.
En règle générale, vous divisez votre ensemble de tests en petits lots pour que le réseau puisse en tirer des enseignements, puis vous fassiez suivre l'entraînement, étape par étape, en fonction du nombre de couches, en appliquant une descente par gradient. Toutes ces petites étapes peuvent être appelées itérations.
Un Epoch correspond à l'ensemble de l'entraînement passant par tout le réseau. Il peut être utile de limiter cela, par exemple. lutter contre la suralimentation.
Une époque contient quelques itérations. C'est en fait ce qu'est cette époque. Définissons 'Epoch' comme le nombre d'itérations sur l'ensemble de données afin de former le réseau de neurones.
À ma connaissance, lorsque vous devez former un NN, vous avez besoin d’un ensemble de données volumineux comprenant de nombreux éléments de données. lors de la formation de NN, les données sont entrées dans NN une à une, ce qu’on appelle une itération; Lorsque tout le jeu de données est traité, cela s'appelle une époque.
Je crois que l'itération est équivalente à un lot unique forward + backprop dans un lot SGD. Epoch parcourt une fois l'intégralité du jeu de données (comme quelqu'un l'a mentionné).
Pour comprendre la différence entre ceux-ci, vous devez comprendre le algorithme de descente de gradient et ses variantes .
Avant de commencer avec la réponse réelle, je voudrais construire un peu de contexte.
Un batch est l'ensemble de données complet. Sa taille correspond au nombre total d’exemples de formation dans l’ensemble de données disponible.
Taille du mini-lot est le nombre d'exemples que l'algorithme d'apprentissage traite en un seul passage (en avant et en arrière).
Un mini-lot est une petite partie du jeu de données donné taille du mini-lot.
Iterations est le nombre de lots de données que l'algorithme a vu (ou simplement le nombre de passages effectués par l'algorithme sur l'ensemble de données).
Epochs est le nombre de fois qu'un algorithme d'apprentissage voit le jeu de données complet. Maintenant, cela peut ne pas être égal au nombre de itérations, car le jeu de données peut également être traité en mini-lots, en substance, n seul passage peut traiter uniquement une partie du jeu de données . Dans de tels cas, le nombre de itérations n'est pas égal au nombre de époques.
Dans le cas de la descente de gradient par lots, le lot entier est traité à chaque passe d’entraînement. Par conséquent, l’optimiseur de descente de gradient permet une convergence plus douce que la descente de gradient en mode Mini-batch, mais prend plus de temps. La descente en gradient de lots est garantie pour trouver un optimum s’il existe.
La descente de gradient stochastique est un cas particulier de descente de gradient en mini-lot dans laquelle taille du mini-lot est 1.
Epoch est une itération d'un sous-ensemble d'échantillons pour l'apprentissage, par exemple, l'algorithme de descente de gradient en réseau neutre. Une bonne référence est: http://neuralnetworksanddeeplearning.com/chap1.html
Notez que la page a un code pour l’algorithme de descente de gradient qui utilise Epoch.
def SGD(self, training_data, epochs, mini_batch_size, eta,
test_data=None):
"""Train the neural network using mini-batch stochastic
gradient descent. The "training_data" is a list of tuples
"(x, y)" representing the training inputs and the desired
outputs. The other non-optional parameters are
self-explanatory. If "test_data" is provided then the
network will be evaluated against the test data after each
Epoch, and partial progress printed out. This is useful for
tracking progress, but slows things down substantially."""
if test_data: n_test = len(test_data)
n = len(training_data)
for j in xrange(epochs):
random.shuffle(training_data)
mini_batches = [
training_data[k:k+mini_batch_size]
for k in xrange(0, n, mini_batch_size)]
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta)
if test_data:
print "Epoch {0}: {1} / {2}".format(
j, self.evaluate(test_data), n_test)
else:
print "Epoch {0} complete".format(j)
Regarde le code. Pour chaque époque, nous générons de manière aléatoire un sous-ensemble d'entrées pour l'algorithme de descente de gradient. Pourquoi Epoch est efficace est également expliqué dans la page. S'il vous plaît, jetez un oeil.