Aprendizaje Automático Intuitivo

'Aprendizaje Automático Intuitivo' can be condensed to 'Intuitive Machine Learning'.

ML: todo lo que necesitas saber sin matemáticas complicadas

Lo que podrías pensar que es ML... (Foto tomada por Justin Cheigh en Billund, Dinamarca)

¿Qué es el aprendizaje automático?

Claro, la teoría real detrás de modelos como ChatGPT es admisiblemente muy difícil, ¡pero la intuición subyacente detrás del aprendizaje automático (ML) es, bueno, intuitiva! Entonces, ¿qué es ML?

El aprendizaje automático permite a las computadoras aprender utilizando datos.

Pero, ¿qué significa esto? ¿Cómo utilizan las computadoras los datos? ¿Qué significa que una computadora aprenda? Y en primer lugar, ¿a quién le importa? Comencemos con la última pregunta.

Hoy en día, los datos están por todas partes. Por lo tanto, es cada vez más importante utilizar herramientas como el ML, ya que puede ayudar a encontrar patrones significativos en los datos sin necesidad de programarse explícitamente para hacerlo. En otras palabras, al utilizar el ML, podemos aplicar algoritmos genéricos a una amplia variedad de problemas exitosamente.

Existen algunas categorías principales de aprendizaje automático, siendo algunos de los tipos principales el aprendizaje supervisado (SL), el aprendizaje no supervisado (UL) y el aprendizaje por refuerzo (RL). Hoy solo describiré el aprendizaje supervisado, aunque en publicaciones posteriores espero poder ampliar más sobre el aprendizaje no supervisado y el aprendizaje por refuerzo.

Speedrun de SL en 1 minuto

Mira, entiendo que es posible que no quieras leer todo este artículo. En esta sección te enseñaré lo básico (que para muchas personas es todo lo que necesitas saber) antes de profundizar en las secciones posteriores.

El aprendizaje supervisado implica aprender a predecir una etiqueta utilizando diferentes características.

Imagina que estás tratando de encontrar una forma de predecir el precio de los diamantes utilizando características como el quilate, el corte, la claridad y más. Aquí, el objetivo es aprender una función que tome como entrada las características de un diamante específico y devuelva el precio asociado.

Así como los humanos aprenden mediante ejemplos, en este caso las computadoras harán lo mismo. Para poder aprender una regla de predicción, este agente de ML necesita “ejemplos etiquetados” de diamantes, que incluyan tanto sus características como su precio. La supervisión se produce ya que se te proporciona la etiqueta (precio). En realidad, es importante tener en cuenta que tus ejemplos etiquetados son realmente verdaderos, ya que es una suposición del aprendizaje supervisado que los ejemplos etiquetados son “verdad absoluta”.

Bien, ahora que hemos repasado los conceptos más fundamentales, podemos profundizar un poco más en todo el proceso de la ciencia de datos/ML.

Configuración del problema

Usemos un ejemplo extremadamente relacionable, inspirado en este libro de texto. Imagina que estás varado en una isla, donde la única comida es una fruta rara conocida como “Melón-Justin”. Aunque nunca has comido Melón-Justin en particular, has comido muchas otras frutas y sabes que no quieres comer frutas que se hayan echado a perder. También sabes que normalmente puedes saber si una fruta se ha echado a perder al mirar el color y la firmeza de la fruta, así que extrapolas y asumes que esto también se cumple para el Melón-Justin.

En términos de ML, utilizaste conocimiento previo de la industria para determinar dos características (color, firmeza) que crees que predecirán con precisión la etiqueta (si el Melón-Justin se ha echado a perder o no).

Pero, ¿cómo sabrás qué color y qué firmeza corresponden a que la fruta esté echada a perder? ¿Quién sabe? Solo necesitas probarlo. En términos de ML, necesitamos datos. Más específicamente, necesitamos un conjunto de datos etiquetados que consista en Melones-Justin reales y su etiqueta asociada.

Recopilación/Procesamiento de datos

Así que pasas los siguientes días comiendo melones y registrando el color, la firmeza y si el melón estaba echado a perder o no. Después de unos días dolorosos de comer constantemente melones que se han echado a perder, tienes el siguiente conjunto de datos etiquetados:

Código por Justin Cheigh

Cada fila es una sandía específica y cada columna es el valor de la característica/etiqueta para la sandía correspondiente. Pero nota que tenemos palabras, ya que las características son categóricas en lugar de numéricas.

Realmente necesitamos números para que nuestra computadora los procese. Existen varias técnicas para convertir características categóricas en características numéricas, que van desde la codificación one-hot hasta los embeddings y más allá.

