Nube de Etiquetas
(Ah?)

domingo, marzo 30, 2008

Overfitting o Sobre-ajuste

Agenda:

  • Este post empieza con una sacada de navaja.
  • Luego explicaré por qué este post es una respuesta a uno de mis lectores, y recomendaré no usar este blog para citas en trabajos académicos.
  • Por último explicaré, de la forma más amena de la que sea capaz esta vez, qué es el Overfitting o Sobre-ajuste, o el Sobre-entrenamiento.
Permítanme empezar sacando la susodicha navaja:

Plurality should not be assumed without necessity
- William de Ockham, siglo XIV

O dicho de otra forma: KISS (keep it simple, stupid!). Pero antes de explicar qué tiene que ver esto (la Navaja de Ockham) con el overfitting, permítanme escribir algo sobre el contexto de este post.

Recibí en estos días un correo de Marc (no coloco el nombre completo porque lo correcto es proteger la privacidad), en donde me decía lo siguiente:

He visto tu articulo sobre las svm , pero la verdad es que me falta una
cosa de él, el problema de el sobre-aprendizaje, me puedes comentar algo sobre
el tema? lo necesito para un trabajo

Yo ya tenía en mis planes escribir sobre el overfitting, debido a que es un tema obligado al hablar de aprendizaje. Sin embargo, antes de empezar a hablar sobre ello, quiero dejar algo en claro:

no recomiendo citar lo que se escribe en este blog, en trabajos académicos.

¿Por qué? la razón es muy sencilla. Esto no es una fuente arbitrada. Y adicionalmente, la informalidad con la que están explicadas las cosas no lo hace una buena fuente para elaborar trabajos académicos. Sin embargo es una buena fuente (o al menos pretendo que lo sea lo más posible!) para adquirir entendimiento.

Si alguno de ustedes necesita referencias que puedan ser citadas sobre algún aspecto de los conversados acá, déjenme el comentario y gustoso compartiré las fuentes que yo conozca al respecto. ¿Vale?

En fin, ahora si,...


hablemos sobre overfitting: ejemplo "humano"

Hablar de overfitting es hablar de situaciones como la siguiente:

Estamos en un salón de clases, recibiendo datos de un profesor que escribe sobre la pizarra.
Nosotros podemos aprender los principios generales que él trata de transmitir usando su voz, sus gestos, y los rastros que deja la tiza sobre la pizarra durante algunos de los erráticos gestos.

Sin embargo, vemos con cierta frecuencia que hay personas que copian cada frase de lo que indica el profesor. Según mi experiencia docente me ha hecho reflexionar, hay muchas cosas que uno como profesor dice, que no es realmente necesario copiar (algunas hasta el profesor se arrepentiría de decirlas!).

Un estudiante podría copiar incluso esquemas de la gesticulación, cuantas veces la persona ha respirado en una pausa, o la intensidad de un ataque de tos. Obviamente estoy exagerando, pero ese es el punto: la exageración.

Es esa es la parte que sobra, cuando hay "sobre-entrenamiento", "sobre-aprendizaje", o "sobre-ajuste". Es decir, la parte "over" del overfitting.

Uno no necesita aprender los gestos y ruidos (palabras innecesarias) del profesor. Ellos incluso podrían distorcionar el concepto general que se trata de explicar.

En nuestro cuaderno, deberíamos ser lo más simples posibles. ¡Apéguense a la navaja de Ockham, muchachos!.


ejemplo inhumano...


De igual forma, uno puede tener una serie de datos, y usar un modelo matemático para "aprender" su patrón. Digamos que queremos hacer una regresión. El mínimo error siempre es deseable, pero no a cualquier precio. Uno podría tener puntos que son bastante cercanos a un modelo lineal, aunque los puntos no están exactamente sobre la recta que hemos trazado, lo cuál daría una cierta cantidad de error.

El caso del sobre-ajuste, sería uno en el que decidiéramos usar una función más compleja que una simple recta, para que pase por todos los puntos, tal y como se ve en la figura de abajo (cortesía de wikipedia):

