Saltar al contenido principal

02 · Fundamentos de ML y LLMs

Machine learning en una lección

Cómo un programa aprende de ejemplos en lugar de reglas, y el puñado de palabras sobre el que se apoya todo el curso.

10 minCaso de estudio: Adapta (se abre en una ventana nueva)

En el software tradicional, una persona escribe las reglas: "si el pago supera 1.000, mándalo a revisión". En machine learning (ML, aprendizaje automático), nadie escribe las reglas; el sistema las deduce a partir de ejemplos. Por eso su comportamiento depende de sus datos, de cómo se midieron sus errores y de si alguien lo probó con casos que nunca vio.

Esta lección cubre las ideas sobre las que se apoya el resto del curso: cómo aprende un modelo a partir de ejemplos, qué hace el , por qué entrenar y responder solicitudes son trabajos separados, cómo distinguir aprender de memorizar y qué es, por dentro, un modelo de lenguaje. Adapta es el caso de estudio porque mantiene estas piezas visiblemente separadas.

Aprender a partir de ejemplos

Piensa en un filtro de spam. En lugar de escribir reglas, reúnes miles de mensajes ya marcados como "spam" o "no spam" y dejas que el sistema encuentre los patrones.

Lo que aprende se llama modelo: imagina una máquina con una enorme cantidad de perillas ajustables. Las perillas son sus parámetros, o pesos, simples números, a veces miles de millones.

Cada ejemplo une una entrada, como un ticket de soporte, con la respuesta correcta, su etiqueta (label), como "facturación". Un conjunto de esos pares es un dataset. Cuando cada ejemplo trae su respuesta, hablamos de aprendizaje supervisado, el caso de esta lección. Los modelos de lenguaje aprenden de forma parecida, pero nadie escribe sus etiquetas: la "respuesta" en cada punto es simplemente el siguiente trozo del texto.

Entrenar: medir los errores y corregirlos

Entrenar es buscar la posición de las perillas que hace que las respuestas del modelo coincidan con las etiquetas. Primero hace falta una forma de puntuar los errores. La loss (función de pérdida) es un solo número que dice qué tan mal lo hizo el modelo: cuanto más baja, mejor. La loss habitual en clasificadores y modelos de lenguaje castiga más los errores seguros: estar "90% seguro" de la respuesta equivocada cuesta mucho más que un error dudoso.

Después hace falta una forma de mejorar. El descenso por gradiente es como bajar una montaña con niebla: no ves el valle, pero sientes la pendiente. Para cada perilla, las matemáticas indican en qué dirección baja la loss, y el modelo da un paso pequeño hacia allí, una y otra vez. El tamaño del paso es el learning rate (tasa de aprendizaje); una pasada completa por los datos es una epoch.

  1. Ejemplouna entrada y su etiqueta
  2. Predicciónla respuesta actual del modelo
  3. Lossun número que mide cuánto se equivocó
  4. Ajusteun paso pequeño cuesta abajo en cada peso

siguiente ejemplo, epoch tras epoch

Entrenar es repetir este ciclo muchas veces. Cada vuelta mueve un poco los pesos para que la siguiente respuesta se equivoque menos.

Entrenar no es servir

Cuando termina el entrenamiento, las perillas quedan fijas y el modelo empieza a responder solicitudes. Esa fase es la , o el servicio. Las dos fases son muy distintas:

Entrenamiento Servicio
Qué hace ajusta los parámetros los usa, fijos, para responder
Frecuencia de vez en cuando continua, por solicitud
Hardware GPU casi siempre a veces basta una CPU común
Falla típica memoria agotada, no mejora demasiado lento, respuesta incorrecta

En Adapta

  1. Solicitud de entrenamientola app la encola y sigue
  2. Workertoma el trabajo y entrena en la GPU
  3. Control de evaluaciónpuntúa datos con los que no entrenó
  4. Servicioel modelo base más el nuevo adapter
La app que responde solicitudes nunca entrena. Un modelo nuevo solo llega al servicio si pasa la prueba que se describe más abajo. Fuente: Architecture

El servicio tiene su propia lección: Servir modelos.

Aprender o memorizar

Un estudiante que memoriza el examen del año pasado puede sacar la nota máxima en ese y reprobar uno nuevo. Con los modelos pasa lo mismo. Lo que importa es la : acertar con datos nuevos del mismo tipo. Por eso los datos se dividen, y cada parte tiene una sola función:

  • Conjunto de entrenamiento (train): ajusta los parámetros.
  • Conjunto de validación: compara configuraciones y decide cuándo parar.
  • Conjunto de prueba (test): se usa una vez, al final, para estimar el rendimiento real. Si sigue influyendo en las decisiones, el sistema se va ajustando a él y deja de ser una prueba.