Lo más simple que podemos hacer es convertir la columna “Etiqueta” en una columna “Buena”, que tiene el valor de 1 si la sandía es buena y 0 si es mala. Por ahora, asumamos que hay una metodología para convertir el color y la firmeza a una escala de -10 a 10 de manera sensata. Como un punto extra, piensa en las suposiciones de poner una característica categórica como el color en esa escala. Después de este preprocesamiento, nuestro conjunto de datos podría verse así:

Código de Justin Cheigh

Ahora tenemos un conjunto de datos etiquetado, lo que significa que podemos usar un algoritmo de aprendizaje supervisado. Nuestro algoritmo debe ser un algoritmo de clasificación, ya que estamos prediciendo una categoría buena (1) o mala (0). La clasificación está en oposición a los algoritmos de regresión, que predicen un valor continuo como el precio de un diamante.

Análisis Exploratorio de Datos

Pero, ¿qué algoritmo usar? Hay varios algoritmos de clasificación supervisada, que van desde la regresión logística básica hasta algunos algoritmos de aprendizaje profundo más avanzados. Bueno, primero echemos un vistazo a nuestros datos realizando un análisis exploratorio de datos (EDA):

Código de Justin Cheigh

La imagen anterior es una representación del espacio de características; tenemos dos características y simplemente colocamos cada ejemplo en un gráfico con los dos ejes siendo las dos características. Además, hacemos el punto de color morado si la sandía asociada es buena, y lo hacemos amarillo si es mala. ¡Claramente, con un poco de EDA, hay una respuesta obvia!

Código de Justin Cheigh

Probablemente deberíamos clasificar todos los puntos dentro del círculo rojo como sandías buenas, mientras que los que están fuera del círculo deberían ser clasificados como sandías malas. Intuitivamente, ¡esto tiene sentido! Por ejemplo, no quieres una sandía que esté dura como una roca, pero tampoco quieres que esté excesivamente blanda. Más bien, quieres algo intermedio, y lo mismo probablemente sea cierto para el color también.

Determinamos que queremos un límite de decisión que sea un círculo, pero esto se basó únicamente en la visualización preliminar de los datos. ¿Cómo determinaríamos esto sistemáticamente? Esto es especialmente relevante en problemas más grandes, donde la respuesta no es tan simple. Imagina cientos de características. No hay forma posible de visualizar el espacio de características de 100 dimensiones de manera razonable.

¿Qué estamos aprendiendo?

El primer paso es definir tu modelo. Hay toneladas de modelos de clasificación. Dado que cada uno tiene su propio conjunto de suposiciones, es importante tratar de hacer una buena elección. Para enfatizar esto, comenzaré haciendo una elección realmente mala.

Una idea intuitiva es hacer una predicción ponderando cada uno de los factores:

Fórmula de Justin Cheigh usando Fun de Embed

Por ejemplo, supongamos que nuestros parámetros w1 y w2 son 2 y 1, respectivamente. También supongamos que nuestra sandía de entrada Justin tiene un Color = 4 y una Firmeza = 6. Entonces nuestra predicción Buena = (2 x 4) + (1 x 6) = 14.

Nuestra clasificación (14) ni siquiera es una de las opciones válidas (0 o 1). Esto se debe a que en realidad este es un algoritmo de regresión. De hecho, es un caso simple del algoritmo de regresión más simple: regresión lineal.

Entonces, convirtamos esto en un algoritmo de clasificación. Una forma simple sería utilizar la regresión lineal y clasificar como 1 si la salida es mayor que un término de sesgo b. De hecho, podemos simplificar agregando un término constante a nuestro modelo de tal manera que clasifiquemos como 1 si la salida es mayor que 0.

En matemáticas, dejamos que PRED = w1 * Color + w2 * Firmeza + b. Luego obtenemos:

Fórmula por Justin Cheigh utilizando Embed Fun

Esto es ciertamente mejor, ya que al menos estamos realizando una clasificación, pero hagamos una gráfica de PRED en el eje x y nuestra clasificación en el eje y:

Código por Justin Cheigh

Esto es un poco extremo. Un ligero cambio en PRED podría cambiar por completo la clasificación. Una solución es que la salida de nuestro modelo represente la probabilidad de que el Justin-Melon sea bueno, lo cual podemos hacer suavizando la curva:

Código por Justin Cheigh

Esta es una curva sigmoide (o una curva logística). Entonces, en lugar de tomar PRED y aplicar esta activación por partes (Bueno si PRED ≥ 0), podemos aplicar esta función de activación sigmoide para obtener una curva suavizada como la de arriba. En general, nuestro modelo logístico se ve así:

