Adentrándome en el mundo del Machine Learning o Deep Learning con fast.ai: de “conocimiento cero” a “contar personas en un selfie” en pocas horas.
He de confesar que estoy emocionado. Y este post probablemente refleje esa exaltación, conscientemente descontrolada. Es por ello que sugiero la lectura de este post con cierto aire de criticismo y desconfianza, pues esta emoción puede estar embriagándome mientras escribo estas líneas.
Pero es que llevo más de un año intentado descifrar cómo hincarle al diente al Machine Learning. Las redes sociales, los eventos, los MOOCS, … se llenan de palabras tipo “Inteligencia Artificial”, “Deep Learning”, “Machine Learning”, …; cada día de forma más habitual, lo cual, nos da indicios de que pueden ser tecnologías maduras que empiecen a utilizarse en breve, si no lo hacen ya, en nuestro día a día. Como anteriormente fue el desarrollo móvil, o está siendo ahora también el desarrollo sobre asistentes de voz. ¿Y qué le pasa a alguien como yo, que quiere sentir que no se queda atrás en el uso de la tecnología? Que busca la forma de saber en poco tiempo, de qué va y cuáles son las claves de ésta.
Sin embargo, siempre me ha parecido que el desarrollo con IA/ML/… tiene una complicación extra: una aparentemente complicada curva de aprendizaje, llena de teoría matemática, y conceptos básicos alejados del día a día para una persona dedicada al mundo de desarrollo, y que requieren de una persistencia que yo no tengo o mi tiempo libre no me permite.
Así empecé el famoso MOOC de Coursera que dejé por la mitad, y el intento de entender modelos como el GPT-2, o proyectos como source{d}, a los que me encantaría aportar, pero en los que veo que las capacidades necesarias para hacerlo se me quedan lejos.
El descubrimiento de fast.ai
Y hace poco descubrí, gracias a la magia de twitter, fast.ai: una librería que simplifica este mundo, principalmente para los iniciados. Y para darla a conocer, han creado la ya tercera edición del curso “Practical Deep Learning for Developers”. Es decir, un “cómo aprender Deep Learning si nunca te atreviste a preguntar”. Dejan claras sus intenciones desde el principio: no te preguntes cómo funciona, deja eso para después. Empieza usando los modelos y arquitecturas que ellos te proponen, con las variables y parámetros que ellos proponen. Poco a poco irás entendiendo su significado.
Y justo ese modo de aprender encaja perfectamente con cómo soy: Necesito feedback y satisfacción instantánea que me enganche y me haga ver que progreso.
Y así, en tan solo los 2 primeros vídeos del curso, he entrenado un clasificador de imágenes para distinguir selfies de 0, 1, 2, 3, o 4 o más personas. Con unas 10 horas extra invertidas (la mayor parte buscando fotos en mi Google Photos), y unos 5 euros invertidos en servidores, GPUs y almacenamiento cloud.
Así de orgulloso estoy de mi criatura, y agradecido a fast.ai por resolver una frustración que llevaba dentro durante algo más de un año.
Puedes probarla aquí:
https://us-central1-fastai-curso-257321.cloudfunctions.net/classify?url=(url-encoded image) (aviso: puede que esta URL deje de funcionar en breve para reducir costes).
Disclaimer: el modelo en sí está bastante sesgado, con fotos de mi google photos, por lo que no esperes grandes resultados. De hecho, el error al contar selfies de 3 personas es alto debido a esto. Lo importante es que lo entiendo y sé por qué, no que el modelo sea perfecto.
Algunos ejemplos
Tecnologías y aprendizajes
En estos dos vídeos de fast.ai, he aprendido a:
- Usar notebooks Jupyter con Python.
- Crear una instancia VM en GCP con 1 GPU, y entender sus costes.
- Entrenar un modelo ResNet para clasificar imágenes, y descubrir lo sencillo que realmente es. Entender que la clave son las imágenes, y lo limpio y poco sesgado que esté el dataset.
- Ver cómo el modelo converge y se calcula su tasa de error.
- Conocer qué es el Learning Rate, cómo encontrar uno adecuado y por qué importa a la hora de converger y entrenar el modelo.
- Comprender y obtener una Matriz de Confusión.
- Exportar el modelo, y usarlo en un servidor “ordinario” con CPU.
- Desarrollar una aplicación web con Starlette que utiliza dicho modelo.
- Desplegar dicha aplicación a una Google Cloud Function con Python.
Si quieres ver la aplicación web, la tengo subida a mi github (versión Starlette y versión Google Cloud Function):
Disclaimer: a los que llevan tiempo en este mundillo, quizás este post puede sonarles algo hereje. Soy consciente que mi incursión acaba de comenzar, y la intención detrás de este post no es explicar lo que acabo de aprender; sino animar a quien quiera aprender, enseñando un posible camino que a mí me costó encontrar, y que me está funcionando: fast.ai.
¡Hasta próximos aprendizajes!