logo

Dot CSV

Inteligencia Artificial, Tecnología, Ciencia y Futuro! Bienvenidos a la 4ª Revolución Industrial 🚀 Inteligencia Artificial, Tecnología, Ciencia y Futuro! Bienvenidos a la 4ª Revolución Industrial 🚀

Transcribed podcasts: 213
Time transcribed: 5d 22h 50m 3s

This graph shows how many times the word ______ has been mentioned throughout the history of the program.

Entonces, habíamos quedado que el overfitting es un concepto importante dentro del campo del Machine Learning, ¿verdad?
Una posible explicación para esto sería el overfitting.
¿Qué es este problema del overfitting?
Lo llamamos overfitting.
La habilidad de lidiar con el overfitting es lo que separa a los profesionales de los amadores en Machine Learning.
Vale, parece que sí.
Pero antes que nada, ¿recuerdas que era el overfitting?
Tal y como vimos en la primera parte de esta serie, el overfitting es el fenómeno que se produce en tu modelo de Machine Learning,
cuando este, durante su entrenamiento, aprende tan tan bien a ajustarse a los detalles más específicos de tus datos de entrenamiento,
que su capacidad de generalizar, de resolver aquellos casos nuevos nunca antes vistos, se empieza a deteriorar.
En la comparación que hicimos con los estudiantes, era el caso en el que el estudiante no aprendía realmente la materia,
sino que solo memorizaba cómo hacer correctamente aquellos problemas que iban a salir en el examen.
Vamos, una estrategia pésima si analizamos su rendimiento cuando se enfrenten en el futuro a otros nuevos casos de ese mismo problema.
Si recuerdas, al final de la primera parte dejamos unas cuantas preguntas relacionadas con el overfitting sin resolver,
y que serán las que abordaremos hoy en este vídeo.
Recordarás que el modelo que utilizamos para ilustrar qué era el overfitting era un modelo de Regresión Lineal Múltiple,
pero... pregunta, ¿se puede dar el overfitting en otros tipos de modelos?
Sí, el overfitting no es exclusivo de un único modelo, y de hecho es un problema muy general en todos los ámbitos del Machine Learning.
Como vimos, tu modelo de Regresión Lineal puede tener overfitting, vale, pero también podría ocurrir en un problema de clasificación.
Por ejemplo, con un modelo logístico, si la frontera de decisión trazada fuera muy flexible y buscara complacer a todos los casos de entrenamiento.
¿Qué pasaría cuando llegaran nuevos datos?
O, sorpresa, tu frontera de decisión es una mierda.
Quiero decir, tu modelo no generalizaría bien.
Algo similar ocurriría en un algoritmo como el KNN, K Vecinos Cercanos,
donde analiza los K puntos más cercanos para decidir cómo clasificar a un elemento.
Si el valor de tu K es muy pequeño, tu frontera de decisión será muy ruidosa y boom, overfitting.
Esto ocurre de igual manera en los algoritmos de clasterización, como K-Means, si decides optar por un elevado número de clasters.
Acabamos modelando el ruido.
Y aquí estamos mirando el overfitting, analizando la parte algorítmica de estos modelos.
Pero el overfitting ya vimos que también puede entenderse de una manera conceptual,
como que tu modelo está memorizando aquellos ejemplos que ve durante el entrenamiento.
Y esto, por ejemplo, se puede manifestar en un problema de Computer Vision
con que tu modelo memorice cuál es la respuesta asociada a una determinada imagen.
O que tu modelo generador de texto, como el que vimos en el vídeo del modelo GPT-2,
realmente base la generación de sus frases en repetir palabra por palabra
párrafos contenidos en los ejemplos de entrenamiento.
O por ejemplo en el caso del aprendizaje reforzado,
con un agente que no aprende a reaccionar de manera inteligente a los diferentes elementos que puedan surgir durante su partida,
sino que simplemente, tras mucho ensayo y error, memorice cuál es la combinación de acciones que le lleven a la victoria.
Claro, eso está muy bien para ganar en ese nivel.
Pero cuando situemos a la gente inteligente en otro nivel diferente, será completamente incapaz de resolverlo,
puesto que su conocimiento no es generalizable.
Mmm, generalizable. ¿Recuerdas esa palabra?
Ya la mencionamos en la primera parte y realmente es la clave de todo.
Porque por culpa del overfitting, podemos tener la falsa impresión de cuando entrenamos a nuestro modelo de Machine Learning
que este esté aprendiendo correctamente.
¡Guau, genial! Llévemoslo a producción, lancemos nuestro producto.
Y claro, luego cuando aparecen nuevos datos, el rendimiento no es el que esperábamos.
Al final lo que queremos conseguir son modelos que sean robustos ante nuevos ejemplos,
modelos que generalicen bien.
Y por tanto hay que saber si nuestro modelo tiene overfitting.
Pregunta, ¿cómo saber si nuestro modelo tiene overfitting?
No, en serio, ¿cómo podríamos saberlo?
Porque claro, de momento nosotros lo hemos identificado de manera visual
al observar que nuestra línea de regresión o nuestra frontera decisión
era tan flexible que se estaba adaptando demasiado los datos de entrenamiento
y que esta no era muy útil cuando añadíamos nuevos datos.
Pero claro, esto lo podemos observar cuando trabajamos en espacios de dos o tres dimensiones.
Pero como ya sabes, en deep learning es común trabajar con espacios multidimensionales
de millones de dimensiones, imposibles de visualizar.
Entonces, ¿cómo lo hacemos?
Imagínate que perteneces al área de innovación del Hospital Clínico Sagrada Vida,
CSV por sus siglas.
Y quieres invertir recursos en desarrollar una solución que te permita predecir
cuál es el riesgo asociado a la operación de trasplante de corazón de un paciente.
Optas por una solución de deep learning, por lo tanto lo primero que necesitas
son datos históricos de pacientes que ya hayan pasado por el trasplante
y del que ya sepamos cómo han evolucionado tras la operación.
Aprendizaje supervisado.
Para esto, el hospital te facilita el listado de espera de todas las operaciones del año anterior
con el indicador actualizado que refleje el éxito del trasplante.
Y con esto, tú comienzas a trabajar.
Prepara los datos, eliges el modelo, entrenas a tu red neuronal
y poco a poco, según lo vamos entrenando durante más tiempo,
vemos cómo el error de tu modelo va disminuyendo.
Genial, parece que funciona, ¿no?
Hemos conseguido un error de predicción muy bajo, el 2,3%, más que aceptable.
Y entonces, te acuerdas de mi vídeo del overfitting y te entra el miedo.
¿Los sudores fríos?
La duda.
Porque ¿y cómo sabemos si realmente el modelo va a funcionar bien
cuando lo probemos con nuevos datos?
A lo mejor ahora el error es muy bajo porque el modelo sufre de overfitting
y realmente su capacidad de generalizar no es tan buena,
como para poder usarlo con fiabilidad con nuevos pacientes.
¿Se te ocurre cómo poder saber si nuestro modelo tiene overfitting?
El problema es que queremos saber cuál es su rendimiento para datos
que sean diferentes a los de entrenamiento,
pero no tenemos porque hemos utilizado todos durante el entrenamiento.
Entonces, ¿qué? ¿Se te ocurre algo?
¿En serio?
¿Voy a tener que marcar de nuevo el todos cuando he dicho que hemos utilizado todos durante el entrenamiento?
Ahí lo tienes.
Si quieres evaluar tu modelo con datos diferentes a los del entrenamiento,
entonces lo que deberíamos hacer inicialmente es dividir nuestros datos en dos grupos.
Normalmente una separación del 80% para el entrenamiento y un 20% para hacer pruebas.
Es decir, el 80% de datos de pacientes por aquí y el 20% restante por allá.
Y esto es perfecto, porque con los mismos datos que teníamos inicialmente,
ahora podemos entrenar con estos datos de aquí a nuestro modelo
y evaluar su rendimiento con estos de aquí,
que en ningún caso el modelo habrá visto durante el entrenamiento.
Y con lo que por tanto podemos asegurarnos que podamos evaluar su capacidad de generalización.
Si en la gráfica de antes veíamos cómo el error iba disminuyendo mientras entrenábamos al modelo,
ahora podremos ver lo mismo cuando evaluemos el modelo con nuestro dato de entrenamiento.
Efectivamente, entre más tiempo se entrena la red neuronal, más bajo será el error de entrenamiento.
Y claro, esta evaluación la podemos hacer simultáneamente con nuestro dato de validación.
Y cuando lo hagamos, veremos lo siguiente.
Como he de esperar durante el entrenamiento,
el error de validación debe ser superior al error de entrenamiento.
Porque al fin y al cabo, es normal que el modelo tenga un mejor rendimiento con aquellos datos que sí conoce.
Según seguimos entrenando en nuestra red, veremos que ambas gráficas seguirán descendiendo.
Y en este caso, el descenso del error de validación sí será una buena noticia,
porque nos indicará que nuestro modelo está aprendiendo a predecir incluso casos nunca antes visto.
Está generalizando.
Y de repente, si continuamos con el entrenamiento, pasará esto.
Como ves, hemos llegado a un punto donde el error de entrenamiento sigue descendiendo.
Es decir, nuestro modelo sigue aprendiendo a resolver la tarea con los datos de entrenamiento.
Pero ya con los datos de validación, su rendimiento empieza a empeorar.
Su capacidad de generalización se está deteriorando.
Lo que está ocurriendo aquí ya debería de sonarte.
Y es que ha sido en este punto, cuando tu modelo ha entrado en una fase de overfitting.
Donde se ajusta muy bien a tu dato de entrenamiento, pero no a lo de evaluación.
Visto así, es muy sencillo darse cuenta que es en este punto en el que a causa de un sobreentrenamiento de nuestro modelo,
este ha empezado a experimentar el overfitting.
Por tanto, muy sencillo, ¿no?
La estrategia que hemos seguido es coger nuestro dataset original y dividirlo en dos conjuntos diferentes,
el de entrenamiento y el de prueba, en una estrategia conocida en inglés como holdout.
Y que como ves, nos permite trazar en paralelos dos métricas cuya divergencia nos indicará que nuestro modelo está sufriendo overfitting.
Muy sencillo, ¿verdad? ¿Se te había ocurrido? Sí, ¿no?
Bueno, una lástima que todo lo que hemos hecho esté mal.
Y es que en el mundo del machine learning, como en todo, los errores se esconden en los detalles.
Y en este caso, el detalle que hemos pasado por alto se encuentra en nuestros datos.
A nosotros nos han facilitado un listado de pacientes que nosotros hemos dividido en dos conjuntos de datos diferentes.
Pero claro, para que nosotros podamos comparar de forma correcta ambas mediciones del error,
debemos asegurarnos que los datos que nosotros incluimos en ambos grupos sean similares, es decir, que tengan la misma naturaleza.
¿Y qué ocurre? Pues que lo normal en un hospital es que el listado de pacientes en espera para un trasplante
tenga una ordenación lógica donde los primeros pacientes sean aquellos con mayor urgencia
y los últimos de la lista los que tengan menos urgencia.
Una variable que puede ser determinante en nuestro análisis
y que por tanto hace que la naturaleza de los datos sea diferente en nuestro grupo de entrenamiento y de evaluación.
¿Lo ves?
De haber cometido este error, lo más probable es que nuestra gráfica de evaluación mostrara como si el error de entrenamiento disminuye,
pero que sin embargo el error de evaluación apenas mejoraba.
Esto es porque realmente las estrategias aprendidas por el modelo durante el entrenamiento
no es aplicable de la misma manera a estos datos, porque en parte no son exactamente el mismo tipo de datos.
¿Se te ocurre cómo resolver este problema?
Efectivamente, si antes de dividir nuestro dato desordenamos de manera aleatoria cada paciente en nuestra lista,
entonces si nos aseguraríamos de que ambos grupos contienen una distribución equivalente
de tipo de pacientes con mayor y menor urgencia, y por tanto podríamos hacer la comparación.
Sencillo, ¿no? Aunque ojo, porque esto de desordenar los datos aleatoriamente no es siempre bueno para nuestro propósito
y dependerá un poco de la naturaleza de los datos y el problema que quieras resolver.
Porque por ejemplo, imagínate que estamos analizando el contenido de los fotogramas de un vídeo.
Como es habitual en un vídeo, aquellos fotogramas que sean consecutivos tendrán una distribución de píxeles casi idéntica.
Esto significa que si nosotros desordenamos de manera aleatoria estos fotogramas,
acabaremos con ejemplos que son casi idénticos en nuestro dataset de entrenamiento y en el de prueba.
Con lo que si nuestro modelo sufre de overfitting y memoriza el resultado para este fotograma de aquí,
este fotograma de aquí casi idéntico también se beneficiará de la respuesta que el modelo ha memorizado,
haciendo que el error de validación sea más bajo de lo que corresponde
y camuflando así el posible overfitting que pueda existir en nuestro dataset de prueba.
Por tanto, ¿la estrategia cuál es? Pues mira,
asegurarte que cuando trabajes con tus datos, si quieres preparar un dataset de validación para comprobar si tu modelo generaliza bien,
primero, los datos estén idénticamente distribuidos en ambos grupos
y segundo, que no existan dependencias entre datos que pueden hacer que el overfitting se filtre a nuestro conjunto de pruebas.
Al final, la conclusión más importante de este vídeo que quiero transmitir
es que realmente en el mundo del machine learning la parte más complicada no es la de implementar una red neuronal y entrenarla.
Tranquilo, hay librerías que se encargarán de todo eso con unas pocas líneas de código.
Lo difícil aquí es saber aplicar una metodología correcta en el tratamiento de tus datos
para que así las conclusiones que obtengas no sean equivocadas.
Y ojo, porque el overfitting es capaz de filtrarse incluso cuando menos te lo esperas.
La información es capaz de fluir incluso a través de tus propias acciones.
Una fuerza potente capaz de descontrolar a tus modelos y que deberemos de combatir con técnicas igual de potentes.
Una batalla épica jamás vivida que...
Que bueno, vale, quizás me esté pasando con el énfasis para explicar los típicos conceptos de machine learning de overfitting y regularización.
Pero es que no se me ocurre ninguna manera mejor para decirte que todo esto te lo voy a contar en el próximo vídeo.
Y bueno, ya que hablamos de información, sepan que todo el contenido que estamos viendo aquí
es el típico contenido que verían dentro de un curso normal de machine learning.
En este caso aquí lo tenéis disponible gratuitamente y si lo queréis apoyar pues lo podéis hacer a través de Patreon.