Época frente a iteración al entrenar redes neuronales

¿Cuál es la diferencia entre época e iteración cuando se entrena un perceptrón multicapa?

En la terminología de la neural network:

  • una época = un pase hacia adelante y un pase hacia atrás de todos los ejemplos de entrenamiento
  • tamaño de lote = la cantidad de ejemplos de entrenamiento en un pase adelante / atrás. Cuanto mayor sea el tamaño del lote, más espacio de memoria necesitará.
  • número de iteraciones = número de pases, cada pase usando el número de [tamaño del lote] de ejemplos. Para ser claros, un pase = un pase hacia adelante + un pase hacia atrás (no contamos el pase hacia adelante y el pase hacia atrás como dos pases diferentes).

Ejemplo: si tiene 1000 ejemplos de entrenamiento y el tamaño del lote es 500, tomará 2 iteraciones para completar 1 época.

FYI: Tamaño del lote Tradeoff vs. número de iteraciones para entrenar una neural network


El término “lote” es ambiguo: algunas personas lo usan para designar todo el conjunto de entrenamiento, y algunas personas lo usan para referirse a la cantidad de ejemplos de entrenamiento en un pase hacia adelante / hacia atrás (como hice en esta respuesta). Para evitar esa ambigüedad y dejar claro que el lote corresponde al número de ejemplos de entrenamiento en un pase hacia adelante / hacia atrás, se puede usar el término mini-lote .

La época y la iteración describen cosas diferentes.


Época

Una época describe la cantidad de veces que el algoritmo ve el conjunto de datos completo . Entonces, cada vez que el algoritmo ha visto todas las muestras en el conjunto de datos, se ha completado una época.

Iteración

Una iteración describe el número de veces que un lote de datos pasó a través del algoritmo. En el caso de las redes neuronales, eso significa el pase hacia adelante y el pase hacia atrás . Entonces, cada vez que pasa un lote de datos a través del NN, completa una iteración .


Ejemplo

Un ejemplo podría hacerlo más claro.

Supongamos que tiene un conjunto de datos de 10 ejemplos (o muestras). Tiene un tamaño de lote de 2 y ha especificado que desea que el algoritmo se ejecute durante 3 épocas.

Por lo tanto, en cada época, tienes 5 lotes (10/2 = 5). Cada lote pasa a través del algoritmo, por lo tanto, tiene 5 iteraciones por época. Como ha especificado 3 épocas, tiene un total de 15 iteraciones (5 * 3 = 15) para el entrenamiento.

Muchos algoritmos de entrenamiento de redes neuronales implican realizar múltiples presentaciones de todo el conjunto de datos a la neural network. A menudo, una presentación única de todo el conjunto de datos se conoce como “época”. Por el contrario, algunos algoritmos presentan datos a la neural network un solo caso a la vez.

“Iteración” es un término mucho más general, pero como usted lo consultó junto con “época”, asumo que su fuente se refiere a la presentación de un solo caso a una neural network.

Una época contiene algunas iteraciones. Eso es en realidad lo que es esta ‘época’. Definamos ‘época’ como el número de iteraciones sobre el conjunto de datos para entrenar la neural network.

Normalmente, dividirá su conjunto de pruebas en pequeños lotes para que la red aprenda, y haga que el entrenamiento avance paso a paso a través de su número de capas, aplicando pendiente descendente hasta el final. Todos estos pequeños pasos se pueden llamar iteraciones .

Una época corresponde a todo el conjunto de entrenamiento que atraviesa toda la red una vez. Puede ser útil limitar esto, por ejemplo, para combatir el sobreajuste.

Tienes datos de entrenamiento que barajas y eliges mini lotes. Cuando ajusta sus pesos y sesgos con un mini lote, ha completado una iteración. Una vez que te quedas sin tus mini lotes, has completado una época. Luego, vuelve a barajar los datos de entrenamiento, vuelve a elegir los mini lotes e itera por todos nuevamente. Esa sería su segunda época.

Creo que la iteración es equivalente a un único lote hacia adelante + backprop en lote de SGD. La época pasa por todo el conjunto de datos una vez (como alguien más mencionó).

A mi entender, cuando se necesita entrenar a un NN, se necesita un gran conjunto de datos que involucre muchos elementos de datos. cuando NN se está entrenando, los elementos de datos van a NN uno por uno, eso se llama iteración; Cuando todo el conjunto de datos se procesa, se llama época.

época es una iteración del subconjunto de las muestras para el entrenamiento, por ejemplo, el algoritmo de descenso de gradiente en la red neutral. Una buena referencia es: http://neuralnetworksanddeeplearning.com/chap1.html

Tenga en cuenta que la página tiene un código para el algoritmo de descenso de gradiente que utiliza época

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) 

Mira el código. Para cada época, generamos aleatoriamente un subconjunto de las entradas para el algoritmo de descenso de gradiente. Por qué epoch es efectivo también se explica en la página. Por favor echa un vistazo.