70 votos

¿Qué debo hacer cuando mi red neuronal no generaliza bien?

Estoy entrenando una red neuronal y la pérdida de entrenamiento disminuye, pero la pérdida de validación no lo hace, o disminuye mucho menos de lo que esperaría, basándome en referencias o experimentos con arquitecturas y datos muy similares. ¿Cómo puedo solucionar esto?


En cuanto a la pregunta

¿Qué debo hacer cuando mi red neuronal no aprende?

en la que se inspira esta pregunta, se deja intencionadamente la pregunta en general para que otras preguntas sobre cómo reducir el error de generalización de una red neuronal hasta un nivel que se ha demostrado que es alcanzable pueden cerrarse como duplicados de éste.

Véase también el hilo dedicado a Meta:

¿Existe una pregunta genérica a la que podamos redirigir preguntas del tipo "por qué mi red neuronal no generaliza bien"?

4 votos

Si piensas publicar tu propia respuesta completa, tal vez hubiera sido una buena idea publicar la pregunta y la respuesta simultáneamente (la interfaz de usuario lo permite). De lo contrario, estás animando a otras personas a escribir respuestas y podríamos terminar con varias respuestas que se duplican parcialmente entre sí... En cualquier caso, espero tu respuesta.

1 votos

@amoeba ah, no lo sabía: la interfaz de usuario abre una ventana emergente cuando intento responder a la pregunta, así que pensé que las preguntas y respuestas no podían publicarse juntas....Bueno, si alguien escribe una respuesta mejor/más completa que la que yo iba a escribir, evitaré añadir un duplicado.

0 votos

Las respuestas hacen sugerencias buenas y relevantes, pero todas ellas parecen omitir la posibilidad de que el cargador de datos, la red o el bucle de entrenamiento contengan errores. Siempre que obtengo resultados inesperados del código informático, incluido un modelo que no hace buenas predicciones (¡o que hace predicciones realmente extraordinarias!), empiezo por verificar que cada paso del código funciona exactamente como se pretende. Si el modelo no generaliza bien debido a un error de programación, las sugerencias de las respuestas no lo detectarán ni lo arreglarán.

86voto

Djib2011 Puntos 693

En primer lugar, mencionemos lo que hace "mi red neuronal no generaliza bien" y cuál es la diferencia con decir "mi red neuronal no funciona bien" .

Cuando se entrena una red neuronal, se evalúa constantemente sobre un conjunto de datos etiquetados llamado conjunto de entrenamiento . Si su modelo no funciona correctamente y no parece aprender del conjunto de entrenamiento, usted no todavía tienen un problema de generalización, en su lugar, por favor refiérase a este puesto . Sin embargo, si su modelo consigue un rendimiento satisfactorio en el conjunto de entrenamiento, pero no puede rendir bien en datos no vistos previamente (por ejemplo, conjuntos de validación/prueba), entonces hacer tienen un problema de generalización.

¿Por qué su modelo no se generaliza correctamente?

Lo más importante es comprender por qué su red no se generaliza bien. Los modelos de aprendizaje automático de alta capacidad tienen la capacidad de memorizar el conjunto de entrenamiento, lo que puede llevar a sobreajuste .

La sobreadaptación es el estado en el que un estimador ha empezado a aprender el conjunto de entrenamiento tan bien que ha empezado a modelar el ruido en las muestras de entrenamiento (además de todas las relaciones útiles).

Por ejemplo, en la imagen de abajo podemos ver cómo la línea azul se ha sobreajustado claramente.

Pero, ¿por qué es malo?

Al intentar evaluar nuestro modelo en nuevas no se ve datos (es decir, el conjunto de validación/prueba), el rendimiento del modelo será mucho peor de lo que esperamos.

¿Cómo evitar el sobreajuste?

