Época vs iteración al entrenar redes neuronales

Respuestas:

574

En la terminología de la red neuronal:

  • una época = un pase hacia adelante y un pase hacia atrás de todos los ejemplos de entrenamiento
  • tamaño de lote = el número de ejemplos de entrenamiento en un pase hacia adelante / hacia 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 [tamaño de lote] número de ejemplos. Para ser claros, un pase = un pase hacia adelante + un pase hacia atrás (no contamos el pase hacia adelante y hacia atrás como dos pases diferentes).

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

FYI: intercambio de tamaño de lote frente a 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 hacia adelante / hacia atrás (como 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 hacia adelante / hacia atrás, se puede usar el término mini-lote .

Franck Dernoncourt
fuente
37
Estoy confundido. ¿Por qué entrenarías para más de una época, en todos los datos más de una vez? ¿Eso no llevaría a un sobreajuste?
Soubriquet
29
@Soubriquet Las redes neuronales generalmente se entrenan utilizando un método de optimización iterativo (la mayoría de las veces, descenso de gradiente), que a menudo necesita realizar varios pases en el conjunto de entrenamiento para obtener buenos resultados.
Franck Dernoncourt
66
Pero si hay muchas muestras de entrenamiento, digamos $ 1 $ millón, ¿sería suficiente una sola época? ¿Qué suelen hacer las personas si el conjunto de entrenamiento es muy grande? ¿Solo divide el conjunto de entrenamiento en lotes y solo realiza una época?
pikachuchameleon
55
@pikachuchameleon Esto depende de la complejidad de la tarea: una época puede ser suficiente en algunos casos.
Franck Dernoncourt el
99
@MaxPower: normalmente, el paso se toma después de cada iteración , como implicaba la respuesta de Franck Dernoncourt; eso es lo que hacemos con la información del pase hacia atrás. En un descenso de gradiente de mini lotes con m iteraciones por época, actualizamos los parámetros m veces por época.
dan mackinlay
142

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 completa una época.

Iteración

Una iteración describe la cantidad de veces que un lote de datos pasó a través del algoritmo. En el caso de las redes neuronales, eso significa el pase directo hacia y 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 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.

Khon
fuente
15
¿Puede explicar si los pesos se actualizan después de cada época o después de cada iteración?
Heredado Geek
77
@InheritedGeek los pesos se actualizan después de cada lote, no época o iteración.
thisisbhavin
2
@bhavindhedhi 1 lote = 1 iteración, ¿no?
Abeja
2
@Bee No, tome por ejemplo 10000 muestras de entrenamiento y 1000 muestras por lote, luego se necesitarán 10 iteraciones para completar 1 época.
thisisbhavin
44
@bhavindhedhi Creo que lo que Bee preguntaba es que en su ejemplo de 10000 muestras totales con 1000 por lote, efectivamente tiene 10 lotes totales, lo que equivale a 10 iteraciones. Creo que tiene sentido, pero no estoy seguro si esa es una forma adecuada de interpretarlo.
Michael Du
24

Muchos algoritmos de entrenamiento de redes neuronales implican hacer múltiples presentaciones de todo el conjunto de datos a la red neuronal. A menudo, una sola presentación de todo el conjunto de datos se conoce como "época". Por el contrario, 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 preguntaste junto con "época", supongo que tu fuente se refiere a la presentación de un solo caso a una red neuronal.

Vaticinador
fuente
3
genial, ¿puedes referirte a una publicación donde se detalla esto?
Alex
17

Para comprender la diferencia entre estos debe comprender el Algoritmo de Descenso de Gradiente y sus Variantes .

Antes de comenzar con la respuesta real, me gustaría construir algunos antecedentes.

Un lote es el conjunto de datos completo. Su tamaño es el número total de ejemplos de entrenamiento en el conjunto de datos disponible.

El tamaño de mini lote es el número de ejemplos que procesa el algoritmo de aprendizaje en una sola pasada (hacia adelante y hacia atrás).

Un mini lote es una pequeña parte del conjunto de datos de un tamaño de mini lote dado .

Las iteraciones son la cantidad de lotes de datos que el algoritmo ha visto (o simplemente la cantidad de pases que el algoritmo ha realizado en el conjunto de datos).

Epochs es la cantidad de veces que un algoritmo de aprendizaje ve el conjunto de datos completo. Ahora, esto puede no ser igual al número de iteraciones , ya que el conjunto de datos también se puede procesar en mini lotes, en esencia, una sola pasada puede procesar solo una parte del conjunto de datos. En tales casos, el número de iteraciones no es igual al número de épocas. .

En el caso del descenso de gradiente de lote, el lote completo se procesa en cada pase de entrenamiento. Por lo tanto, el optimizador de descenso de gradiente da como resultado una convergencia más suave que el descenso de gradiente Mini-lote, pero lleva más tiempo. El descenso del gradiente de lote está garantizado para encontrar un óptimo si existe.

El descenso de gradiente estocástico es un caso especial de descenso de gradiente de mini lotes en el que el tamaño del mini lote es 1 .

Descenso de gradiente por lotes vs Descenso de gradiente de mini lotes

Comparación de descensos de gradiente por lotes, estocásticos y mini lotes.

nikhilbalwani
fuente
12

Tienes una información de entrenamiento que barajas y seleccionas 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 nuevamente tus datos de entrenamiento, vuelves a elegir tus mini lotes y los repites de nuevo. Esa sería tu segunda época.

Milad P.
fuente
¿Podría estar relacionado con la validación cruzada?
sk
8

Por lo general, 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 el descenso de gradiente hasta el final. Todos estos pequeños pasos pueden llamarse iteraciones .

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

Nikana Reklawyks
fuente
7

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 red neuronal.

Elijah Saounkine
fuente
44
Época no es un número ... creo que esto podría ser reformulado.
Nikana Reklawyks
Votaron en contra porque esto está mal: una época es el número de episodios o lotes de tal manera que el modelo ha visto todos los datos de entrenamiento una vez.
JohnAllen
7

Según tengo entendido, cuando necesita entrenar un NN, necesita un gran conjunto de datos que involucra muchos elementos de datos. cuando NN está siendo entrenado, los elementos de datos van a NN uno por uno, eso se llama iteración; Cuando todo el conjunto de datos pasa, se llama una época.

36Kr
fuente
6

Creo que la iteración es equivalente a un solo lote hacia adelante + backprop en el lote SGD. Epoch está revisando todo el conjunto de datos una vez (como alguien más mencionó).

Andrei Pokrovsky
fuente
5

Supongo que en el contexto de la terminología de la red neuronal:

  • Época: cuando su red termina revisando todo el conjunto de entrenamiento (es decir, una vez para cada instancia de entrenamiento), completa una época .

Para definir la iteración (también conocida como pasos ), primero debe saber sobre el tamaño del lote :

  • Tamaño de lote: probablemente no le gustaría procesar todas las instancias de entrenamiento en un solo paso hacia adelante, ya que es ineficiente y necesita una gran cantidad de memoria. Entonces, lo que comúnmente se hace es dividir las instancias de entrenamiento en subconjuntos (es decir, lotes), realizar una pasada sobre el subconjunto seleccionado (es decir, lote) y luego optimizar la red a través de la retropropagación. El número de instancias de entrenamiento dentro de un subconjunto (es decir, lote) se llama lote_tamaño .

  • Iteración: (también conocido como pasos de entrenamiento) Usted sabe que su red tiene que revisar todas las instancias de entrenamiento en un solo paso para completar una época. ¡Pero espera! cuando está dividiendo sus instancias de entrenamiento en lotes, eso significa que solo puede procesar un lote (un subconjunto de instancias de entrenamiento) en un solo paso hacia adelante, entonces, ¿qué pasa con los otros lotes? Aquí es donde entra en juego el término iteración :

    • Definición: El número de pases hacia adelante (El número de lotes que ha creado) que su red tiene que hacer para completar una época (es decir, revisar todas las instancias de entrenamiento) se llama iteración .

Por ejemplo, cuando tiene 1000 instancias de entrenamiento y desea hacer lotes con un tamaño de 10; tienes que hacer 10000/10 = 1000 iteraciones para completar una época.

¡Espero que esto pueda responder a tu pregunta!

índice_invertido
fuente
3

epoch 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 usa 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)

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.

