Hace unos meses decidí comenzar a aprender Machine Learning de forma intensiva. Era algo que tenía ganas de hacer desde hacía tres años, cuando tuve mi primer contacto con la materia y finalmente a mediados del año pasado me lancé a ello.
Puedo adelantar que el proceso ha sido muy enriquecedor y que si bien en el tiempo empleado, unos ocho meses, solo da para rascar un poco la superficie de este campo de estudio, creo que si me ha permitido adquirir los conocimientos necesarios para seguir la ola de todo lo que parece que está por venir.
Por supuesto, no voy a dejar aparcado el estudio ahora, simplemente es un cambio de fase en el que me he centrado en conocer las bases del Machine Learning para ahora iniciar un nuevo proceso en el que empezar aplicar estos conocimientos en campos en los que esté trabajando.
La idea de este artículo es que sirva de guía para otra gente que quiera iniciarse en este mundo conociendo de primera mano el enfoque que he realizado.
Mi enfoque en el estudio de Machine Learning
Hoy día hay tanto ruido respecto al mundo de la IA y demás que creo que es importante aclarar antes de qué va a tratar este artículo.
Lo que he estado aprendiendo son las metodologías de cómo, a partir de unos datos, prepararlos para poder entrenar un modelo para que después pueda realizar una tarea concreta. Esto sería lo que haría en su día a día un científico de datos.
Es por esto que lo que se va a hablar en este artículo es un poco distinto a lo que se puede ver que está teniendo más repercusión en medios. Como son las IA generativas. Estos modelos son el producto del trabajo de científicos de datos en el desarrollo de esos modelos empleando ciertas técnicas para su entrenamiento.
Por esta razón, si buscas un artículo de cómo usar la IA a nivel usuario, o cómo emplear un modelo en una aplicación, no es este el artículo.
Machine Learning mi forma de aprender
En mi caso decidí aprender sobre la materia por mi cuenta, creo que no es una ruta buena para todo el mundo y posiblemente si dispones de tiempo o realmente quieres enfocar tu carrera profesional por ahí es mejor plantearte hacer algún curso o master en la materia que hay muchos y algunos muy buenos.
En mi caso la motivación era tener los conocimientos suficientes para poder seguir las novedades que iban saliendo en el campo además de buscarle cierta aplicabilidad en entornos laborales, pero no necesariamente siendo yo el ejecutor del proyecto. Sería algo así como añadir una herramienta más a la caja con la idea de darle utilidad más adelante.
Es por eso, que el enfoque de estudio por mi cuenta era el adecuado para mi, así podía centrarme en aquello que me interesara más y dejar para otro momento lo que no se adecuara tanto a lo que necesito.
Este estudio lo he estructurado en tres fases que os voy a detallar a continuación:
Fase inicial
En el momento que me decido a aprender sobre esto me encontraba en la siguiente circunstancia:
- No pertenezco al sector de software por lo que desconocía la forma de trabajar ni las herramientas de desarrollo informático de cualquier tipo.
- Aunque a lo largo de mi trabajo siempre he programado algo porque me gusta y porque me resulta útil para resolver ciertos problemas, no soy programador y conocía muy poco de python.
- Mis conocimientos sobre la materia se basaban en algunos videos divulgativos y en alguna muestra de su potencial
Como podréis imaginar, si nos basamos en este punto de partida, estaba bastante perdido. Para resolverlo me busqué un material de referencia que en mi caso fue el libro Aprende Machine Learning con Scikit-Learn, Keras y TensorFlow.
Este libro fue mi piedra angular alrededor del cual construir el resto de la ruta. Estoy seguro que hay otros materiales muy buenos pero a mi me ha servido este y por eso lo recomiendo.
Una vez disponía del material de referencia, como prácticamente no disponía de conocimientos en la materia, decidí dividir la semana en áreas de estudio, así podía avanzar en todo en paralelo y si necesitaba algún conocimiento de otra área para avanzar en la siguiente centrarme en eso ese día.
Dividí la semana de la siguiente forma:
Aprendizaje de GIT
A este tema solo le estuve dedicando tiempo el primer mes hasta terminar el curso, con la idea de aprender lo básico. Para ello empleé el curso de git que tiene mouredev y que a mi parecer está muy bien para iniciarse en la herramienta.
Esto no es estrictamente necesario para aprender Machine Learning pero va muy bien cuando desarrollamos algún proyecto para tenerlo bien organizado y controlado, lo que a la larga ahorra tiempo si cometemos algún error que rompa el código ya que puedes recuperar versiones anteriores de tu trabajo.
Teoría sobre Machine Learning
En este caso me dedicaba a estudiar el libro, siguiendo además los notebooks de cada tema del repositorio asociado al libro para conocer a nivel teórico que se podía hacer con la materia
Estudio de python
Como no tenía ni idea del lenguaje, para poder iniciarme estuve revisando la documentación oficial de Python así como de librerías específicas como Numpy, Pandas, Matplotlib, etc.
Esto es útil porque permite hacerse una idea de cómo se escribe en este lenguaje y qué permite hacer.
Por supuesto es muy recomendable probar los ejemplos propuestos en la documentación y “jugar” con ellos para asegurarnos que entendemos como se emplean.
Proyectos en Python
Además de la teoría, planifiqué un día específico para realizar algún proyecto en Python acorde a mis conocimientos, en un primer momento, como no tenía capacidad para desarrollar proyectos, empleé el recurso de los retos de programación de mouredev. Este recurso son ejercicios cortos que se proponen cada semana y que moure resuelve, lo que permite ver enfoques distintos al tuyo y así aprender formas distintas de hacer las cosas.
Una vez ya cogí más soltura empecé a trabajar proyectos cortos pero un poco más complejos, enfocados en temas de datos pero no directamente relacionados con Machine Learning. Por ejemplo estuve probando el framework scrapy además de hacer el ejercicio de descargar y procesar datos de alguna API pública para introducirlos en una base de datos. Esto es solo a modo de ejemplo del tipo de proyectos pero hacer cualquier cosa valdría.
La idea de invertir tiempo en este día era por conseguir agilidad en el lenguaje viendo cosas alejadas un poco de la materia para así tener un conocimiento más general del lenguaje lo que puede resultar útil.
Práctica de Machine Learning
También tenía un día dedicado para proyectos específicos de la materia, para ello o bien hacía los ejercicios propuestos en el tema correspondiente del libro (que además estaban resueltos por si se quieren revisar) o participaba en alguna competición enfocada en el aprendizaje en kaggle.
Esto permite ya enfrentarse a problemas relacionados con el campo y ver qué puntos de aprendizaje tienes menos afianzados lo que sirve además de para mejorar destrezas para repasar lo estudiado.
Fase 2, poniendo foco en Machine Learning
Una vez ya tenía leído el libro, me veía más suelto en Python y había revisado y utilizado las principales librerías necesarias paso a realizar proyectos más largos ya enfocados en problemas de Machine Learning.
Para ello empleo la plataforma kaggle de nuevo, pero ya buscando proyectos más retadores, para ello he seguido el siguiente flujo de trabajo que me ha ido bien:
Me cogía un curso de los que hay en la plataforma que tratara de un tema que me interesara y lo hacía. Una vez hecho el curso, o bien iniciaba en una de las competiciones que proponen al final de los mismos o me buscaba alguna otra que tuviera que ver con la temática del curso (para aprovechar los conocimientos frescos) y participaba.
De esta forma te enfrentas a problemas interesantes, con el aliciente adicional de ver cómo quedas dentro de la competición con los conocimientos que tienes, lo que puede ser una buena forma de saber en qué punto te encuentras.
Además en este tipo de competiciones la gente comparte en muchas ocasiones sus enfoques y discuten sobre el tema por lo que es una buena forma de adquirir nuevos conocimientos mediante la práctica.
Fase actual, enfoque práctico
Esta fase en el proceso de aprendizaje no excluye a la anterior, quiero seguir participando en competiciones en la medida que me permita el tiempo ya que además de ser motivador es un método de aprendizaje muy dinámico y entretenido.
Pero ya no quiero que sea la base de mi tiempo, ahora mi intención es empezar a explorar los modelos creados y accesibles para ver su potencial y aplicabilidad.
Puede ser que muchos al leer esto, puedan pensar que para llegar a este punto no era necesario profundizar estudiando Machine Learning y puede que sea cierto, pero bajo mi punto de vista si se quiere empezar a emplear en serio una tecnología puede ser muy conveniente conocer de donde viene para poder exprimir adecuadamente su potencial.
Recursos que me han resultado útiles para aprender Machine Learning
A continuación os paso a contar qué recursos me han resultado más útiles en este tiempo y por qué por si os resulta útil.
El libro de Aurélien Géron: como he comentado más arriba es el recurso en el que he basado todo el proceso de aprendizaje. Como aspectos a destacar el libro pasa por prácticamente todos los temas del Machine Learning dando una buena base teórica de cómo funcionan las cosas además de ejemplos prácticos que te permiten empezar a andar.
La plataforma Anaconda: es un software muy recomendable, al menos si trabajas en windows, la razón es que te permite tener tu entorno de trabajo preparado con las librerías que necesites para trabajar con IA de una forma rápida, fácil y gratuita.
Kaggle: es una comunidad muy interesante ya que dispone de un gran número de recursos útiles para aprender en este área. Desde datasets, cursos cortos, competiciones de aprendizaje tutorizadas, modelos preentrenados…
Además tienen cuota gratuita para uso de GPU y TPU dentro de la plataforma lo que puede ser muy útil para empezar a probar a entrenar ciertos modelos.
El material de mouredev: si como era mi caso partías de un bajo nivel de conocimiento en todo lo que tenía que ver con el desarrollo de software, estos recursos pueden ser un buen punto de partida.
Visual Studio Code: aunque no tenga que ver directamente con el aprendizaje, si haces algo relacionado con la programación en algún momento necesitarás un editor de código. Este es el que empleo y considero que es muy completo.
Algún modelo del lenguaje: en mi caso he estado empleando la versión gratuita de chatGPT el uso principal que le he dado es para preguntarle sobre errores de código y dudas sobre cómo escribir alguna cosa en Python.
El mundo del Machine Learning puede ser apasionante
Creo que el mundo que se ha abierto en base a la explosión de los modelos de IA puede ser tan revolucionario como lo fue en su día la revolución industrial, los ordenadores personales o internet.
Es por esto que creo que, en los próximos años va ser necesario adaptarse a esta nueva tecnología, como he empezado a hacer.
Por esta razón quería compartir mi experiencia por si a alguno de vosotros os ayuda a dar el paso o al menos os facilita el empezar a introduciros en este mundo tan interesante.