En esta curva de 8vo grado (polinomio de grado 8), estamos estimando 9 parámetros para obtener la función,... para ajustarla sobre 10 puntos. Es decir, estamos consiguiendo un modelo matemático casi tan complejo como los datos que representa. Si tenemos en cuenta que un modelo se supone que debe representar de forma simple el comportamiento de los datos (una especie de "resumen" del comportamiento de los mismos), pareciera que acá terminamos teniendo un modelo "poco eficiente".

Sin embargo, no es sólo un problema de poca eficiencia. Si tenemos en cuenta que estos modelos frecuentemente se utilizan para predecir la "aparición" de otros puntos que por los momentos desconocemos, nos daremos cuenta de algo muy interesante:

A medida que aumentamos la complejidad de la función, la capacidad de pronosticar (o generalizar) al principio aumenta, pero llegado cierto punto, empieza a decaer. El principio de la navaja de Ockham, mostrado gráficamente.


¿Por qué?

La respuesta no es difícil. En la gráfica siguiente, si proyectamos como se mueve la función elaborada, entre el 0 y el 1 (en el eje "x"), vemos que se aleja bastante de la recta que pasa cerca de los puntos. Pero ¿realmente las distancias que tienen los puntos de la recta dan pie a que pensemos que el punto que va entre el 0 y el 1 esté tan lejos del valor que nos predice el modelo lineal?

La respuesta es no, inclusive de forma intuitiva, aunque, como veremos, no es necesario acudir al no tan común "sentido común" para confiar en lo que dije arriba.


típico overfitting en redes neurales


Las redes neurales artificiales han sido utilizadas con frecuencia para ajustarse a funciones. Uno consigue medir en un proceso ciertos datos, y trata de estimar la función que hay "detrás" de los datos, para tratar de predecir los datos en otros lugares en donde no hemos medido por alguna razón (imposibilidad temporal, técnica, financiera, riesgo, etc.).

Bien, típicamente esto se hace de la siguiente forma:
  1. Se elige un subconjunto de los datos, de forma aleatoria, para conformar el "conjunto de prueba" o "conjunto de validación".
  2. El resto de los datos conforman el "conjunto de entrenamiento".
  3. Se dan valores iniciales a los parámetros de todas las neuronas de la red.
  4. Se "muestra" un dato a la red, y se compara la salida de la red con la salida que debería haber dado. La diferencia entre lo deseado y lo que se ha obtenido de la red, se utiliza como información para regañar a las neuronas que se portan mal (ajustando los parámetros).
  5. Se repite el paso anterior, hasta que el error de la salida de la red se estabiliza en un margen aceptable.

Este proceso puede ser muy vario-pinto en las estrategias a seguir para:

  • elegir el número y disposición de neuronas,
  • elegir el kernel a utilizar,
  • definir la sensibilidad que tienen los ajustes respecto a los errores cometidos por la red,
  • y decidirse entre la acumulación de ajustes luego de "ver" todos los datos de entrenamiento versus la realización de ajusted luego de "ver" cada dato individual.
En la práctica, durante el proceso se evalúa el trabajo predictivo de la red ante los datos del conjunto de validación (que la red nunca ha usado para entrenarse). Esa evaluación permite observar qué tanta capacidad de generalización tiene el modelo.

La experiencia tiende a mostrar el siguiente patrón:
  1. Con los primeros ajustes, poco a poco crece la eficiencia con que se logran predecir los resultados del conjunto de validación.
  2. Llegado cierto punto, no se logra mayor mejora en la eficiencia de la red ante el conjunto de validación. Sin embargo, sigue mejorando la eficiencia ante el conjunto de entrenamiento.
  3. Más allá de ese punto, aunque la eficiencia con que la función se aproxima a los datos de entrenamiento se puede acercar a la perfección, el resultado ante el conjunto de validación ha empezado a empeorar.

El comportamiento del paso 3, es una muestra numérica del concepto que vimos anteriormente de forma intuitiva, como sobre-ajuste. Empieza a ocurrir, si lo vemos en la figura de abajo (también cortesía de wikipedia), en el momento en el que la curva de color rojo deja de bajar. Esta mide el error de la red en el conjunto de validación.


He acá al principio de la navaja de Ockham, demostrado estadísticamente.

Procesos "constructivos"