Al principio del post insinué que la complejidad de tu modelo es lo que realmente está causando el sobreajuste, ya que está permitiendo que el modelo extraiga relaciones innecesarias del conjunto de entrenamiento, que mapean su ruido inherente. La forma más fácil de reducir el sobreajuste es esencialmente limitar la capacidad de su modelo. Estas técnicas se denominan regularización técnicas.

  • Penalizaciones de la norma de los parámetros . Estos añaden un término adicional a la función de actualización de pesos de cada modelo, que depende de la norma de los parámetros. El propósito de este término es contador la actualización real (es decir, limitar cuánto puede actualizarse cada peso). Esto hace que los modelos sean más resistentes a los valores atípicos y al ruido. Ejemplos de estas regularizaciones son L1 y L2 regularizaciones, que se pueden encontrar en el Lazo , Cresta y Red elástica regresores.
    Dado que cada capa (totalmente conectada) de una red neuronal funciona de forma muy parecida a una simple regresión lineal, éstas se utilizan en las redes neuronales. El uso más común es regularizar cada capa individualmente.
    implementación de keras .

  • Parada anticipada . Esta técnica intenta detener la fase de entrenamiento de un estimador antes de tiempo, en el punto en el que ha aprendido a extraer todas las relaciones significativas de los datos, antes de empezar a modelar su ruido. Esto se hace mediante control de el pérdida de validación (o una métrica de validación de su elección) y terminando la fase de entrenamiento cuando esta métrica deja de mejorar . De este modo, damos al estimador el tiempo suficiente para aprender la información útil, pero no el suficiente para aprender del ruido.
    implementación de keras .

  • Red neuronal específica regularizaciones. Algunos ejemplos son:
    • Abandono de los estudios . Abandono de los estudios es una técnica interesante que funciona sorprendentemente bien. El abandono se aplica entre dos capas sucesivas de una red. En cada iteración, un porcentaje determinado de las conexiones (seleccionadas al azar) que conectan las dos capas se se ha caído . Esto hace que la capa posterior se apoye en todo de sus conexiones con la capa anterior.
      implementación de keras
    • Aprendizaje por transferencia . Esto se utiliza especialmente en el aprendizaje profundo. Esto se hace inicializando los pesos de tu red a los de otra red con la misma arquitectura preformado en un gran conjunto de datos genéricos.
    • Otras cosas que pueden limitar el sobreajuste en las redes neuronales profundas son: Normalización por lotes que puede actuar como regulador y en algunos casos (por ejemplo, en los módulos de inicio) funciona tan bien como el abandono; relativamente lotes de pequeño tamaño en el SGD, que también puede evitar el sobreajuste; añadir un pequeño ruido aleatorio a los pesos en capas ocultas.

Otra forma de evitar el sobreajuste, además de limitar la capacidad del modelo, es mejorar la calidad de los datos. La opción más obvia sería valores atípicos/ruido eliminación, pero en la práctica su utilidad es limitada. Una forma más común (especialmente en tareas relacionadas con la imagen) es aumento de datos . Aquí intentamos transformar aleatoriamente los ejemplos de entrenamiento para que, aunque al modelo le parezcan diferentes, transmitan la misma información semántica (por ejemplo, el giro izquierda-derecha en las imágenes).
Resumen del aumento de datos

Sugerencias prácticas:

  • La técnica de regularización más eficaz, con diferencia, es abandono , lo que significa que debe ser la primera que se utilice. Sin embargo, no es necesario (y probablemente no debería) colocar el dropout en todas partes. Las capas más propensas al sobreajuste son las capas totalmente conectadas (FC), porque son las que contienen más parámetros. El dropout debería aplicarse a estas capas (afectando a sus conexiones con la siguiente capa).
  • Normalización por lotes Además de tener un efecto de regularización, ayuda a su modelo de otras maneras (por ejemplo, acelera la convergencia, permite el uso de tasas de aprendizaje más altas). También debería utilizarse en las capas de FC.
  • Como se ha mencionado anteriormente, también puede ser beneficioso detener el modelo antes de lo previsto en la fase de entrenamiento. El problema con parada anticipada es que no hay garantía de que, en un momento dado, el modelo no empiece a mejorar de nuevo. Un enfoque más práctico que la parada anticipada consiste en almacenar las ponderaciones del modelo que logran el mejor rendimiento en el conjunto de validación. Sin embargo, tenga cuidado, ya que esto no es una estimación insesgada del rendimiento de su modelo (sólo mejor que el conjunto de entrenamiento). Usted puede también se sobreajusta en el conjunto de validación. Más adelante se hablará de ello.
    implementación de keras
  • En algunas aplicaciones (por ejemplo, tareas relacionadas con la imagen), es muy recomendable seguir una arquitectura ya establecida (por ejemplo, VGG, ResNet, Inception), para la que se pueden encontrar pesos de ImageNet. La naturaleza genérica de este conjunto de datos permite que las características sean a su vez lo suficientemente genéricas como para ser utilizadas en cualquier tarea relacionada con la imagen. Además de ser robusto al sobreajuste, esto reducirá en gran medida el tiempo de entrenamiento.
    Otro uso del concepto similar es el siguiente: si tu tarea no tiene muchos datos, pero puedes encontrar otra tarea similar que sí los tenga, puedes usar aprendizaje por transferencia para reducir el sobreajuste. Primero entrene su red para la tarea que tiene el conjunto de datos más grande y luego intente afinar el modelo al que querías inicialmente. En la mayoría de los casos, el entrenamiento inicial hará que tu modelo sea más robusto frente al sobreajuste.
  • Aumento de datos . Si bien es cierto que siempre ayuda a disponer de un conjunto de datos más amplio, las técnicas de aumento de datos tienen sus deficiencias. Más concretamente, hay que tener cuidado de no aumentar demasiado fuerte ya que esto podría arruinar el contenido semántico de los datos. Por ejemplo, en el aumento de la imagen, si se traduce/desplaza/escala o se ajusta el brillo/contraste de la imagen demasiado, se perderá gran parte de la información que contiene. Además, los esquemas de aumento deben implementarse para cada tarea de forma ad hoc (por ejemplo, en el reconocimiento de dígitos escritos a mano, los dígitos suelen estar alineados y no deben girarse demasiado; tampoco deben voltearse en ninguna dirección, ya que no son simétricos horizontal/verticalmente. Lo mismo ocurre con las imágenes médicas).
    En resumen, tenga cuidado de no producir no realista imágenes mediante el aumento de datos. Además, un aumento del tamaño del conjunto de datos requerirá un mayor tiempo de entrenamiento. Personalmente, empiezo a considerar la posibilidad de utilizar el aumento de datos cuando veo que mi modelo se acerca a $0$ pérdida en el conjunto de entrenamiento.

