¿Deben tomarse muestras de entrenamiento extraídas al azar para redes neuronales de entrenamiento de mini lotes sin reemplazo?


18

Definimos una época como haber pasado por la totalidad de todas las muestras de entrenamiento disponibles, y el tamaño del mini lote como el número de muestras sobre el que promediamos para encontrar las actualizaciones de pesos / sesgos necesarios para descender el gradiente.

Mi pregunta es si deberíamos dibujar sin reemplazo del conjunto de ejemplos de entrenamiento para generar cada mini lote dentro de una época. Creo que deberíamos evitar el reemplazo para asegurarnos de que realmente "extraemos todas las muestras" para cumplir con el requisito de fin de época, pero tengo problemas para encontrar una respuesta definitiva de una forma u otra.

He intentado buscar en Google y leer Ch. 1 de las redes neuronales y el aprendizaje profundo de Nielsen, pero no he encontrado una respuesta clara. En ese texto, Nielsen no especifica que el muestreo aleatorio se realice sin reemplazo, pero parece implicar que sí.

Puede encontrar una formalización más clara de la capacitación en épocas aquí si lo desea: /stats//a/141265/131630

Editar: esta pregunta me pareció similar, pero no estaba claro cómo aplicar el hecho de que la linealidad de la expectativa es indiferente a la independencia en esta situación: si el muestreo se realiza con o sin reemplazo


A menos que haya una razón específica de datos, el mini-lote para el entrenamiento de redes neuronales siempre se dibuja sin reemplazo. La idea es que desee estar en algún lugar entre el modo por lotes, que calcula el gradiente con todo el conjunto de datos y SGD, que utiliza solo uno al azar.
horaceT

SGD no está restringido a usar una muestra aleatoria. Ese proceso se llama capacitación en línea. "Una versión extrema del descenso por gradiente es usar un tamaño de mini lote de solo 1 ... Este procedimiento se conoce como aprendizaje en línea, en línea o incremental". Y también, "Una idea llamada descenso de gradiente estocástico puede usarse para acelerar el aprendizaje. La idea es estimar el gradiente ∇C calculando [it] para una pequeña muestra de entradas de entrenamiento elegidas al azar. Promediando esta pequeña muestra .. . podemos obtener rápidamente una buena estimación del gradiente verdadero ". Ambas citas de Nielsen Ch. 1.
bobo

Respuestas:


13

Aquí se puede encontrar un buen análisis teórico de esquemas de reemplazo con y sin reemplazo en el contexto de algoritmos iterativos basados ​​en sorteos aleatorios (que son la cantidad de redes neuronales profundas (DNN) discriminatorias)

En resumen, resulta que el muestreo sin reemplazo conduce a una convergencia más rápida que el muestreo con reemplazo.

Daré un breve análisis aquí basado en el ejemplo de juguete que proporcionan: Digamos que queremos optimizar la siguiente función objetivo:

xopt=argminx12i=1N(xyi)2

donde el objetivo . En este ejemplo, estamos tratando de resolver la x óptima , dadoyiN(μ,σ2)x etiquetas de y i obviamente.Nyi

Ok, si tuviéramos que resolver lo óptimo en lo anterior directamente, entonces tomaríamos la derivada de la función de pérdida aquí, la estableceríamos en 0 y resolveríamos por x . Entonces, para nuestro ejemplo anterior, la pérdida esxx

L=12i=1N(xyi)2

y su primera derivada sería:

δLδx=i=1N(xyi)

Ajuste a 0 y resolviendo parax, produce:δLδxx

xopt=1Ni=1Nyi

En otras palabras, la solución óptima no es más que la media muestral de todas las muestras de y .Ny

Ahora, si no pudiéramos realizar el cálculo anterior de una vez, tendríamos que hacerlo de manera recursiva, a través de la ecuación de actualización de descenso de gradiente a continuación:

xi=xi1λi(f(xi1))

y simplemente insertando nuestros términos aquí se obtiene:

xi=xi1λi(xi1yi)

Si corremos el anterior para todas las , entonces estamos realizando esta actualización sin reemplazo. La pregunta entonces es: ¿podemos obtener también el valor óptimo de x de esta manera? (Recuerde que el valor óptimo de x no es más que la media muestral de y ). La respuesta es sí, si dejas λ i = 1 / i . A ver, esto ampliamos:i1,2,...Nxxyλi=1/i

xi=xi1λi(xi1yi) xi=xi11i(xi1yi) xi=ixi1(xi1yi)i xi=(i1)xi1+yii ixi=(i1)xi1+yi 

