No Aprendas Machine Learning

Caleb Kaiser
May 13, 2020

No Aprendas Machine Learning

May 13, 2020 6 minutes read

No Aprendas Machine Learning. En vez de ello, Aprende a construir software con modelos de Machine Learning.

Si eres un desarrollador de software (web o mobile), probablemente tengas algo de curiosidad o al menos un poco de interés en Machine Learning. El concepto de algoritmos que predicen y que pueden enseñarse a sí mismos es algo... genial.

Sin embargo, si decides estudiar Machine Learning y seguir las recomendaciones canónicas para empezar, hay una buena posibilidad de que pases dos semanas aprendiendo álgebra lineal y cálculo multivariable antes de rendirte.

La razón es que la mayoría del material de introducción al aprendizaje automático no está dirigido a los desarrolladores de software, sino a los investigadores de Machine Learning, y éste es un post para desarrolladores de software que sólo quieren construir productos de machine learning.



Source: Pexels


¿Quieres construir productos o investigar?


Antes de finales de la década del 2000, el aprendizaje automático era más o menos exclusivamente un problema de investigación. Simplemente no había muchas empresas que utilizaran el aprendizaje automático en producción de forma significativa.

Por lo tanto, gran parte del material introductorio disponible para el aprendizaje automático se enfoca desde esta perspectiva de investigación. Comienza explicando las redes neuronales desde una perspectiva matemática, explicando toda la teoría que hay detrás del Machine Learning, cosas como el back propagation y el adversarial networks.

Incluso el material no afiliado a una universidad sigue este patrón hasta cierto punto. Por ejemplo, esto se toma directamente de "Quickstart for Beginners" de TensorFlow:


Source: TensorFlow


Si crees que estoy eligiendo un lenguaje confuso, te invito a que lo leas todo.

Si ya estás familiarizado con las matemáticas que hay detrás del aprendizaje automático, o estás entusiasmado por aprenderlas, este enfoque te funcionará. Sin embargo, si lo que quieres es construir cosas con machine learning, puede que no sea exactamente lo que estás buscando.

Para usar la programación como corolario, este enfoque es como aprender a escribir código aprendiendo primero assembly. Prácticamente ningún desarrollador aprende así.

Nota: Si de alguna manera aprendiste a programar en assembly, acepto tus enojados comentarios, y estoy impresionado de que hayas conseguido un navegador para instalar en cualquier oscura distro de Linux que estés ejecutando.

Cuando aprendiste a codificar, probablemente lo hiciste escribiendo "hola mundo" en un lenguaje de alto nivel. Luego, a medida que introdujiste pequeños trozos de complejidad en tus proyectos, aprendiste más y más programación de bajo nivel según lo necesitabas.

Este patrón de aprendizaje tiene éxito entre las personas que construyen software porque da prioridad a la construcción de cosas, y si estás más interesado en construir un motor de recomendación que en publicar un artículo, así es como deberías enfocar el aprendizaje del ML.

Cómo aprender Machine Learning construyendo software?

Si eres el tipo de persona que aprende mejor tomando cursos, el mejor recurso, y probablemente el defensor más vocal de este enfoque de arriba hacia abajo, aprender haciendo, para aprender Machine Learning, es el curso de fastai Practical Deep Learning For Coders.

El objetivo de este artículo no es hacer publicidad para fastai, basta con decir que sus fundadores (Jeremy Howard y Rachel Thomas) han creado varios cursos que enseñan a los desarrolladores deep learning haciendo que realmente construyan cosas, sumergiéndose en la teoría subyacente en lo que respecta a los proyectos que se están construyendo. Para tener una idea de su estilo de enseñanza, mira esta charla de Rachel Thomas

charla de Rachel Thomas


Por otra parte, si eres el tipo de persona que aprende mejor sumergiéndose y construyendo cosas por sí mismo, empezar a aprender machine learning es lo mismo que cualquier otro nicho de programación. Elija un proyecto que le parezca interesante, he reunido una lista gigante de proyectos de NLP para principiantes, entre en ella aqui.

Un buen enfoque para familiarizarse con lo que es construir con NLP, suponiendo que aprendas de esta manera, sería:

  1. Identificar un objetivo, como construir un autocompletador de texto o un identificador de matrícula.
  2. Encontrar un modelo pre-entrenado que se ajuste a tu proyecto -GPT-2 o YOLOv3 funcionaría para los proyectos mencionados anteriormente, respectivamente.
  3. Si te apetece, puedes incluso utilizar una biblioteca como gpt-2-simple para afinar (personalizar con tus propios datos) tu modelo.
  4. Finalmente, despliega tu modelo como un microservicio.

Una vez que tenga un modelo desplegado como una API, puede consultarlo como lo haría con cualquier otro servicio web y construir su aplicación alrededor de él.

En realidad, puedes ver una aplicación real de este proceso en este proyecto, creada por un ingeniero que se dedica al Machine Learning:

https://www.youtube.com/watch?v=gsYEZtecXlA&feature=emb_title


Con este enfoque, puede aprender sobre las diferentes arquitecturas de modelos populares y enfoques de aprendizaje de máquinas, y para qué aplicaciones son adecuadas. Igualmente importante, aprenderá sobre la infraestructura de Machine Learning, que es vital para construir productos reales a partir de modelos.

Una vez que puedas construir algo con machine learning, entonces aprenderás la teoría


Si eres ingeniero, probablemente ya has implementado alguna forma de autenticación antes, lo que significa que (con suerte) has hecho contraseñas.

Cuando configuraste el hash de las contraseñas, ¿escribiste un algoritmo de hash personalizado? ¿Pasó semanas estudiando criptografía? ¿O simplemente usaste bcrypt?

Del mismo modo, cuando construyó su primera aplicación web, ¿pasó semanas aprendiendo sobre bases de datos? ¿Escribió la suya propia desde cero? ¿O usaste cualquier ORM que viniera con tu framework favorito?

Esta misma lógica se aplica también al aprendizaje automático. Si eres el tipo de persona a la que le gusta construir software, empieza por construir software con aprendizaje automático, y deja que las herramientas, los modelos pre-entrenados y los frameworks de machine learning abstraiga la teoría Machine Learning subyacente. Luego, si tienes curiosidad o si tu proyecto exige más complejidad, profundiza más en el tema para ver cómo funciona todo.

Thanks to Omer Spillinger, David Eliahu, and Vishal Bollu.

Disclaimer: Lo siguiente está basado en mis observaciones de los equipos de machine learning - no sobre una encuesta académica de la industria. Para el contexto, soy un colaborador de Cortex, una plataforma de código abierto para el despliegue de modelos en producción.
Join our private community in Discord

Keep up to date by participating in our global community of data scientists and AI enthusiasts. We discuss the latest developments in data science competitions, new techniques for solving complex challenges, AI and machine learning models, and much more!