¿Cuántos datos son suficientes para entrenar un modelo NN profundo?

Ah! La vieja pregunta! 🙂

La respuesta cruda es siempre: más de lo que tienes. 🙂

No describe su problema lo suficiente como para que yo le dé más que algunas sugerencias genéricas. Veo que está creando un codificador automático (si entendí correctamente es i: 240, h: 128, o: 240) pero no proporciona otros detalles importantes, como el tipo de entradas (específicamente, el rango de datos y si el los datos se han normalizado o cómo) y tampoco mencionan las no linealidades en h y o. Me arriesgaré a adivinar que las entradas son imágenes (con píxeles normalizados al rango 0..1) y las no linealidades son funciones logísticas. Tampoco mencionas si tu autoencoder usa pesos atados o no. Asumamos que sí.

Probemos un argumento entrópico. Según los supuestos anteriores, tiene 240 (píxeles) * 8 (bits por píxel) * 2000 (puntos de datos) = 3840000 bits máximos de entropía en sus datos. (En la vida real, la cantidad de entropía presente es menor; para obtener la entropía máxima, todos sus puntos de datos deben ser aleatorios y no correlacionados. Puedo suponer con seguridad que no lo son).

Para que los puntos de datos se reconstruyan perfectamente, esa misma cantidad de entropía debe terminar siendo representada como negentropía (es decir, orden) en los parámetros del modelo; si entropía> negentropía, la diferencia es el error de reproducción. Usted mencionó los pesos 30720, pero olvidó mencionar los sesgos de 128 h y los sesgos de 240 o: representan solo el 1.2% del total, pero de todos modos están ahí y deben ser entrenados. Entonces, tenemos 31088 parámetros para entrenar con 3840000 bits de información: ingenuamente podemos decir que tenemos disponibles alrededor de 124 bits de información por parámetro. Parece mucho, pero no lo es: solo son 0.06 bits por muestra de entrenamiento. Y eso es asumiendo que sus datos tienen la máxima entropía, lo cual no es así (para eso sus datos tienen que ser aleatorios y cada muestra no está correlacionada por completo con las demás, las suyas no lo son, ¿verdad?).

Por lo tanto, puedo concluir que no hay suficientes datos en bruto para entrenar a su autoencoder y que los resultados que está viendo se deben al subentrenamiento. Pero no te desesperes todavía.

La primera observación es que usted menciona la regularización de L2 en los pesos. El propósito de esto es hacer que la matriz de peso (la mayor parte de los parámetros) sea lo más escasa posible, es decir, tener algunos pesos grandes y muchos pesos pequeños. O, en otras palabras, concentrar la entropía disponible en menos pesos “pesados” y “desperdicio” lo menos posible en los pesos de “papas pequeñas”. Eso ayuda mucho, cuando se hace correctamente. Pero con el propósito de esparcir los pesos, L1 es sustancialmente mejor, particularmente con colectores de dimensiones superiores (y su h: 128 es lo suficientemente dimensional). La razón de esto es porque (en palabras simples) L1 es “más afilado” que L2 (que es “más redondo”). Y siendo “más nervioso”, L1 desplaza sus efectos hacia los ejes y lejos de la masa (L2 es más “igualdad de oportunidades”; la distancia es la distancia es la distancia, sin importar en qué dirección). Al usar la regularización L1 en los pesos, obtienes menos pesos pequeños y más pesos esencialmente cero. Esa es una mejor relación entropía / peso.

Mi segunda observación es que también puede ayudar a su red a generalizar utilizando el truco autoencoder de eliminación de ruido: entrena no solo con sus datos (es decir, con su mapeo input-> AE-> output == input) sino con un “daño” levemente “dañado” datos donde va (entrada + ruido) -> AE-> salida == entrada. (El daño típico para las imágenes es arrojar una pequeña cantidad de píxeles aleatorios a 0.) Como ya está “hambriento de entropía”, no dañe todos los datos (como suele hacerse), pero asegúrese de entrenar siempre con su datos originales no dañados más los datos dañados que desee.

La regularización de L1 y el truco de eliminación de ruido ayudan a obtener pesos dispersos, pero aprender a eliminar datos ayuda a L1 a “enfocarse” en lo que es importante.

Pruebe estas técnicas y vea cómo va. Y si todo lo demás falla: ¡ obtenga más datos!