¡Sin embargo, la última ecuación no es más que la fórmula para el promedio móvil! Por lo tanto, a medida que recorremos el conjunto desde , i = 2 , etc., hasta i = N , habríamos realizado nuestras actualizaciones sin reemplazo, y nuestra fórmula de actualización nos da la solución óptima de x , que es el ¡muestra promedio!i=1i=2i=Nx

NxN=(N1)xN1+yN==>xN=1Ni=1Nyi=μ

Sin embargo, en contraste, si realmente dibujáramos con reemplazo, entonces, aunque nuestros sorteos serían realmente independientes, el valor optimizado sería diferente de la media (óptima) μ , y el error cuadrado estaría dado por:Xnorteμ

mi{(Xnorte-μ)2}

lo que va a ser un valor positivo, y este simple ejemplo de juguete puede extenderse a dimensiones más altas. Esto tiene la consecuencia de que desearíamos realizar un muestreo sin reemplazo como una solución más óptima.

Espero que esto lo aclare un poco más!


Este ejemplo utiliza muchos supuestos, es decir, el uso del error al cuadrado y la convexidad del paisaje de pérdidas. ¿El resultado se cumple cuando esos supuestos no se cumplen?
bayerj

@bayerj Este ejemplo particular de juguete, sí. Sin embargo, el documento continúa extendiéndolo para otros casos teóricos adicionales. Creo que otras fuentes [Boutou creo] muestran un apoyo empírico para que el muestreo sin reemplazo sea superior.
Tarin Ziyaee

@TarinZiyaee Gracias por esta respuesta, ¿puedes aclarar λ_k = 1 / k? ¿De qué k estamos hablando aquí, la k de la ecuación anterior? No te seguí aquí, lo que dificultó el siguiente resumen y conclusión. Gracias.
bobo

1
@bobo Intentaré aclarar la publicación esta noche.
Tarin Ziyaee

1
@bobo Actualicé mi respuesta un montón. Eche un vistazo y avíseme si eso ayuda.
Tarin Ziyaee

5

De acuerdo con el código en el repositorio de Nielsen, los mini lotes se dibujan sin reemplazo:

    def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
    n = len(training_data)
    for j in range(epochs):
            random.shuffle(training_data)
            mini_batches = [
                training_data[k:k+mini_batch_size]
                for k in range(0, n, mini_batch_size)
            ]
            for mini_batch in mini_batches:
                self.update_mini_batch(mini_batch, eta)

Podemos ver que no hay reemplazo de muestras de entrenamiento dentro de una época. Curiosamente, también podemos ver que Nielsen elige no preocuparse por ajustareta (la tasa de aprendizaje) para el último tamaño de mini_batch, que puede no tener tantas muestras de entrenamiento como los mini-lotes anteriores. Presumiblemente, esta es una modificación avanzada que deja para capítulos posteriores. **

** EDITAR: en realidad, esta escala se produce en la def update_mini_batchfunción. Por ejemplo, con los pesos:

self.weights = [w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)]     

Esto es necesario porque el último mini_batch puede ser más pequeño que los mini_batches anteriores si el número de muestras de entrenamiento por mini_batch no se divide de manera uniforme en el número total de muestras de entrenamiento disponibles.

mylist = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
n = len(mylist)
mini_batch_size = 2
mini_batches = [
    mylist[k:k+mini_batch_size]
    for k in range(0, n, mini_batch_size)
    ]
for mini_batch in mini_batches:
    print(mini_batch)

Salida:

['1', '2']
['3', '4']
['5', '6']
['7', '8']
['9', '10']

Cambiando mini_batch_sizea 3, que no se divide de manera uniforme en nuestras 10 muestras de entrenamiento. Para la salida obtenemos:

['1', '2', '3']
['4', '5', '6']
['7', '8', '9']
['10']

Al evaluar un rango sobre índices de lista (algo de la forma [x:y]donde xyy hay algunos índices en la lista), si nuestro valor de la derecha excede la longitud de la lista, python simplemente devuelve los elementos de la lista hasta que el valor sale del rango del índice .

Por lo tanto, el último mini lote puede ser más pequeño que los mini lotes anteriores, pero si está ponderado por el mismo eta, esas muestras de entrenamiento contribuirán más al aprendizaje que las muestras en los otros mini lotes más grandes. Dado que este es solo el último mini lote, probablemente no valga la pena preocuparse demasiado, pero puede resolverse fácilmente escalando etaa la longitud del mini lote.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.