Construyendo Mejores Sistemas de ML – Capítulo 3 Modelado. Que comience la diversión
'Building Better ML Systems - Chapter 3 Modeling. Let the fun begin.
Acerca de baselines, seguimiento de experimentos, conjuntos de pruebas adecuados y métricas. Acerca de hacer que el algoritmo funcione.
Hola de nuevo. Me alegra verte aquí nuevamente. Aprecio mucho tu deseo de convertirte en un mejor profesional, hacer un mejor trabajo y construir mejores sistemas de aprendizaje automático. ¡Eres genial, sigue así!
En esta serie, hago todo lo posible para ayudarte a dominar el arte, la ciencia y, a veces, la magia de diseñar y construir sistemas de aprendizaje automático. Aquí hablamos sobre el valor comercial y los requisitos, la recopilación y etiquetado de datos, el desarrollo de modelos, el seguimiento de experimentos, la evaluación en línea y fuera de línea, la implementación, el monitoreo, el reentrenamiento y mucho más.
Este es el tercer capítulo y está dedicado al desarrollo de modelos. Un algoritmo de aprendizaje automático es solo una pequeña parte del sistema de aprendizaje automático. Un algoritmo perfectamente preciso sin un sistema bien diseñado no servirá a tus clientes y no generará dinero para tu empresa. En esta publicación, en lugar de darte una visión general de los algoritmos de aprendizaje automático, te mostraré una perspectiva diferente: cómo seleccionar, desarrollar y evaluar algoritmos teniendo en cuenta que el objetivo principal del algoritmo es aportar valor al negocio. Al final del día, no importa realmente si resolviste el problema comercial con regresión lineal o con la red neuronal más avanzada.