25voto

OmaL Puntos 106

Hay muchas pruebas empíricas de que las redes neuronales suficientemente profundas pueden memorizar etiquetas aleatorias en enormes conjuntos de datos (Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals, "Understanding deep learning requires rethinking generalization"). Por lo tanto, en principio, consiguiendo una NN lo suficientemente grande siempre podemos reducir la error de formación a valores extremadamente pequeños, limitados en la práctica por la precisión numérica, sin importar el sentido de la tarea.

Las cosas son muy diferentes para los error de generalización . No podemos estar seguros de que para cada problema de aprendizaje exista un modelo de NN aprendible que pueda producir un error de generalización tan bajo como el deseado. Por ello, el primer paso es

1. Establezca correctamente sus expectativas

Encuentre una referencia fiable que le diga que existe una arquitectura que puede alcanzar el error de generalización que busca, en su conjunto de datos o en el más similar del que pueda encontrar referencias. Por ejemplo, busque aquí

¿Cuál es el estado actual de las redes neuronales convolucionales?

para encontrar el rendimiento SOTA (State Of The Art) actual (en el momento de las respuestas) de las CNN en varias tareas. Es una buena idea tratar de reproducir estos resultados en estos conjuntos de datos de referencia, antes de entrenar en su propio conjunto de datos, como una prueba de que toda su infraestructura está correctamente en su lugar.

2. Asegúrese de que su procedimiento de formación es impecable

Todos los controles descritos en las respuestas a la pregunta

¿Qué debo hacer cuando mi red neuronal no aprende?

para asegurarse de que su procedimiento de entrenamiento es correcto, son un requisito previo para reducir con éxito el error de generalización (si su NN no está aprendiendo, no puede aprender a generalizar). Estas comprobaciones incluyen, entre otras cosas

  • pruebas unitarias
  • Comprobación del conjunto de datos (ver unas cuantas muestras aleatorias de entrada/etiqueta para el conjunto de entrenamiento y el conjunto de prueba y comprobar que las etiquetas son correctas; comprobar la anchura y el tamaño de las imágenes de entrada; barajar las muestras en el conjunto de entrenamiento/prueba y ver si afecta a los resultados; etc.)
  • pruebas de aleatorización
  • estandarizar el preprocesamiento y las versiones de los paquetes
  • Llevar un cuaderno de bitácora de los experimentos numéricos

3. Intentar conseguir la superconvergencia

"Superconvergencia: Entrenamiento muy rápido de redes neuronales utilizando grandes tasas de aprendizaje" de Leslie N. Smith y Nicholay Topin muestra que, en algunos casos, la combinación de grandes tasas de aprendizaje con el método de la tasa de aprendizaje cíclica de Leslie N. Smith actúa como un regularizador, acelerando la convergencia en un orden de magnitud y reduciendo la necesidad de una amplia regularización. Por lo tanto, es bueno probarlo antes de

4. Ajuste de su regularización al MAXXX