Este comportamiento también puede verse en los procesos de entrenamiento constructivos, que van generando neuronas en la red (o ramificaciones en un árbol), haciéndola cada vez más compleja, para ir aprendiendo el patrón. Al inicio, con pocas neuronas (o en árboles de clasificación, con pocas hojas) ambas eficiencias crecen, y la de entrenamiento logra la perfección absoluta, mientras que en algún momento el bulto del conjunto de validación se nos ha caído en el camino.



En la imágen de arriba (nuevamente cortesía de wikipedia) se observa claramente como el clasificador representado por la línea verde se ajusta a la perfección a la data de entrenamiento. Sin embargo, el clasificador de la línea negra (mucho más sencillo), probablemente tendrá mejor capacidad de geralización. Éste es un buen ejemplo del tipo de superficies clasificadoras que resultan cuando una red tiene demasiadas neuronas, y demasiado entrenadas. [adición del autor el 31-03-08]

Esto que acabo de comentar es el tipo de procesos como el que hablamos sobre el polinomio de grado 8. Ir hacia la derecha en el gráfico de arriba, es ir aumentando el nivel del polinomio a usar para hacer la regresión sobre los datos.


¿Y cómo hacemos?

La manera de apegarse a la navaja de Ockham más evidente, es ir revisando el comportamiento de nuestro modelo sobre data de validación.

Se recomiendan técnicas como:

En general, estas herramientas permiten algún nivel de análisis para determinar si un trabajo más complejo o largo, está ayudando o no a la capacidad de generalización (predecir valores no vistos durante el entrenamiento o determinación de parámetros).

En un trabajo que estoy realizando actualmente en conjunto con el Prof. Ubaldo García Palomares, hemos incluído dentro de un algoritmo de generación y entrenamiento de una red neural de una capa oculta, para clasificación binaria, unas instrucciones que permiten que el algoritmo se detenga cuando ya no es posible mejorar la capacidad de generalización. Pero eso es parte de otra historia...

¡Espero que esto pueda ayudarte, Marc!

5 comentarios:

UC dins la nit dijo...

Gracias Orestes. Esto es justamente lo que estaba buscando, empece a leerme el artículo de svm y la verdad es que me resultó fácil entenderlo, por lo tanto seguiré leyendo este

Me parece que es bueno que haya blogs como este que nos acerquen a las matematicas a la gente que no somos matemáticos, no para citarlos en trabajos científicos, como tu muy bien dices, sino como punto de partida para poder entender lo que se publica y tener un punto de partida para buscar mas información

Con tu permiso distribuiré la dirección de tu blog entre algunos de mis profesores y compañeros de laboratorio que también están interessados en el tema

si algún día tienes alguna duda sobre bioinformatica, no dudes en preguntar

Pau

Orestes dijo...

Pau, gracias por tus palabras! Me anima mucho sentir que esto realmente está siendo útil para los que no somos matemáticos pero tenemos interés en el tema.

Aprovecho para decirte a ti, y a todos los que leen este blog, que si desean que hable sobre un tema en particular, no duden en mandarme un correo, que tan pronto como tenga oportunidad cumpliré las peticiones (si es que está dentro de las cosas que conozco).

En atención a tu interés en el blog, y el que posiblemente tienen aquellos a quienes vas a referir el URL, me animé a poner una subscripción por correo en el blog. De esa forma podrán enterarse de lo que publico, y no será problema que publique varias veces un mismo día y alguno de los posts quede "enterrado" entre los últimos publicados.

Salud!

Orestes

Orestes dijo...

Hice algunos cambios:
- Añadí un link a la página del profesor U.García-Palomares
- Agregué un ejemplo de una red neural clasificadora con complejidad excesiva, para ilustrar el sobreajuste en entrenamiento constructivo.

Saludos!

Nn dijo...

Hola! Muchas gracias por la explicación! Fue realmente clara! Estoy leyendo un paper en el que usan redes neurales (es la primera vez que leo sobre el tema) y cuando vi overfitting pense "oh no! otro de esos términos estadisticos que deben ser imposibles de entender". Gracias por demostrar que no es así!

nOE

Anónimo dijo...

Muy buen explicado...!!! gracias espero encontrar mas temas como lo que es el uderfitting.

Taty