En las tareas de aprendizaje automático, es común mezclar datos y normalizarlos. El propósito de la normalización es claro (por tener el mismo rango de valores de características). Pero, después de luchar mucho, no encontré ninguna razón valiosa para mezclar datos.
He leído esta publicación aquí discutiendo cuándo necesitamos barajar datos, pero no es obvio por qué deberíamos barajarlos. Además, he visto con frecuencia en algoritmos como Adam o SGD donde necesitamos el descenso del gradiente de lote (los datos deben separarse en mini lotes y se debe especificar el tamaño del lote). De acuerdo con esta publicación, es vital mezclar datos para cada época para tener datos diferentes para cada lote. Entonces, quizás los datos se barajan y, lo que es más importante, se modifican.
¿Por qué hacemos esto?
fuente
Respuestas:
Basado en ¿Qué debemos hacer cuando una pregunta publicada en DataScience es un duplicado de una pregunta publicada en CrossValidated? , Vuelvo a publicar mi respuesta a la misma pregunta que se hizo en CrossValidated ( https://stats.stackexchange.com/a/311318/89653 ).
Nota: a lo largo de esta respuesta me refiero a la minimización de la pérdida de entrenamiento y no discuto los criterios de detención como la pérdida de validación. La elección de los criterios de detención no afecta el proceso / conceptos que se describen a continuación.
El proceso de entrenamiento de una red neuronal es encontrar el valor mínimo de una función de pérdida , donde representa una matriz (o varias matrices) de pesos entre las neuronas y representa el conjunto de datos de entrenamiento. Utilizo un subíndice para para indicar que nuestra minimización de ocurre solo sobre los pesos (es decir, estamos buscando modo que se minimice) mientras está fijo.WXX ℒ WW ℒ XLX(W) W X X L W W L X
Ahora, si suponemos que tenemos elementos en (es decir, hay pesos en la red), es una superficie en un espacio dimensional . Para dar un análogo visual, imagine que tenemos solo dos pesos de neuronas ( ). Entonces tiene una interpretación geométrica fácil: es una superficie en un espacio tridimensional. Esto surge del hecho de que para cualquier matriz dada de pesos , la función de pérdida se puede evaluar en y ese valor se convierte en la elevación de la superficie.W P ℒ P + 1 P = 2 ℒ W XP W P L P+1 P=2 L W X
Pero existe el problema de la no convexidad; la superficie que describí tendrá numerosos mínimos locales y, por lo tanto, los algoritmos de descenso de gradiente son susceptibles de quedar "atascados" en esos mínimos, mientras que una solución más profunda / más baja / mejor puede estar cerca. Es probable que esto ocurra si no cambia en todas las iteraciones de entrenamiento, porque la superficie está fija para una dada ; Todas sus características son estáticas, incluidos sus diversos mínimos.XX X
Una solución a esto es el entrenamiento de mini lotes combinado con barajar. Al barajar las filas y entrenar solo en un subconjunto de ellas durante una iteración dada, cambia con cada iteración, y en realidad es bastante posible que no se realicen dos iteraciones sobre la secuencia completa de iteraciones y épocas de entrenamiento exactamente en la misma . El efecto es que el solucionador puede "rebotar" fácilmente desde un mínimo local. Imagine que el solucionador está atascado en un mínimo local en la iteración con el mini-lote de entrenamiento . Este mínimo local corresponde a evaluado a un valor particular de pesos; lo llamaremosX i X i ℒ ℒ X i ( W i ) X i + 1 ℒ X i + 1 ( W i ) ℒ X i ( W i ) ℒ X i + 1 ℒ X i ℒ X W WX X i Xi L LXi(Wi) . En la próxima iteración, la forma de nuestra superficie de pérdida cambia realmente porque estamos usando , es decir, puede tomar un valor muy diferente de y es muy posible que no corresponda a un mínimo local. Ahora podemos calcular una actualización de gradiente y continuar con el entrenamiento. Para ser claros: la forma de será, en general, diferente de la de . Tenga en cuenta que aquí me refiero a la función de pérdida evaluada en un conjunto de entrenamiento ; Es una superficie completa definida sobre todos los valores posibles deXi+1 LXi+1(Wi) LXi(Wi) LXi+1 LXi L X W , En lugar de la evaluación de que la pérdida (que es sólo un escalar) para un valor específico de . Tenga en cuenta también que si se usan mini lotes sin barajar, todavía hay un grado de "diversificación" de las superficies de pérdida, pero habrá un número finito (y relativamente pequeño) de superficies de error únicas vistas por el solucionador (específicamente, verá el mismo conjunto exacto de mini lotes (y, por lo tanto, superficies de pérdida) durante cada época).W
Una cosa que evité deliberadamente fue una discusión sobre los tamaños de mini lotes, porque hay un millón de opiniones sobre esto y tiene implicaciones prácticas significativas (se puede lograr una mayor paralelización con lotes más grandes). Sin embargo, creo que vale la pena mencionar lo siguiente. Debido a que se evalúa calculando un valor para cada fila de (y sumando o tomando el promedio; es decir, un operador conmutativo) para un conjunto dado de matrices de peso , la disposición de las filas de no tiene efecto cuando se usa full- Descenso de gradiente por lotes (es decir, cuando cada lote es la completa , y las iteraciones y las épocas son lo mismo). X W X XL X W X X
fuente
Mezclar datos sirve para reducir la varianza y garantizar que los modelos sigan siendo generales y se sobreajusten menos.
El caso obvio en el que barajaría sus datos es si sus datos están ordenados por su clase / destino. Aquí, tendrá que barajar para asegurarse de que sus conjuntos de entrenamiento / prueba / validación sean representativos de la distribución general de los datos.
Para el descenso de gradiente por lotes, se aplica la misma lógica. La idea detrás del descenso del gradiente de lote es que al calcular el gradiente en un solo lote, generalmente obtendrá una estimación bastante buena del gradiente "verdadero". De esa manera, ahorra tiempo de cálculo al no tener que calcular el gradiente "verdadero" en todo el conjunto de datos cada vez.
Desea barajar sus datos después de cada época porque siempre tendrá el riesgo de crear lotes que no sean representativos del conjunto de datos general y, por lo tanto, su estimación del gradiente estará desactivada. Mezclar sus datos después de cada época asegura que no se quedará "atascado" con demasiados lotes malos.
En el descenso de gradiente estocástico regular, cuando cada lote tiene un tamaño 1, aún desea mezclar sus datos después de cada época para mantener su aprendizaje en general. De hecho, si el punto de datos 17 siempre se usa después del punto de datos 16, su propio gradiente estará sesgado con las actualizaciones que el punto de datos 16 esté realizando en el modelo. Al barajar sus datos, se asegura de que cada punto de datos cree un cambio "independiente" en el modelo, sin estar sesgado por los mismos puntos anteriores.
fuente
Supongamos que los datos se ordenan en un orden específico. Por ejemplo, un conjunto de datos que se ordena en base a su clase. Por lo tanto, si selecciona datos para capacitación, validación y prueba sin considerar este tema, seleccionará cada clase para diferentes tareas y fallará el proceso.
Por lo tanto, para impedir este tipo de problemas, una solución simple es mezclar los datos para obtener diferentes conjuntos de datos de capacitación, validación y prueba.
Sobre el mini lote, las respuestas a esta publicación pueden ser una solución a su pregunta.
fuente
Necesitamos barajar solo para minibatch / SGD, no es necesario el descenso de gradiente por lotes.
Si no se barajan los datos, los datos se pueden ordenar o puntos de datos similares se ubicarán uno al lado del otro, lo que conduce a una convergencia lenta:
Dibujé el gráfico de la función de pérdida L-2 para la regresión lineal para
y=2x
aquífuente
Complementando la respuesta de @ Josh, me gustaría agregar que, por la misma razón, se debe barajar antes de mezclar. De lo contrario, obtendrá el mismo número finito de superficies.
fuente
Para una mejor precisión del modelo, siempre se recomienda que los datos de entrenamiento tengan todos los tipos de datos.
La combinación de datos de entrenamiento nos ayuda a lograr este objetivo.
fuente
Al mezclar las filas y entrenar solo en un subconjunto de ellas durante una iteración dada, 𝑋 cambia con cada iteración, y en realidad es bastante posible que no se realicen dos iteraciones sobre toda la secuencia de iteraciones y épocas de entrenamiento exactamente en la misma 𝑋
fuente