La regularización suele aumentar el tiempo de entrenamiento (malo), aumenta el error de entrenamiento y reduce el error de generalización (bueno), pero un exceso de regularización puede aumentar ambos errores (underfitting). Por eso, y por el aumento del tiempo de entrenamiento, suele ser mejor introducir las distintas técnicas de regularización de una en una, después de has conseguido sobreajustar el conjunto de entrenamiento. Tenga en cuenta que la regularización por sí misma no implica necesariamente que su error de generalización se reduzca: el modelo debe tener una capacidad suficientemente grande para lograr buenas propiedades de generalización. Esto a menudo significa que se necesita una red suficientemente profunda, antes de poder ver los beneficios de la regularización.

Los métodos de regularización más antiguos son probablemente la parada temprana y el decaimiento del peso. Algunos de los otros:

  • reducir el tamaño de los lotes: los lotes más pequeños suelen estar asociados a un menor error de generalización, así que es algo que hay que probar. Sin embargo, hay que tener en cuenta que algunos discuten la utilidad de los minilotes: en mi experiencia, ayudan (siempre que no haya que usar tamaños locamente pequeños como $m=16$ ), pero Elad Hoffer, Itay Hubara, Daniel Soudry Entrenar más, generalizar mejor: cerrar la brecha de generalización en el entrenamiento de grandes lotes de redes neuronales no está de acuerdo. Nota que si se utiliza la norma de lotes (véase más adelante), los minilotes demasiado pequeños serán bastante perjudiciales.
  • utilizar SGD en lugar de optimizadores adaptativos: esto ya ha sido tratado por @shimao, por lo que sólo lo menciono en aras de la exhaustividad
  • utilizar dropout: si utiliza LSTMs, utilice el dropout estándar sólo para las unidades de entrada y salida de una capa LSTM. Para las unidades recurrentes (las compuertas) utilice el dropout recurrente, tal y como demostró por primera vez Yarin Gal en su tesis doctoral . Sin embargo, si se utilizan las CNN, el abandono se utiliza ahora con menos frecuencia. En su lugar, se tiende a
  • ...utilizar la normalización por lotes: las arquitecturas de CNN más recientes evitan el abandono en favor de la normalización por lotes. Esto podría ser sólo una moda, o podría deberse al hecho de que aparentemente el abandono y la normalización por lotes no se llevan bien (Xiang Li, Shuo Chen, Xiaolin Hu, Jian Yang, Comprender la desarmonía entre el abandono y la normalización por lotes mediante el desplazamiento de la varianza ). Dado que la normalización por lotes es más eficaz que el abandono cuando se tienen conjuntos de datos enormes, ésta podría ser una razón por la que el abandono ha caído en desgracia para las arquitecturas CNN. Si utilizas la normalización por lotes, comprueba que la distribución de pesos y sesgos para cada capa parece aproximadamente normal. Para las RNN, la implementación de la norma por lotes es complicada: la normalización de pesos (Tim Salimans, Diederik P. Kingma, Normalización del peso: Una sencilla reparametrización para acelerar el entrenamiento de las redes neuronales profundas ) es una alternativa viable.
  • utilizar el aumento de datos: también tiene un efecto regularizador.

5. Búsqueda de hiperparámetros/arquitectura

Si nada más ayuda, tendrá que probar múltiples ajustes de hiperparámetros diferentes (la optimización bayesiana puede ayudar aquí) o múltiples cambios de arquitectura diferentes (por ejemplo, tal vez en su arquitectura GAN y para el conjunto de datos en el que está trabajando, la norma de lotes sólo funciona en el generador, pero cuando se añade al discriminador también empeora las cosas). Asegúrese de llevar un registro de los resultados de estos largos y aburridos experimentos en un cuaderno de bitácora bien ordenado.

PS para un GAN no tiene mucho sentido hablar de un error de generalización: el ejemplo anterior sólo pretendía ser una indicación de que todavía hay un montón de alquimia en el Deep Learning, y cosas que esperarías que funcionaran bien, a veces no lo hacen, o viceversa algo que funcionó bien muchas veces, de repente se te caga con un nuevo conjunto de datos.

13voto

mclaughlinj Puntos 1099

Una lista de técnicas de regularización comúnmente utilizadas que he visto en la literatura son:

  1. Utilizar la normalización por lotes, que es un regularizador sorprendentemente eficaz hasta el punto de que ya casi no veo que se utilice el abandono, porque simplemente no es necesario.
  2. Un pequeño descenso de peso.
  3. Algunas técnicas de regularización más recientes son Batido ("Regularización Shake-Shake" de Xavier Gastaldi) y Recorte ( "Mejora de la regularización de las redes neuronales convolucionales con recorte" por Terrance DeVries y Graham W. Taylor). En particular, la facilidad con la que se puede implementar Cutout lo hace muy atractivo. Creo que esto funciona mejor que Dropout, pero no estoy seguro.
  4. Si es posible, prefiera las arquitecturas totalmente convolucionales a las arquitecturas con capas totalmente conectadas. Compare VGG-16, que tiene 100 millones de parámetros en una sola capa totalmente conectada, con Resnet-152, que tiene 10 veces el número de capas y aún menos parámetros.
  5. Prefiere el SGD a otros optimizadores como Rmsprop y Adam. Se ha demostrado que se generaliza mejor. ("Improving Generalization Performance by Switching from Adam to SGD" por Nitish Shirish Keskar y Richard Socher)