Fórmula por Justin Cheigh utilizando Embed Fun

Aquí, sigma representa la función de activación sigmoide. Genial, así que tenemos nuestro modelo, ¡y solo necesitamos descubrir qué pesos y sesgos son los mejores! Este proceso se conoce como entrenamiento.

Entrenamiento del Modelo

Genial, ¡así que todo lo que necesitamos hacer es descubrir qué pesos y sesgos son los mejores! Pero esto es mucho más fácil decirlo que hacerlo. Hay un número infinito de posibilidades, ¿y qué significa realmente “mejor”?

Comenzamos con la última pregunta: ¿qué es lo mejor? Aquí hay una forma simple, pero poderosa: los pesos más óptimos son aquellos que obtienen la mayor precisión en nuestro conjunto de entrenamiento.

Entonces, solo necesitamos descubrir un algoritmo que maximice la precisión. Sin embargo, matemáticamente es más fácil minimizar algo. En pocas palabras, en lugar de definir una función de valor, donde un valor más alto es “mejor”, preferimos definir una función de pérdida, donde una pérdida más baja es mejor. Aunque las personas suelen utilizar algo como la entropía cruzada binaria para la pérdida de clasificación (binaria), simplemente usaremos un ejemplo simple: minimizar el número de puntos clasificados incorrectamente.

Para hacer esto, utilizamos un algoritmo conocido como descenso de gradiente. A grandes rasgos, el descenso de gradiente funciona como un esquiador miope tratando de bajar una montaña. Una propiedad importante de una buena función de pérdida (y una que realmente carece nuestra función de pérdida rudimentaria) es suavidad. Si trazaras nuestro espacio de parámetros (valores de parámetros y pérdida asociada en el mismo gráfico), el gráfico se parecería a una montaña.

Entonces, primero comenzamos con parámetros aleatorios y, por lo tanto, probablemente comenzamos con una mala pérdida. Al igual que un esquiador tratando de bajar la montaña lo más rápido posible, el algoritmo busca en todas las direcciones, tratando de encontrar la forma más empinada de avanzar (es decir, cómo cambiar los parámetros para reducir la pérdida al máximo). Pero, el esquiador es miope, por lo que solo mira un poco en cada dirección. Iteramos este proceso hasta que lleguemos al fondo (personas con buen ojo pueden notar que en realidad podríamos terminar en un mínimo local). En este punto, los parámetros con los que terminamos son nuestros parámetros entrenados.

Una vez que entrenas tu modelo de regresión logística, te das cuenta de que tu rendimiento todavía es muy malo y que tu precisión es solo del 60% (¡apenas mejor que adivinar!). Esto se debe a que estamos violando una de las suposiciones del modelo. La regresión logística matemáticamente solo puede generar un límite de decisión lineal, ¡pero sabíamos por nuestro AED que el límite de decisión debería ser circular!

Con esto en mente, pruebas diferentes modelos más complejos y obtienes uno que logra una precisión del 95%. Ahora tienes un clasificador completamente entrenado capaz de diferenciar entre buenos Justin-Melons y malos Justin-Melons, ¡y finalmente puedes comer toda la fruta deliciosa que desees!

Conclusión

Demos un paso atrás. En unos 10 minutos, aprendiste mucho sobre aprendizaje automático, incluido lo que es básicamente toda la tubería de aprendizaje supervisado. Entonces, ¿qué sigue?

Bueno, ¡eso depende de ti! Para algunos, este artículo fue suficiente para obtener una imagen de alto nivel de lo que realmente es el ML. Para otros, este artículo puede dejar muchas preguntas sin respuesta. ¡Eso es genial! Quizás esta curiosidad te permita explorar aún más este tema.

Por ejemplo, en el paso de recopilación de datos asumimos que simplemente comerías un montón de melones durante unos días, sin tener en cuenta ninguna característica específica. Esto no tiene sentido. Si comes un melón verde y blando llamado Justin-Melon y te pone violentamente enfermo, probablemente te alejarías de esos melones. En realidad, aprenderías a través de la experiencia, actualizando tus creencias a medida que avanzas. Este marco es más similar al aprendizaje por refuerzo.

Y ¿qué pasaría si supieras que un solo Justin-Melon malo podría matarte al instante y que sería demasiado arriesgado probar uno sin estar seguro? Sin estas etiquetas, no podrías realizar un aprendizaje supervisado. Pero tal vez haya una forma de obtener información sin etiquetas. Este marco es más similar al aprendizaje no supervisado.

En las próximas publicaciones del blog, espero ampliar de manera análoga sobre el aprendizaje por refuerzo y el aprendizaje no supervisado.

¡Gracias por leer!