Antes de continuar, hagamos un breve resumen de lo que ya hemos aprendido.
El primer capítulo trató sobre la planificación. Aprendimos que cada proyecto debe comenzar con un plan porque los sistemas de aprendizaje automático son demasiado complejos para implementar de manera improvisada. Revisamos el ciclo de vida del proyecto de aprendizaje automático, discutimos por qué y cómo estimar el valor comercial del proyecto, cómo recopilar los requisitos y luego reevaluar con una mente fría si realmente se necesita el aprendizaje automático. Aprendimos cómo comenzar de manera pequeña y fallar rápidamente utilizando conceptos como “PoC” y “MVP”. Y finalmente, hablamos sobre la importancia de los documentos de diseño durante la etapa de planificación.
- Imagenología de Inteligencia Artificial Un Examen Académico de las ...
- Juliette Powell y Art Kleiner, autores de la serie de entrevistas E...
- LEER Avatares Avatares Realistas Controlables por Emociones y con A...
El segundo capítulo trató sobre los datos. Discutimos una nueva tendencia en la industria: la IA centrada en los datos, un enfoque para construir sistemas de aprendizaje automático que considera que los datos limpios son mucho más importantes que los algoritmos avanzados de aprendizaje automático. Hablamos sobre los flujos de datos, que están diseñados para organizar el flujo de datos caóticos y no estructurados para que puedan ser utilizados para análisis. Aprendimos que los datos de entrenamiento deben ser relevantes, uniformes, representativos y completos, ya que los modelos construyen su comprensión del mundo basándose en estos datos. Revisamos dos tipos de etiquetas: humanas y naturales, y navegamos a través del proceso complejo, lento y costoso de obtener etiquetas humanas, y discutimos las mejores prácticas para hacer que este proceso sea menos doloroso. Por último, hablamos sobre una alternativa a los datos reales y las etiquetas humanas: los datos sintéticos.
Si por casualidad te perdiste las publicaciones anteriores, te animo a que las leas antes de continuar. Te esperaré aquí mismo.
Y ahora, que comience la diversión.
Cómo seleccionar un algoritmo de aprendizaje automático
No hay un algoritmo que se ajuste a todos los problemas. Necesitas probar varios enfoques y conocer muy bien tus datos y tu dominio hasta encontrar algo que funcione.
Piensa, haz lluvia de ideas, habla con tus colegas, pregunta a ChatGPT y luego anota tres enfoques que vas a probar: 1) algo muy simple; 2) algo muy popular; 3) algo nuevo y creativo.
- Algo muy simple. Cualquier complejidad introducida en el algoritmo debe estar justificada. Comienza con un enfoque simple (incluso no de aprendizaje automático), evalúalo y úsalo como base de comparación para todos tus otros modelos.
- Algo muy popular. Si ves, escuchas y lees que muchas personas están resolviendo la misma tarea comercial con un algoritmo específico, asegúrate de agregarlo a tu lista de experimentos. ¡Aprovecha la inteligencia colectiva! Siempre tengo grandes expectativas sobre los enfoques populares y en la mayoría de los casos, funcionan bastante bien.
- Algo nuevo y creativo. Solo pruébalo. Tu jefe y tu empresa estarán contentos si construyes una ventaja competitiva al superar los enfoques populares típicos.
Palabra de precaución: No reinventes la rueda. Hay cientos de bibliotecas y repositorios de código abierto que tienen implementaciones para la mayoría de los algoritmos, estrategias de muestreo de datos o bucles de entrenamiento que puedas imaginar. No escribas tu propio algoritmo de agrupamiento K-means, utiliza el de scikit-learn. No escribas ResNet50 desde cero, utiliza el de PyTorch. Antes de implementar el último artículo, revisa PapersWithCode, apuesto a que alguien ya lo hizo.
Hacer investigación e inventar algo nuevo es emocionante. Implementar algoritmos desde cero, donde entiendes cada línea, es tentador. Sin embargo, la investigación encaja bien solo en universidades y grandes empresas tecnológicas. Para las startups, cada dólar cuenta, por lo que simplemente no pueden permitirse invertir en algo que tenga pocas posibilidades de tener éxito (y la investigación es literalmente sobre 100 intentos y 1 éxito).
Ten cuidado con el “estado del arte”. Imagina que estás haciendo detección de objetos usando YOLOv7 y luego escuchas que se lanzó YOLOv8, que se espera que sea aún mejor. ¿Significa esto que necesitas actualizar todos tus flujos de producción para admitir YOLOv8? No necesariamente.
En la mayoría de los casos, “mejor” significa una mejora del 1-2% en un conjunto de datos de referencia estático, como COCO. La precisión del modelo en tus datos puede ser mejor, insignificativamente mejor o incluso peor, simplemente porque tus datos y tu problema empresarial son diferentes en todos los sentidos. Además, como se menciona en el Capítulo 2 de esta serie, debes recordar: mejorar los datos conduce a un aumento más significativo en la precisión del modelo que mejorar el algoritmo. Encuentra formas de limpiar los datos de entrenamiento y verás un aumento del 5-10% en la precisión.
Cómo desarrollar un algoritmo de aprendizaje automático
Primero, obtén una línea base. Una línea base es un modelo con el que vas a competir. Hay dos opciones lógicas para la línea base:
- Un modelo existente en producción (si tienes uno). Queremos mejorar el modelo existente, por eso necesitamos hacer una comparación con él.
- Un modelo muy simple que sea fácil de implementar. Si la tarea empresarial se puede resolver de manera sencilla, ¿por qué complicarse entrenando modelos complejos? Dedica un par de días a buscar una solución sencilla e implementarla.
Y ahora viene la experimentación. Construye todos tus experimentos con el fin de mejorar la línea base. ¿Encontraste un algoritmo prometedor? Genial, evalúalo y compáralo con la línea base. ¿Tu modelo es mejor? ¡Felicidades, ahora es tu nueva línea base, piensa en experimentos para mejorarlo aún más!

