Cómo aprenden los modelos: el viaje de los números hacia la inteligencia
Hemos visto cómo se construye un transformer, cómo se tokeniza el texto, y cómo se preparan los datos. Pero hay una pregunta fundamental que aún no hemos respondido: ¿cómo pasa un modelo de ser un montón de números aleatorios a generar texto coherente?
La respuesta combina tres ingredientes: una función de pérdida que cuantifica qué tan equivocado está el modelo, un algoritmo de optimización (descenso de gradiente) que ajusta los parámetros para reducir esa pérdida, y una regla de cálculo (retropropagación) que reparte la “culpa” entre todos los parámetros de forma eficiente.
En este capítulo abrimos esta caja negra y vemos, paso a paso, cómo un modelo aprende. Spoiler: no es magia, es cálculo diferencial aplicado a escala masiva.
Un modelo es, literalmente, una lista de números
Un modelo de lenguaje no es un programa con reglas escritas a mano. Es una lista de números — cientos de miles de millones de números — llamados parámetros o pesos.
“Entrenar un modelo” significa cambiar esos números. La arquitectura (el código que define cómo se conectan las capas) se mantiene exactamente igual. El entrenamiento nunca reescribe el código; solo gira las perillas.
Analogía: imagina una radio antigua con muchas perillas — volumen, agudos, graves, balance. El modelo es la radio; los parámetros son las posiciones de las perillas. Al principio, las perillas están en posiciones aleatorias y la radio suena a estática. El entrenamiento es el proceso de ir girando las perillas una y otra vez hasta que la radio suena bien. No cambiamos el circuito (la arquitectura); solo ajustamos las perillas.
Un checkpoint es una “foto” de todos esos números en un momento dado. El entrenador guarda en disco: los pesos, el estado del optimizador (para reanudar exactamente donde se quedó), y metadatos (paso actual, forma del modelo, tokenizador, fuente de datos).
La función de pérdida (loss): ¿cómo medimos “qué tan mal” está el modelo?
Para saber en qué dirección girar las perillas, necesitamos una métrica de error: la pérdida de entropía cruzada (cross-entropy loss).
Intuición: la pérdida como sorpresa. Cuando el modelo hace una predicción, la pérdida mide qué tan sorprendido estaba por lo que realmente vino después. Si puso mucha probabilidad a la palabra correcta, su sorpresa es baja (pérdida pequeña). Si puso poca, su sorpresa es alta. Si puso probabilidad cero a la palabra correcta, la pérdida sería infinita — por eso los modelos nunca asignan probabilidad exactamente cero a ningún token.
Ejemplo concreto: después de “el pequeño gato”, el modelo predice:
| Palabra | Probabilidad |
|---|---|
| corrió | 32% |
| vio | 24% |
| encontró | 20% |
| durmió | 16% |
| plátano | 8% |
La palabra real era “encontró” (20% de probabilidad). La pérdida:
¿Por qué logaritmo? Porque la pérdida debe ser aditiva (la pérdida total de una secuencia es la suma de las pérdidas de cada posición) y sensible a cambios cerca de cero (pasar de 1% a 2% es un gran cambio relativo — duplicas la probabilidad — y la pérdida debe reflejarlo). El logaritmo hace ambas cosas de forma natural.
Comparando cambios:
| Probabilidad correcta | Pérdida | Cambio |
|---|---|---|
| 90% → 95% | 0.105 → 0.051 | -0.054 (mejora pequeña) |
| 50% → 55% | 0.693 → 0.598 | -0.095 (mejora moderada) |
| 10% → 15% | 2.303 → 1.897 | -0.406 (mejora grande) |
| 2% → 0.5% | 3.912 → 5.298 | +1.386 (empeoramiento grande) |
La curva es asimétrica: cometer un error grave (dar muy poca probabilidad a la palabra correcta) es mucho más costoso que acertar ligeramente mejor. Esta asimetría es deliberada — queremos que el modelo evite a toda costa asignar probabilidad casi nula a la palabra correcta.
La fórmula, para toda la secuencia:
Donde N es el número total de tokens en el lote, y p_θ es la probabilidad que el modelo asigna al token correcto dado el contexto.
Conexión con la teoría de la información: esta pérdida es exactamente la “sorpresa” de Shannon, promediada. Por eso, minimizar la pérdida es equivalente a comprimir el texto — un modelo que predice bien el texto también lo comprime bien. No es una metáfora: la teoría de la información y el aprendizaje automático están unidos por esta misma ecuación.
Consecuencia importante: como el loss es un promedio sobre tu texto, el modelo se vuelve bueno prediciendo exactamente lo que le mostraste. Muéstrale basura, y aprenderá, con la misma diligencia, a predecir basura.
Rodando cuesta abajo: el descenso de gradiente
Imagina la pérdida como un paisaje montañoso. Cada punto corresponde a una combinación de todos los parámetros (millones de dimensiones); la altura en cada punto es el valor de la pérdida. El objetivo: encontrar el punto más bajo — el valle donde la pérdida es mínima.
No podemos ver el paisaje completo, pero podemos sentir su pendiente en el punto donde estamos — el gradiente nos dice, para cada parámetro, si aumentar su valor aumenta o disminuye la pérdida, y en qué magnitud.
El algoritmo: calcula el gradiente (la derivada parcial de la pérdida respecto a cada parámetro), da un paso en la dirección opuesta (resta una fracción del gradiente a cada parámetro), y repite.
Donde η (eta) es la tasa de aprendizaje: el tamaño del paso.
Ejercicio manual: aprendiendo con 5 palabras
Volvamos al ejemplo de predecir la palabra después de “el pequeño ___”. Datos:
| Siguiente palabra | Frecuencia |
|---|---|
| gato | 6 |
| perro | 3 |
| pájaro | 1 |
| pelota | 1 |
| estrella | 1 |
El modelo tiene 5 logits (puntajes sin normalizar), uno por palabra. El mejor modelo posible (el que reproduce exactamente las frecuencias) sería: gato → 6/12 = 50%, perro → 3/12 = 25%, y los otros tres → 1/12 ≈ 8.33% cada uno.
La pérdida mínima posible (la entropía de la distribución empírica):
Este es el límite fundamental: aunque el modelo fuera perfecto, no podría bajar de 1.314 — hay incertidumbre real en los datos, no sabemos con certeza si vendrá “gato” o “perro”.
El descenso de gradiente ajusta las 5 perillas (logits) para que las probabilidades se acerquen a estas proporciones. Con solo 5 perillas ya es tedioso hacerlo a mano; imagina hacerlo con los 9 millones de parámetros de nuestro modelo pequeño, sin hoja de respuestas.
Dato histórico: el descenso de gradiente no se inventó para IA — lo propuso Augustin-Louis Cauchy en 1847 para resolver problemas de astronomía. Lo nuevo es aplicarlo sobre millones de parámetros a la vez, en paralelo, con hardware especializado.
La tasa de aprendizaje: el arte del paso adecuado
La tasa de aprendizaje (η) es de los parámetros más importantes del entrenamiento — determina el tamaño del paso en cada iteración.
- Muy pequeña: el modelo aprende lentamente, explorando el paisaje con pasos de hormiga — puede tardar mucho más de lo necesario en converger.
- Demasiado grande: el modelo da pasos gigantes, saltándose valles y posiblemente divergiendo (la pérdida se dispara).
- Justo la adecuada: desciende de forma estable y razonablemente rápida.
En la práctica, la tasa de aprendizaje se calienta (warm-up) al principio — empieza pequeña y crece gradualmente — y luego decae hacia el final del entrenamiento. Esto permite explorar el paisaje ampliamente al inicio, y refinar la solución con precisión al final.
Backpropagation: calculando el gradiente para millones de perillas a la vez
Si tuviéramos que calcular el gradiente respecto a cada parámetro uno por uno, el costo sería astronómico — para un modelo de 9 millones de parámetros, cada paso requeriría 9 millones de evaluaciones. Imposible.
La retropropagación resuelve esto usando la regla de la cadena del cálculo diferencial:
- Pase hacia adelante: calculamos la pérdida, guardando todas las operaciones intermedias (activaciones, puntajes de atención, etc.).
- Pase hacia atrás: recorremos la secuencia en orden inverso, calculando las derivadas de la pérdida respecto a cada operación intermedia, y luego respecto a cada parámetro — como una ola de “culpa” que se propaga desde la salida hasta la entrada, repartiendo la responsabilidad del error entre todos los parámetros.
Eficiencia: el pase hacia atrás cuesta aproximadamente el doble que el pase hacia adelante — un paso de entrenamiento completo (adelante + atrás + actualización) cuesta alrededor de 3 veces el costo de un pase hacia adelante. Precio razonable por obtener el gradiente de millones de parámetros a la vez.
La retropropagación fue formulada en su forma moderna por Rumelhart, Hinton, y Williams en 1986. Hoy, frameworks como PyTorch o MLX la calculan automáticamente — el programador solo define el modelo y la pérdida.
El ciclo completo de entrenamiento, paso a paso
1. Seleccionar un lote (batch) de tokens del conjunto de entrenamiento.
2. Pase hacia adelante: alimentar el lote al modelo → obtener logits.
3. Calcular la pérdida (cross-entropy) comparando los logits con los tokens reales.
4. Pase hacia atrás: calcular los gradientes de la pérdida respecto a todos los parámetros.
5. Actualizar los parámetros: w ← w - η × gradiente (o con un optimizador como AdamW).
6. Repetir desde el paso 1.
Cada iteración se llama un paso (step) de entrenamiento. El truco del batching: en lugar de procesar un ejemplo a la vez, se procesan lotes de 32, 64, o 512 ejemplos simultáneamente — esto aprovecha el paralelismo del hardware, y los gradientes promediados sobre el lote son más estables que los de un solo ejemplo.
Viendo aprender a un modelo diminuto, letra por letra
Para sentir cómo se ve el aprendizaje, imaginemos un modelo microscópico: una tabla de 27×27 (729 parámetros) que predice la siguiente letra. No es un transformer, pero el proceso de aprendizaje es el mismo.
Al principio, los pesos son aleatorios — el loss arranca en 3.296 (la sorpresa de adivinar al azar entre 27 letras). A medida que avanza el entrenamiento:
| Paso | Muestra generada |
|---|---|
| 0 | "ux vsmiorzl gepbhi wffwddgbjwcqvuldrajujbqwdkrrsbfyghl sqvfx skkyzgzem" |
| 40 | "t s kintu wathe cjjlbjuman tbcwqaux t wnvces wibibo he i ithe sarjmy i" |
| 200 | "t gpplan o bke med athe id f thaill pre jbathkil alisaronighitrfomkqse" |
| 800 | "t py igr thand a d f t gry are n tom ckumomaly a pld bi s llaindotap l" |
| 2,400 (mejor posible) | "tlay i so ppllamist s rrind t sanist s may ge ilo pillo t d nghicharm" |
El loss cae de 3.296 hasta asentarse en un piso de 2.073. Fíjate en la progresión: primero el modelo descubre espacios y frecuencias aproximadas de letras (la estática empieza a llegar en ráfagas del tamaño de palabras); luego emergen pares fuertes — th, he, an — y las ráfagas empiezan a sonar pronunciables. Incluso en su mejor punto (paso 2,400), sigue siendo básicamente gibberish — nunca genera palabras reales ni mucho menos una oración coherente. Lo que sí logra es basura con la textura estadística inconfundible del inglés.
Para una versión hecha por humanos de este mismo efecto, existe la canción italiana “Prisencolinensinainciusol” de Adriano Celentano — cuya letra, sin ningún significado real, fue escrita deliberadamente para sonar como inglés hablado. Es exactamente lo que este modelito produce: la forma sin el fondo.
El piso final (2.073) es la incertidumbre irreducible de predecir la siguiente letra con solo 1 letra de contexto — con más contexto (por ejemplo, un transformer con ventana de cientos de tokens), el modelo puede bajar mucho más su piso de pérdida, porque tiene mucha más información disponible para cada predicción.
Observación clave: el modelo no “entiende” lo que es una palabra. Simplemente aprendió, estadísticamente, que después de “th” suele venir “e” o “a”, y que ciertas letras forman patrones recurrentes. El significado —cuando aparece, en modelos mucho más grandes— emerge de la combinación de muchísimos patrones como este, no de comprensión real.
Aprendizaje, memorización, y validación: la trampa del overfitting
Una pregunta crucial: cuando la pérdida baja, ¿el modelo está aprendiendo patrones generales, o simplemente memorizando los ejemplos de entrenamiento?
La respuesta está en la curva de validación. Se guarda un pequeño conjunto de datos (5-10% del total) que nunca se usa para actualizar parámetros — el conjunto de validación — y se evalúa periódicamente sobre él.
- Si entrenamiento y validación bajan juntos: el modelo aprende patrones generales que se aplican a texto no visto.
- Si entrenamiento sigue bajando pero validación se estanca o sube: el modelo está sobreajustando — memorizando detalles específicos del entrenamiento en vez de aprender reglas generales.
El punto de parada óptimo suele ser cuando la pérdida de validación alcanza su mínimo — a partir de ahí, la de entrenamiento puede seguir bajando (porque el modelo memoriza más), pero la de validación empeora.
En la práctica, con modelos grandes entrenados con datasets masivos, el sobreajuste inmediato es menos común (hay tantos datos que memorizar se vuelve difícil, y se usan técnicas de regularización como weight decay y dropout) — pero la brecha entre entrenamiento y validación sigue siendo una métrica importante para monitorear.
Optimizadores modernos: AdamW
El descenso de gradiente clásico, con una tasa de aprendizaje fija para todos los parámetros, tiene limitaciones. En la práctica se usan optimizadores adaptativos — AdamW es el estándar actual:
- Mantiene un promedio móvil del gradiente (el “momento”) — suaviza oscilaciones y acelera el avance en direcciones consistentes.
- Mantiene un promedio móvil del cuadrado del gradiente — ajusta la tasa de aprendizaje por parámetro: si un parámetro tiene gradientes grandes y variables, reduce su paso; si son pequeños y estables, lo aumenta.
- Añade weight decay: una pequeña penalización a parámetros grandes, actuando como regularización.
Bajo el capó (simplificado):
# Pseudocódigo de AdamW
m = 0 # promedio del gradiente
v = 0 # promedio del cuadrado del gradiente
for paso in 1..num_pasos:
g = calcular_gradiente(loss, w)
m = beta1 * m + (1 - beta1) * g
v = beta2 * v + (1 - beta2) * g**2
m_hat = m / (1 - beta1**paso) # corrección de sesgo
v_hat = v / (1 - beta2**paso)
w = w - eta * (m_hat / (sqrt(v_hat) + epsilon) + lambda_ * w)
Donde beta1, beta2, epsilon, y lambda_ son hiperparámetros (típicamente 0.9, 0.999, 1e-8, y 0.01-0.1 respectivamente).
El paisaje de pérdida: mínimos locales, puntos de silla, y llanos
Una pregunta común: “¿el descenso de gradiente no se queda atascado en mínimos locales?”
En redes neuronales modernas, los mínimos locales no suelen ser el problema principal. En espacios de alta dimensión (millones de parámetros), es más probable encontrar puntos de silla (donde la pendiente es cero en algunas direcciones pero no en todas) o mesetas (regiones donde la pérdida es casi plana).
La combinación de inicialización aleatoria (el modelo empieza en un punto distinto cada vez), optimizadores con momento como AdamW (que pueden “impulsarse” a través de mesetas y puntos de silla), y la escala masiva de los modelos actuales (cuyo paisaje de pérdida tiende a ser más suave, con menos mínimos locales agudos), hace que el modelo casi siempre encuentre soluciones razonablemente buenas — sin garantía de optimalidad global, pero suficiente en la práctica.
Resumen del capítulo
El entrenamiento de un modelo de lenguaje es un proceso cíclico:
- Parámetros iniciales aleatorios — el modelo no sabe nada.
- Forward pass — calcula la pérdida, qué tan sorprendido está por el texto real.
- Backward pass — calcula el gradiente de la pérdida respecto a cada parámetro.
- Actualización — con un optimizador (AdamW), ajusta los parámetros para reducir la pérdida.
- Repetir — el modelo refina su comprensión estadística del lenguaje, paso a paso.
La pérdida mide la “sorpresa” del modelo. El descenso de gradiente minimiza esa sorpresa ajustando millones de perillas. La retropropagación hace que este proceso sea computacionalmente viable. El optimizador moderno (AdamW) lo hace estable y rápido.
Lo que el modelo aprende no es “significado” en el sentido humano, sino una distribución de probabilidad sobre secuencias de tokens que se asemeja a la de los datos de entrenamiento. El significado, la coherencia, el razonamiento — todo eso emerge de la capacidad del modelo para predecir bien el texto, no de un mecanismo separado de “comprensión”.
En el próximo capítulo veremos cómo este aprendizaje puramente estadístico puede moldearse para que el modelo se comporte como un asistente conversacional. La diferencia entre un modelo base (que solo continúa texto) y un asistente como ChatGPT no está en la arquitectura ni en el algoritmo de aprendizaje — está en el post-entrenamiento: el fine-tuning por instrucciones y el ajuste de preferencias. Eso es lo que convierte a un predictor de tokens en un asistente útil.
Si alguna vez te sientes abrumado por las matemáticas, recuerda la analogía de la radio y las perillas: el entrenamiento es girar perillas millones de veces, usando el gradiente como guía. No hay “inteligencia” en el proceso en sí — solo un algoritmo de optimización bien definido. La inteligencia aparente es un subproducto de la escala y la calidad de los datos.
LinkedIn nelson.zepeda@simov.io SIMOV LABS
¿Encontraste un error? Sugerir una corrección