machine-learning - recurrente - redes neuronales combativas
Época vs Iteración al entrenar redes neuronales. (9)
época es una iteración del subconjunto de las muestras para entrenamiento, por ejemplo, el algoritmo de descenso de gradiente en una 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 la é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é la época es efectiva también se explica en la página. Por favor echa un vistazo.
¿Cuál es la diferencia entre la época y la iteración cuando se entrena un perceptrón multicapa?
A mi entender, cuando necesita entrenar a una NN, necesita un gran conjunto de datos con muchos elementos de datos. cuando se entrena a NN, los elementos de datos van a NN uno por uno, lo que se denomina iteración; Cuando todo el conjunto de datos pasa, se le llama época.
Creo que la iteración es equivalente a un solo batch forward + backprop en batch SGD. La época está revisando todo el conjunto de datos una vez (como mencionó otra persona).
En la terminología de la red neuronal:
- Una época = una pasada hacia adelante y una pasada hacia atrás de todos los ejemplos de entrenamiento
- tamaño de lote = el número de ejemplos de entrenamiento en un pase de avance / retroceso. Cuanto mayor sea el tamaño del lote, más espacio de memoria necesitará.
- número de iteraciones = número de pases, cada paso utilizando el número de ejemplos [tamaño de lote]. Para ser claros, una pasada = una pasada hacia adelante + una pasada hacia atrás (no contamos la pasada hacia adelante y la pasada hacia atrás como dos pasadas diferentes).
Ejemplo: si tiene 1000 ejemplos de entrenamiento, y su tamaño de lote es 500, entonces se necesitarán 2 iteraciones para completar 1 época.
FYI: Compensar el tamaño del lote frente al número de iteraciones para entrenar una red neuronal
El término "lote" es ambiguo: algunas personas lo usan para designar todo el conjunto de entrenamiento, y algunas personas lo usan para referirse al número de ejemplos de entrenamiento en un pase de avance / retroceso (como lo hice en esta respuesta). Para evitar esa ambigüedad y dejar en claro que el lote corresponde al número de ejemplos de entrenamiento en un pase de avance / retroceso, se puede usar el término mini-lote .
Muchos algoritmos de entrenamiento de redes neuronales implican hacer presentaciones múltiples de todo el conjunto de datos a la red neuronal. A menudo, una presentación única de todo el conjunto de datos se denomina "época". En contraste, algunos algoritmos presentan datos a la red neuronal de un solo caso a la vez.
"Iteración" es un término mucho más general, pero dado que lo consultó junto con "época", asumo que su fuente se refiere a la presentación de un solo caso a una red neuronal.
Por lo general, dividirá su conjunto de pruebas en pequeños lotes para que la red aprenda, y hará que la capacitación vaya paso a paso a través de su número de capas, aplicando el descenso de gradiente hasta el final. Todos estos pequeños pasos pueden llamarse iteraciones .
Una época corresponde a todo el conjunto de entrenamiento que pasa por toda la red una vez. Puede ser útil limitar esto, por ejemplo, para combatir el sobreajuste.
Tienes una información de entrenamiento que barajas y recoges mini lotes de ella. Cuando ajusta sus pesos y sesgos utilizando un mini lote, ha completado una iteración. Una vez que te quedas sin tus mini lotes, has completado una época. Luego barajas de nuevo tus datos de entrenamiento, vuelves a elegir tus mini lotes y los repites de nuevo. Esa sería tu segunda época.
Una época contiene algunas iteraciones. Eso es en realidad lo que es esta "época". Definamos ''epoch'' como el número de iteraciones sobre el conjunto de datos para entrenar la red neuronal.
Época e iteración describen diferentes cosas.
É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 la cantidad de veces que un lote de datos pasa a través del algoritmo. En el caso de las redes neuronales, eso significa el paso hacia adelante y el paso hacia atrás . Por lo tanto, cada vez que pasa un lote de datos a través de la NN, completa una iteración .
Ejemplo
Un ejemplo podría aclararlo.
Digamos que tienes 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 se 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.