El desarrollo del algoritmo es un proceso iterativo. Terminas cuando encuentras un algoritmo lo suficientemente bueno para producción O cuando se acaba el tiempo. Ambos escenarios son posibles.
Naturalmente, la mayoría de las ideas que pruebes fracasarán. Así que no te desanimes por eso, y no lo tomes como algo personal. Todos trabajamos de esa manera: encontramos una buena idea, la probamos, vemos que la idea en realidad es mala, y se nos ocurre una nueva idea, con suerte, buena esta vez, la probamos, vemos que tampoco funciona, encontramos una nueva idea, …
Mi consejo aquí es: establece un límite de tiempo para los esfuerzos invertidos en una sola idea. Si no puedes hacer que la idea funcione dentro de N días (elige tu N de antemano), dale un cierre y pasa a otra idea. Si realmente quieres tener éxito, debes probar muchas ideas diferentes, porque, como dije antes, la mayoría de las ideas que pruebes fracasarán.
Conoce realmente tus datos. Visualiza muestras y etiquetas, traza distribuciones de características, asegúrate de entender los significados de las características, explora muestras de cada clase, comprende la estrategia de recopilación de datos, lee las instrucciones de etiquetado de datos dadas a los anotadores, … Capacítate para predecir lo que se espera que el modelo prediga. Si quieres crear un buen algoritmo, comienza a pensar como un algoritmo (no estoy bromeando aquí). Todo esto te ayudará a encontrar problemas con los datos, depurar el modelo y proponer ideas para experimentar.
Divide los datos en partes de entrenamiento, validación y prueba. Entrena en el conjunto de entrenamiento, elige hiperparámetros en el conjunto de validación y evalúa en el conjunto de prueba. Asegúrate de que no haya superposición o filtración de datos entre las divisiones. Para obtener más información sobre esto, consulta la publicación: División de entrenamiento, validación y prueba para el aprendizaje automático de Jacob Solawetz.
Camino a seguir: toma un modelo de código abierto, ejecútalo con los parámetros predeterminados y realiza una sintonización de hiperparámetros. Utiliza algoritmos de bibliotecas de ML, como scikit-learn, PyTorch, OpenCV, o de un repositorio de GitHub que tenga muchas estrellas, un buen readme y una licencia que permita utilizarlo con fines comerciales. Entrena con los hiperparámetros predeterminados en tus datos y evalúa. Los hiperparámetros predeterminados del algoritmo se seleccionan para maximizar la precisión en un conjunto de datos de referencia (ImageNet, COCO), por lo que en la mayoría de los casos no se adaptan bien a tus datos y a tu tarea. Aprende a fondo qué significa cada hiperparámetro y cómo afecta al entrenamiento/inferencia, para poder realizar una optimización de hiperparámetros. Los enfoques típicos para la optimización de hiperparámetros son Grad Student Descent, búsquedas aleatorias/rejilla/bayesianas y algoritmos evolutivos. Nunca digas que el algoritmo no funciona antes de realizar una optimización de hiperparámetros. Para obtener más información, consulta esta publicación de Pier Paolo Ippolito: Optimización de hiperparámetros.
Trabaja aún más con tus datos: realiza ingeniería de características y aumentos de datos. La ingeniería de características se refiere a transformar las características existentes y crear nuevas. La ingeniería de características es una habilidad crucial, por lo que te remito a dos excelentes publicaciones donde puedes adquirirla: – Técnicas fundamentales de ingeniería de características para el aprendizaje automático por Emre Rençberoğlu – 4 consejos para la ingeniería avanzada de características y preprocesamiento por Maarten Grootendorst
El aumento de datos es una técnica para crear nuevas muestras de entrenamiento a partir de los datos que tienes, de modo que durante el entrenamiento el modelo “vea” más muestras. Aumentar el conjunto de entrenamiento es la forma más sencilla de aumentar la precisión del modelo, por lo que siempre debes realizar aumentos de datos cuando sea posible. Por ejemplo, en el ámbito de la visión por computadora, literalmente nadie entrena modelos sin realizar aumentos básicos de imágenes, como rotaciones, escalado, recortes, volteos, etc. Para obtener más detalles, consulta mi publicación: Guía completa de aumento de datos para visión por computadora.
Si tienes curiosidad por saber cómo se realizan los aumentos en el procesamiento del lenguaje natural, lee Aumento de datos en NLP: mejores prácticas de un maestro de Kaggle por Shahul ES.
El aprendizaje por transferencia es tu amigo. El aprendizaje sin ejemplos es tu mejor amigo. El aprendizaje por transferencia es una técnica popular para aumentar la precisión del modelo. Prácticamente, significa que tomas un modelo preentrenado en algún conjunto de datos y continúas entrenándolo utilizando tus datos (“transferencia de conocimiento”). Incluso los pesos de conjuntos de datos como COCO o ImageNet pueden mejorar tu modelo, aunque tus datos parezcan muy diferentes a las imágenes de COCO/ImageNet.
El aprendizaje sin ejemplos es un algoritmo que funciona con tus datos sin necesidad de entrenamiento. ¿Cómo? Por lo general, es un modelo preentrenado en un enorme conjunto de datos compuesto por miles de millones de muestras. Tus datos pueden parecerse a algo en lo que este modelo ya fue entrenado; y el modelo ha “visto” tantas muestras que puede generalizar bien a nuevos datos. El aprendizaje sin ejemplos puede parecer un sueño, sin embargo, existen algunos supermodelos disponibles: Segment Anything, la mayoría de los modelos de Word Embeddings, ChatGPT.