El (sobreajuste) es memorizar en vez de aprender: la loss sobre los datos de entrenamiento sigue bajando mientras la de validación empieza a subir. El underfitting es lo contrario: el modelo ni siquiera aprendió los datos de entrenamiento. En el esquema de abajo, fíjate dónde se separan las dos líneas.

loss
 |\
 | \        ___ validación
 |  \______/
 |   \
 |    \______ entrenamiento
 +------------------ tiempo de entrenamiento
        ^ aquí conviene parar

Las métricas y comparaciones se tratan en Evaluar modelos.

Redes neuronales y transformers

Una red neuronal es un modelo hecho de capas. Cada capa hace un cálculo simple y pasa el resultado a la siguiente. Apiladas, capas simples pueden capturar patrones muy complejos, y el descenso por gradiente las ajusta todas a la vez.

Un es el tipo de red detrás de los grandes modelos de lenguaje () actuales. Su idea clave es la atención: por cada palabra que procesa, el modelo pondera cuánto importa cada palabra anterior. Así relaciona un "él" con el sustantivo correcto. Un LLM es un transformer entrenado para predecir el siguiente , una palabra o un trozo de palabra. Generar texto es repetir esa predicción, un token a la vez.

El pretraining (preentrenamiento) consiste en entrenar un modelo desde cero con una enorme cantidad de texto; requiere clústeres de GPU y que pocas organizaciones tienen, y produce un modelo base. El continúa el entrenamiento de un modelo base con un dataset pequeño para cambiar su comportamiento: formato, tono o cómo clasifica. Casi ningún equipo de producto hace pretraining. Las opciones realistas son buenos , darle conocimiento al modelo cuando llega la pregunta (Embeddings y RAG) o un fine-tuning eficiente (Fine-tuning, LoRA y QLoRA).

Modelo basepreentrenado por pocas organizaciones
  • Promptsdescribir la tarea
  • RAGdarle conocimiento en cada pregunta
  • Fine-tuningcambiar su comportamiento
Casi todos los equipos parten de un modelo base que otro preentrenó. La decisión real es cómo adaptarlo.

En la práctica

  • Define quién custodia los datos de evaluación. Si quienes entrenan también eligen y reutilizan el conjunto de prueba, los resultados se inflan sin que nadie mienta.
  • Mantén un conjunto reservado y versionado, que nunca se use para entrenar ni ajustar, y mide sobre él el modelo sin cambios como referencia.
  • Escribe el criterio de aprobación antes de entrenar, no después de ver los números.

Para profundizar

La documentación de Adapta cubre estos fundamentos con su propio código como ejemplo (en inglés):

  • Learning the system explica desde cero qué es un modelo de lenguaje, por qué el entrenamiento corre en un worker aparte y cómo el control de evaluación decide si un modelo nuevo puede servir.
  • Architecture presenta los contenedores de Adapta y sigue un trabajo de entrenamiento paso a paso, desde la cola hasta un endpoint en funcionamiento.
  • Stack and decisions explica por qué se eligió cada componente, incluidas las librerías de entrenamiento, la cola de trabajos y el control de evaluación.

Para llevar

  • Un modelo es un conjunto de parámetros ajustados a partir de ejemplos; su comportamiento depende de los datos tanto como del código.
  • Entrenar baja una loss paso a paso; servir usa el resultado ya fijo. Difieren en hardware, costo y forma de fallar.
  • Solo el rendimiento sobre datos con los que el modelo no entrenó muestra si generaliza.
  • Un LLM es un transformer entrenado para predecir el siguiente token; busca lo plausible, no lo verdadero.
  • Casi nadie hace pretraining: se elige entre prompting, RAG y fine-tuning sobre un modelo base.

Comprueba lo aprendido

¿Por qué no basta con una loss baja sobre los datos de entrenamiento?

Un modelo puede memorizar sus ejemplos de entrenamiento y puntuar bien en ellos sin aprender nada que se transfiera. Solo el rendimiento sobre datos que no participaron en el entrenamiento muestra cómo manejará entradas nuevas.

La loss de entrenamiento sigue bajando mientras la de validación sube. ¿Qué pasa y qué puedes hacer?

Es overfitting: el modelo aprende particularidades de los datos de entrenamiento. Lo habitual es parar antes, conseguir más datos o más variados, o limitar cuánto pueden cambiar el modelo o el fine-tuning.

¿Por qué conviene entrenar separado de la parte que responde las solicitudes?

El entrenamiento es largo, necesita GPU y puede quedarse sin memoria. Mantenerlo aparte evita que frene o bloquee las solicitudes en curso, y permite que el servicio siga funcionando en una máquina sin GPU.