Hola Mundo
fuente
1

época

Un pase de entrenamiento completo sobre todo el conjunto de datos de manera que cada ejemplo se haya visto una vez. Por lo tanto, una época representa N / iteraciones de entrenamiento de tamaño de lote , donde N es el número total de ejemplos.

iteración

Una única actualización de los pesos de un modelo durante el entrenamiento. Una iteración consiste en calcular los gradientes de los parámetros con respecto a la pérdida en un solo lote de datos.

como bonificación:

lote

El conjunto de ejemplos utilizados en una iteración (es decir, una actualización de gradiente ) del entrenamiento del modelo .

Ver también el tamaño del lote .

fuente: https://developers.google.com/machine-learning/glossary/

Mathieu Gemard
fuente
0

1.Epoch es 1 ciclo completo donde la red neuronal ha visto todos los datos.
2. Uno podría decir 100,000 imágenes para entrenar el modelo, sin embargo, el espacio en la memoria podría no ser suficiente para procesar todas las imágenes a la vez, por lo tanto, dividimos el entrenamiento del modelo en fragmentos más pequeños de datos llamados lotes. por ejemplo, el tamaño del lote es 100.
3. Necesitamos cubrir todas las imágenes usando múltiples lotes. Por lo tanto, necesitaremos 1000 iteraciones para cubrir todas las 100,000 imágenes. (100 lotes de tamaño * 1000 iteraciones)
4. Una vez que la Red neuronal mira los datos completos, se llama 1 Época (Punto 1). Uno podría necesitar varias épocas para entrenar al modelo. (Digamos 10 épocas).

rishi jain
fuente