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
Respuestas:
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:
donde el objetivo . En este ejemplo, estamos tratando de resolver la x óptima , dadoyi∼N(μ,σ2) x etiquetas de y i obviamente.N yi
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 esx x
y su primera derivada sería:
Ajuste a 0 y resolviendo parax, produce:δLδx x
En otras palabras, la solución óptima no es más que la media muestral de todas las muestras de y .N y
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:
y simplemente insertando nuestros términos aquí se obtiene:
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:i∈1,2,...N x x y λi=1/i
¡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=1 i=2 i=N x
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 μ
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!
fuente
De acuerdo con el código en el repositorio de Nielsen, los mini lotes se dibujan sin reemplazo:
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 ajustar
eta
(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_batch
función. Por ejemplo, con los pesos: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.
Salida:
Cambiando
mini_batch_size
a3
, que no se divide de manera uniforme en nuestras 10 muestras de entrenamiento. Para la salida obtenemos:Al evaluar un rango sobre índices de lista (algo de la forma
[x:y]
dondex
yy
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 escalandoeta
a la longitud del mini lote.fuente