Aún queda mucho por decir sobre el desarrollo de modelos, pero debemos concluir para reservar algo de tiempo para los temas de seguimiento de experimentos y evaluación. En caso de que todavía tengas hambre de conocimiento, consulta esta excelente publicación de Andrej Karpathy: Una receta para entrenar redes neuronales.
Seguimiento de experimentos
El seguimiento de experimentos es el proceso de guardar información sobre el experimento en un panel de control o archivo, para poder revisarlo en el futuro. Es como el registro en el desarrollo de software. Ejemplos de lo que puedes rastrear son los enlaces a los conjuntos de datos de entrenamiento y prueba, los hiperparámetros, el hash de git, las métricas en los datos de prueba, entre otros.
Debes rastrear todos los experimentos que realices. Si por alguna razón tu equipo no lo hace, establece una llamada de equipo en este momento para discutir la importancia de ello. Me lo agradecerás más adelante 🙂
Entonces, ¿por qué queremos hacer el seguimiento de experimentos?
- Para comparar diferentes experimentos entre sí. Cuando desarrollas un modelo, entrenas y evalúas muchos algoritmos diferentes, pruebas diferentes técnicas de preprocesamiento de datos, utilizas diferentes hiperparámetros y aplicas varios trucos creativos. Al final del día, quieres ver lo que intentaste, lo que funcionó y lo que dio la mejor precisión. Tal vez más adelante quieras volver a algún experimento y revisar sus resultados con una mente fresca. El desarrollo del modelo puede durar semanas o incluso meses, por lo que sin un seguimiento adecuado de los experimentos simplemente olvidarás lo que hiciste y tendrás que repetir los experimentos.
- Para reproducir los experimentos. Si no puedes reproducirlo, no cuenta. Compruébalo por ti mismo: ¿puedes volver a tu experimento más exitoso, ejecutarlo de nuevo y obtener la misma precisión? Si la respuesta es “NO”, es posible que no estés controlando la versión del código y los datos, no guardes todos los hiperparámetros o no establezcas una semilla aleatoria. La importancia de establecer una semilla aleatoria se explica bien en una publicación de Cecelia Shao: Cómo establecer adecuadamente la semilla aleatoria en experimentos de ML. No es tan simple como puedas imaginar.
- Para depurar el experimento. A veces, el experimento no funciona: un algoritmo no converge, las predicciones parecen extrañas, la precisión es similar a la aleatoria. Es literalmente imposible entender por qué falló si no se guarda información sobre el experimento. Una lista guardada de hiperparámetros, visualización de muestras y aumentos, gráficos de pérdida, etc., pueden darte alguna pista de dónde está el problema.
Ahora que estás convencido de que el seguimiento de experimentos es importante, hablemos de cómo hacerlo en la práctica.
Existen docenas de herramientas gratuitas y de pago para el seguimiento de experimentos, elige algo que se ajuste a tus requisitos y presupuesto. Probablemente, la más popular sea Weights&Biases; he trabajado mucho con ella y es buena. Para obtener una revisión de otras herramientas, echa un vistazo a los 15 mejores herramientas para el seguimiento y gestión de experimentos de ML de Patrycja Jenkner.
Un experimento de Machine Learning consiste en datos, código e hiperparámetros. Asegúrate de utilizar herramientas de control de versiones para el código, como Github o Gitlab, y realiza confirmaciones de todos tus cambios durante el desarrollo. Es importante poder volver a versiones anteriores del código para volver a ejecutar tus experimentos antiguos. Controla la versión de tus datos. La forma más sencilla y popular es crear una carpeta nueva o un archivo nuevo en el disco (idealmente en almacenamiento en la nube, como Amazon S3 o Google Cloud Storage) para cada nueva versión del conjunto de datos. Algunas personas utilizan una herramienta llamada Data Version Control (DVC).

¿Qué exactamente deberías rastrear para el experimento? Bueno, no es mala idea rastrear todo lo que puedas 🙂 La mayoría de las veces no utilizarás toda esa información a menos que un experimento haya fallado y haya fallado realmente mal.
Aquí tienes una lista de las cosas que puedes considerar rastrear:
- Hash de confirmación de Git
- Enlace a los conjuntos de datos de entrenamiento, validación y prueba
- Hiperparámetros y sus cambios a lo largo del tiempo (arquitectura del modelo, tasa de aprendizaje, tamaño del lote, aumentos de datos, …)
- Gráficos de pérdida en los conjuntos de entrenamiento y validación
- Gráficos de métricas en los conjuntos de entrenamiento y validación
- Métricas en el conjunto de prueba
- Visualización de muestras de entrenamiento con etiquetas (con y sin aplicar aumentos)
- Visualización de errores en el conjunto de prueba
- Entorno (SO, versión de CUDA, versiones de paquetes, variables de entorno)
- Velocidad de entrenamiento, uso de memoria, utilización de CPU/GPU
Configura un seguimiento de experimentos una vez y disfruta de sus beneficios para siempre.
Evaluación del modelo
Antes de que el modelo se implemente en producción, debe ser evaluado minuciosamente. Esta evaluación se denomina “offline”. La evaluación “online”, en cambio, se trata de comprobar el modelo que ya está en funcionamiento en producción. La evaluación online se discutirá en el próximo capítulo de esta serie, y hoy nos centraremos únicamente en la evaluación offline.
Para realizar una evaluación offline necesitamos una métrica y un conjunto de datos.
El modelo se evalúa en el conjunto de prueba, aquel que has apartado durante el entrenamiento y la afinación de hiperparámetros. Se asume que 1) el conjunto de prueba es lo suficientemente grande y extremadamente limpio; 2) el modelo nunca ha visto los datos de prueba; 3) los datos de prueba representan datos de producción. Si se viola una de estas suposiciones, la evaluación se realiza de forma incorrecta y existe un alto riesgo de obtener una métrica excesivamente optimista e implementar un modelo que es malo.
La evaluación en un conjunto de prueba pequeño podría darte una buena métrica simplemente por casualidad. La evaluación en datos sucios no mostrará el verdadero rendimiento del modelo. Si bien tener errores en el conjunto de entrenamiento es más tolerante (puedes entrenar con etiquetas limpias, etiquetas sucias o incluso sin etiquetas), tener errores en el conjunto de prueba puede ser perjudicial. Nota importante: también se necesita un conjunto de prueba etiquetado para modelos no supervisados. De lo contrario, ¿cómo sabrías si tu modelo es lo suficientemente bueno?
Asegúrate de que tu modelo no haya “visto” los datos de prueba. Siempre elimina duplicados para que la misma muestra no termine en ambos conjuntos de entrenamiento y prueba. No dividas los datos al azar, utiliza una división basada en el tiempo o en el usuario en su lugar. La división basada en el tiempo significa colocar los datos más antiguos en el conjunto de entrenamiento y los más nuevos en el conjunto de prueba. La división basada en el usuario significa tener todos los datos del mismo usuario en el mismo conjunto. Y ten mucho cuidado con las filtraciones de datos, más detalles sobre eso en Data Leakage in Machine Learning: How it can be detected and minimize the risk de Prerna Singh.
Una métrica es un número que se supone que se correlaciona con el verdadero rendimiento del modelo: cuanto mayor sea el número, mejor será el modelo. Puedes elegir una o varias métricas. Por ejemplo, las métricas típicas para una tarea de clasificación son precisión, exactitud, sensibilidad y puntuación F1. Elige algo simple y, idealmente, explicativo, para que los gerentes y clientes no técnicos puedan entenderlo.
A continuación se presentan excelentes publicaciones de Shervin Minaee sobre métricas para diversas tareas y dominios: – 20 métricas populares de aprendizaje automático. Parte 1: Métricas de evaluación de clasificación y regresión – 20 métricas populares de aprendizaje automático. Parte 2: Métricas de clasificación, estadísticas y de ranking
Utilice métricas basadas en segmentos y evalúe su modelo para cada segmento de datos que pueda pensar (a menos que desee verse involucrado en un escándalo como “La función de fondo virtual de Zoom no está diseñada para rostros negros”). Por ejemplo, los sistemas de detección facial deben evaluarse por separado para personas de diversas razas, géneros y edades. Los modelos de comercio electrónico que vale la pena evaluar para escritorio versus móvil, diversos países y navegadores. Verifique si cada segmento está bien representado en el conjunto de pruebas. Las métricas basadas en segmentos también ayudan con el desequilibrio de clases: ver las precisiones y recuperaciones para cada clase por separado ayuda mucho más que una precisión/recuperación total.
Otra forma de evitar escándalos (esta vez es “El nuevo sistema de calificación crediticia del Banco ABC discrimina a las mujeres solteras”) es utilizar pruebas de comportamiento. Un excelente artículo, Más allá de la precisión: Pruebas de comportamiento de modelos de procesamiento de lenguaje natural con CheckList, sugiere utilizar pruebas de funcionalidad mínima, invarianza y expectativa direccional además de métricas numéricas. Aunque el artículo se centra en el procesamiento de lenguaje natural, este tipo de pruebas se puede aplicar fácilmente a datos tabulares e imágenes.
En el ejemplo de “El nuevo sistema de calificación crediticia del Banco ABC discrimina a las mujeres solteras”, una prueba de comportamiento de invarianza podría ser de gran ayuda. Mantenga todas las características iguales pero cambie el estado civil y el género y verifique si las predicciones del modelo cambiaron. Si observa una diferencia significativa en la predicción (cuando debería ser “invariante”), probablemente su modelo haya absorbido sesgos en los datos de entrenamiento; esto debe corregirse, por ejemplo, eliminando por completo las características sensibles (propensas a la discriminación) de las entradas del modelo.
Y finalmente, visualice los errores. Encuentre muestras en el conjunto de pruebas para las cuales el modelo cometió un error; visualícelas y analice por qué sucedió esto. ¿Es porque el conjunto de pruebas todavía está sucio? ¿Hay suficientes muestras similares en el conjunto de entrenamiento? ¿Hay algún patrón en los errores del modelo? Este análisis ayuda a encontrar posibles errores de etiquetado en el conjunto de pruebas y errores durante el entrenamiento, así como a generar ideas sobre cómo mejorar aún más el rendimiento del modelo.

Conclusión
En este capítulo, hemos aprendido cómo desarrollar modelos teniendo en cuenta que el algoritmo de aprendizaje automático es solo una PARTE del sistema de aprendizaje automático. El desarrollo del modelo comienza con la creación de un modelo de referencia simple y continúa con mejoras iterativas sobre él. Llegamos a la forma más eficiente de proceder: tomar un modelo de código abierto y realizar experimentos en torno a él, en lugar de reinventar la rueda o caer en el agujero de investigación. Discutimos las trampas de los algoritmos “de última generación” y los beneficios de las aumentaciones de datos y el aprendizaje por transferencia. Estamos de acuerdo en la importancia del seguimiento de experimentos y aprendimos cómo configurarlo. Y finalmente, hablamos sobre la evaluación sin conexión: selección de métricas, conjuntos de pruebas adecuados, evaluación basada en segmentos y pruebas de comportamiento.
Casi hemos terminado, queda un capítulo más. En la próxima (última) publicación, aprenderá sobre la implementación, el monitoreo, la evaluación en línea y la reentrenamiento, la pieza final de conocimiento que lo ayudará a construir mejores sistemas de aprendizaje automático.
La gran final estará disponible pronto. Suscríbase para mantenerse informado.