El transformer, sin humo
Tokens y embeddings dan una secuencia de vectores. Falta la pieza que decide qué hacer con esa secuencia: el mecanismo de atención, el corazón de todo modelo de lenguaje actual, explicado con los pesos reales de un transformer pequeño que puedes tocar.
Antes de 2017, para procesar una frase, los modelos la leían palabra a palabra, en orden, arrastrando un resumen que se iba actualizando con cada nueva palabra. Es como intentar recordar una lista larga que alguien te dicta en voz alta: para cuando llega el final, el principio se ha difuminado. Frases largas con dependencias lejanas se perdían por el camino, y encima leer en estricto orden no se puede repartir entre varios procesadores: entrenar era lento.
La idea que lo cambió todo: ¿y si cada palabra pudiera mirar directamente a todas las demás y decidir cuáles le importan, en vez de leer en fila? Eso es la atención. Para predecir qué sigue después de una palabra, el mecanismo calcula una puntuación de esa palabra con cada otra palabra de la frase, y construye su representación mezclando las que más puntúan. Sin resumen arrastrado, sin distancias: la palabra 1 y la palabra 500 quedan igual de cerca.
Por dentro, el truco tiene tres piezas con nombres raros — query, key, value — pero lógica sencilla. Cada palabra emite una pregunta (query), lleva puesta una etiqueta (key) y guarda un contenido (value). La puntuación entre dos palabras es cuánto encaja la pregunta de una con la etiqueta de la otra, y lo que se mezcla al final son los contenidos de las palabras con mejor encaje. Todo son multiplicaciones de matrices — justo lo que una tarjeta gráfica hace rapidísimo y en paralelo, así que además de funcionar mejor, se entrena muchísimo más rápido que leer en fila.
En la demo de atención esto deja de ser teoría: son los pesos reales, extraídos del checkpoint entrenado de un transformer pequeño escrito desde cero, no un dibujo ilustrativo. Elige una capa y una cabeza, y mira exactamente a qué caracteres anteriores atiende el modelo para decidir cuál viene después. Se puede ver, letra a letra, la misma mecánica de query-key-value que acabas de leer.
Una sola atención tiende a fijarse en un único tipo de relación, así que el transformer usa varias en paralelo — cabezas — y cada una aprende sola a mirar cosas distintas: una acaba siguiendo la sintaxis, otra los caracteres vecinos, otra relaciones más raras. Nadie les asigna el papel; emerge del entrenamiento. En la vista en 3D de la atención las cuatro capas y cuatro cabezas de ese mismo transformer quedan apiladas como plantas de un edificio que puedes orbitar: eliges un carácter y ves a la vez qué mira cada cabeza en cada planta — las de abajo vigilan a los vecinos inmediatos, las de arriba, la estructura completa de la frase.
Apilar muchas capas de atención — cada una mirando lo que la anterior construyó — da representaciones cada vez más ricas, y para generar texto hace falta una regla extra: la máscara causal. Al predecir la palabra en la posición 10, el modelo solo puede mirar las posiciones 1 a 9, nunca las de después — si pudiera ver el futuro, aprendería a copiarlo en vez de a predecirlo. Con esa restricción, generar texto se convierte en repetir un único paso: dadas las palabras hasta ahora, calcular una probabilidad para cada palabra posible siguiente, elegir una, añadirla, y repetir.
Elegir cuál de esas palabras probables se añade en cada paso no es una sola estrategia, son varias, y cada una tiene su carácter. La voraz (greedy) coge siempre la más probable, es rápida y determinista, pero puede quedarse atascada en frases planas y repetitivas por no arriesgar nunca. El beam search mantiene varias frases candidatas a la vez en vez de una sola, y al final elige la de mayor probabilidad conjunta — mejor calidad, más cálculo. El muestreo con temperatura introduce aleatoriedad controlada: temperatura baja se parece a voraz, temperatura alta genera texto más sorprendente y, pasado cierto punto, delirante.
En la demo de beam search las tres estrategias corren sobre el mismo transformer de caracteres entrenado con Shakespeare, con el árbol de decisiones y las ramas que van muriendo a la vista. Sube la temperatura del muestreo hasta que el texto deje de tener sentido, y compara esa rama con lo disciplinado — y a veces aburrido — que resulta el beam search sobre el mismo modelo.
Todo lo de esta lección y las dos anteriores — tokenizador, embeddings, atención, generación — se junta en entrena tu propio mini-GPT, el broche del laboratorio: eliges un corpus de texto, entrenas tu propio tokenizador BPE sobre él, defines cuántas capas y cabezas tendrá tu transformer, y lo ves entrenar de verdad, paso a paso, hasta generar texto con tu propio modelo. Es la misma maquinaria que esta lección desmontó pieza a pieza, ahora montada entera y funcionando de principio a fin.
Práctica
Antes del cuestionario, toca estas demos del laboratorio:
Comprueba lo que has aprendido