6voto

houkouonchi Puntos 46

Al igual que Djib2011, creo que los métodos automatizados son excelentes, pero no abordan la cuestión subyacente de cómo saber si el método empleado para reducir el sobreajuste ha hecho su trabajo. Así que como una nota importante a la respuesta de DeltaIV, quería incluir esto basado en la investigación reciente en los últimos 2 años. La sobreadaptación de las redes neuronales no se debe únicamente a que el modelo memorice en exceso, sino también a la incapacidad de los modelos para aprender cosas nuevas o hacer frente a las anomalías.

Detección del sobreajuste en el modelo de caja negra: La interpretabilidad de un modelo está directamente ligada a la capacidad de generalización de un modelo. Por lo tanto, muchos gráficos interpretables son métodos para detectar el sobreajuste y pueden indicarle lo bien que funciona cualquiera de los métodos sugeridos anteriormente. Los gráficos de interpretabilidad lo detectan directamente, especialmente si se comparan los gráficos de validación y de resultados de la prueba. Los capítulos 5 y 6 de este libro inédito hablan de los avances recientes en el campo de la detección del sobreajuste: Modelado interpretable

Basándome en este libro, me gustaría mencionar otros tres métodos para detectar y eliminar el sobreajuste, que podrían ser obvios para algunos, pero personalmente encuentro que la gente los olvida con demasiada frecuencia. Así que me gustaría enfatizarlos, por si a alguien no le importa:

  1. Detección de la selección de características : Cuanto menos número de parámetros y menos características tenga tu modelo, mejor. Así que si sólo incluyes los más importantes de los 100 millones (tal vez tengas 75 millones en su lugar), tendrás un modelo más generalizable. El problema es que muchas redes neuronales no son perfectas en la selección de características, especialmente cuando el número 2 está presente. Bootstrap o Boosting fundamentalmente no pueden arreglar ambas cosas (sólo una versión llamada wild bootstrap puede). En términos más sencillos, si le das a tu red neuronal datos basura, entonces te dará datos basura. (La normalización L2 mencionada anteriormente es muy buena para ayudar con esto)

  2. Detección y tratamiento de anomalías: Cuantos menos "valores atípicos" haya, más generalizable será el modelo. Por "valores atípicos" no nos referimos sólo a los valores atípicos en los datos. Los valores atípicos en los datos (como los que se ven en un gráfico de caja) son una definición demasiado limitada para las redes neuronales. Hay que tener en cuenta también los valores atípicos en el error de un modelo, lo que se denomina influencia, así como otras anomalías. Por ello, es importante detectar las anomalías antes de ejecutar la red. Una red neuronal puede ser robusta contra un tipo de anomalía, pero no contra todos los demás tipos. Los métodos de contraejemplo, los métodos de crítica y los métodos de ejemplo adversario, así como los gráficos de influencia, son excelentes para ayudarle a descubrir los valores atípicos y, a continuación, averiguar cómo factorizarlos. (Es decir, cambiar los parámetros o incluso eliminar algunos de los datos)

  3. Muestreo estratificado, sobremuestreo y submuestreo basados en consideraciones estadísticas o éticas : Me gustaría ser un experto en submuestreo y sobremuestreo, pero no lo soy, pero sé sobre el muestreo estratificado. Agrupar factores importantes como (raza, sexo, género) y luego hacer un muestreo estratificado por el cluster es vital para no sobreajustar cuando uno considera grandes datos. Cuando se realiza la detección de imágenes, el muestreo estratificado en combinación con la agrupación es legalmente necesario en algunos campos para evitar la discriminación racial. El libro enlazado más arriba habla brevemente de un método para hacerlo.

P.D. ¿Debo incluir más enlaces?

0 votos

Buena respuesta que se suma a otras buenas para incluir la interpretabilidad de los modelos. Otra fuente de mala generalizabilidad son los sesgos en los datos de entrenamiento, por ejemplo, las correlaciones espurias. Las inspecciones minuciosas de las predicciones de un modelo pueden ayudar a detectar esos sesgos, de modo que uno puede desobedecerlos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X