diciembre 17, 2019 10:00 am

Jesús

Uno de los problemas más frecuentes cuando entrenamos redes neuronales, sean convolucionales o de cualquier otra familia, se conoce como “sobreajuste”, aunque nos referiremos a él por su nombre en inglés: overfitting.

El overfitting, realmente, es un mal que puede aquejar a cualquier modelo predictivo, más allá de las redes neuronales. 

¿En qué consiste? Para entender, recordemos por un momento cuál es nuestra meta en el aprendizaje supervisado: Aproximar de la mejor forma posible la función subyacente que “mapea” entradas a salidas. En castellano: Queremos emular un comportamiento que observamos en los datos. Por ejemplo, si en una foto hay perros o gatos.

Ahora bien, emular en este contexto lleva implícito generalizar. Es decir, no queremos simplemente crear un agente capaz de trabajar sobre los datos de entrenamiento, sino sobre cualquier porción de información de la misma naturaleza. 

Sobreajustar u “overfit” significa que el modelo pierde la capacidad de generalizar puesto que en vez de capturar los patrones generales subyacente en el conjunto de entrenamiento, presta demasiada atención a todos los detalles, incluyendos los superfluos e intrascendentes que no inciden de forma alguna sobre la predicción. De esta forma, el modelo lo que hace es memorizar, no aprender.

Una buena forma de entender en mayor profundidad este importante concepto, es mediante un ejemplo. Imagina que queremos aprender a diferenciar perros y gatos a partir de fotos. Después de un tiempo de minucioso estudio de nuestro conjunto de entrenamiento, nos percatamos de que lo hacemos muy bien, con alta precisión. No obstante, al toparnos con fotografías nunca vistas, nuestro desempeño se va por los suelos. El problema está en que no aprendimos realmente a distinguir estos animales, sino que memorizamos el conjunto de entrenamiento. Cuando vimos imágenes nuevas, nuestro desconocimiento quedó en evidencia. Es como ir a un examen habiendo memorizado, letra a letra, el texto de un libro, pero sin comprender el concepto subyacente.

Cómo Detectar el Overfitting

Hay varias maneras de detectar si nuestro modelo está sobreajustando los datos. El mejor método es tomar una parte de los datos de entrenamiento para validar el desempeño del modelo, haciendo estos las veces de data nueva. 

Luego, mediremos el desempeño de la red en ambos conjuntos de datos, mediante la métrica pertinente (por ejemplo, accuracy), y las compararemos. Si la brecha entre el desempeño en los datos de entrenamiento y los datos de prueba es muy amplia, significa que, efectivamente, nuestro modelo está “overfitting”, es decir, memorizando, no aprendiendo.

En estos casos resulta más útil e intuitivo graficar los valores de la métrica objetivo, así como de la función de pérdida, a lo largo de los epochs/iteraciones. A continuación vemos en gráfico de una red neuronal que está “overfitting” sobre el conjunto de entrenamiento:

Las dos curvas inferiores describen la exactitud (accuracy) de esta red en el conjunto de entrenamiento (línea púrpura) y de validación (línea gris). Notamos que una brecha se empieza a abrir alrededor del epoch 5, la cual se amplía a lo largo del tiempo. Cerca del epoch 100, observamos que la exactitud de entrenamiento está cerca de 1.0, es decir, 100%, mientras que la curva de validación se estancó en 0.5, o sea, 50%. Esto nos indica con total claridad que los parámetros entrenados por la red no se traducen en mayor poder de generalización, sino, más bien, modelan la señal y el ruido presente en las imágenes del conjunto de entrenamiento.

Las otras dos curvas corresponden a las pérdidas en los conjuntos de entrenamiento (línea roja) y validación (línea azul). La situación es análoga: Se crea una brecha cerca al inicio del entrenamiento, la cual se magnifica a medida que avanzamos en el proceso de ajuste de la red.

Cómo Combatimos Overfitting

He aquí algunas de las principales formas de combatir el overfitting:

  • Usar modelos más simples: Una de las razones principales por las cuales el overfitting se produce, es porque usamos modelos demasiado complejos para nuestros datos.
  • Regularización: Es una forma de penalizar la complejidad en los modelos, típicamente a nivel de parámetros. Entre los mecanismos de regularización más conocidos están:
    • L1.
    • L2.
    • Dropout.
  • Remover “features” irrelevantes. Por ejemplo, si queremos detectar perros o gatos en imágenes, ¿de qué nos sirve saber el título de la foto?
  • Detener el entrenamiento antes de tiempo. Como se evidencia en el gráfico anterior, entrenar durante demasiado tiempo conduce a overfitting. En cambio, para prevenir esta situación, debimos detenernos en el epoch 5 para hacer los ajustes necesarios.

Hoy aprendimos que el resfriado común en machine learning se conoce como overfitting. Aunque es una situación indeseable, somos afortunados de contar con muchas herramientas, estrategias y maneras de combatirla. 

¿Te has topado con overfitting antes? ¿Cómo resolviste? Déjamelo saber en los comentarios.

¡Hasta pronto!

Sobre el Autor

Jesús Martínez es el creador de DataSmarts, un lugar para los apasionados por computer vision y machine learning. Cuando no se encuentra bloggeando, jugando con algún algoritmo o trabajando en un proyecto (muy) cool, disfruta escuchar a The Beatles, leer o viajar por carretera.

Paso 2/2: Celebra tu NUEVO EMPLEO en Machine Learning ?

A %d blogueros les gusta esto: