Capítulo 04 · Atención · 12 min

La atención es todo lo que necesitas

El mecanismo que lo cambia todo. Cómo cada token mira a todos los demás para entender el contexto.

El pronombre y el médico

Volvamos a esta frase:

"El médico envió a la enfermera a su casa porque ella..."

Para una persona, "ella" apunta naturalmente a la enfermera. Para un LLM no es obvio: cuando procesa el token ella, la palabra enfermera está varias posiciones atrás. ¿Cómo las conecta?

Ese es el papel de la atención.

Por qué existe la atención

Antes de 2017, los modelos de lenguaje eran sobre todo recurrentes (RNN, LSTM): leían el texto token por token, propagando un "estado oculto" que resumía todo lo visto hasta ese momento.

Problema: ese estado oculto es un cuello de botella. Todo debe pasar por ahí. A medida que la frase se alarga, la información antigua se diluye. Y el aprendizaje es secuencial: para tratar la palabra número cien hay que haber tratado las 99 anteriores, lo que dificulta la paralelización.

El paper Attention Is All You Need (Vaswani et al., 2017) propone una ruptura:

Nada más de recurrencia. Cada token mira directamente a todos los demás, en paralelo.

Es el mecanismo que hace posibles los modelos modernos.

La intuición

En cada capa del modelo, cada token hace tres operaciones:

  1. Plantea una pregunta al resto de la frase (el vector Query).
  2. Cada otro token muestra una etiqueta que resume lo que es (el vector Key).
  3. El token compara su pregunta con cada etiqueta: donde hay coincidencia, recupera un poco de contenido (el vector Value).

Resultado: una nueva representación para cada token, que es una suma ponderada de los demás, donde los pesos vienen de las correspondencias Q-K.

Attention(Q, K, V) = softmax(QKT / √dk) · V

No hace falta memorizar la fórmula: conserva la idea. Cada token mira a los demás y mezcla lo que le parece interesante.

¿De dónde salen Q, K y V exactamente?

No de la nada. Para cada token tomamos su vector de embedding x y lo multiplicamos por tres matrices aprendidas durante el entrenamiento:

Q = x · W_Q
K = x · W_K
V = x · W_V

Esas tres matrices W_Q, W_K, W_V son los parámetros de la atención. Son las mismas para todos los tokens dentro de una capa — es lo que el modelo ajusta, a golpe de gradiente, para que las "preguntas" correctas encuentren las "etiquetas" correctas.

El factor √d_k de la fórmula sirve para evitar que los productos escalares exploten cuando la dimensión es grande. Sin él, los valores antes del softmax se vuelven enormes, el softmax se satura y el gradiente muere. Detalle técnico, pero necesario.

Varias preguntas a la vez

Un único conjunto de preguntas no basta. Un token puede necesitar mirar su sujeto sintáctico y su correferencia y el verbo principal al mismo tiempo.

De ahí la multi-head attention: en vez de un solo sistema Q-K-V, hacemos funcionar varios en paralelo (normalmente 8, 16, 32). Cada uno aprende a especializarse en un tipo de relación. En modelos entrenados se observan heads dedicados a:

  • la atención local (cada token mira a sí mismo o a sus vecinos inmediatos)
  • el vínculo sujeto-verbo
  • las correferencias (pronombres hacia su referente)
  • los delimitadores (puntuación, inicio/fin de frase)
  • la rima o la estructura poética
  • cosas que aún no sabemos nombrar

Manipula

La visualización muestra, en dos frases, cómo puede verse la atención de distintas heads. Los patrones son estilizados (los pesos reales vendrían de un modelo entrenado), pero cada head corresponde a un comportamiento observado en modelos actuales.

Cada fila muestra cómo un token mira a todos los demás. Algunos heads siguen la sintaxis (sujeto ↔ verbo), otros capturan la semántica (referentes, antecedentes). Ninguno está programado a mano: estos patrones emergen del entrenamiento.

Tres cosas para probar:

  • En El gato duerme con la head "Sujeto ↔ verbo", mira la fila duerme. El peso más fuerte va a gato. El verbo ha "encontrado" su sujeto.
  • En Correferencia con la head "Correferencia", mira la fila el. El peso más fuerte vuelve a niño. Es exactamente el mecanismo que resuelve el enigma del pronombre.
  • En cualquier head, mira el triángulo superior derecho: es gris. Es la máscara causal — un token solo puede mirar los tokens anteriores. Es lo que obliga al modelo a predecir, no a copiar.

¿Causal o bidireccional?

No todas las atenciones son iguales. Existen dos regímenes.

Bidireccional. Cada token ve todos los demás, hacia atrás y hacia adelante. Es lo que usan BERT (Google, 2018) o los encoders de T5. Esos modelos brillan a la hora de comprender una frase — clasificación, pregunta-respuesta extractiva, búsqueda semántica — pero no generan texto token a token.

Causal. Cada token solo ve los anteriores. Es la máscara triangular que vimos antes. Esa restricción es lo que hace posible la generación autoregresiva: para producir la siguiente palabra, el modelo necesita poder predecir solo a partir del pasado.

GPT, Claude, Llama, Gemini, Mistral — todos los LLM de gran consumo son modelos de atención causal. Es esa máscara la que los hace capaces de predecir, no solo de describir.

La atención cuesta

Esta elegancia tiene un precio. Para una secuencia de longitud n, calcular la matriz de atención requiere O(n²) operaciones. Duplicar el tamaño del contexto cuadruplica el coste.

Por eso las primeras ventanas de contexto eran tan estrechas: 1.024 tokens en GPT-2 (2019), 2.048 en GPT-3 (2020), 4.096 en GPT-3.5 (2022). Hicieron falta dos familias de técnicas para salir de ahí: optimizaciones de memoria como FlashAttention, que no cambia nada del O(n²) pero lo vuelve practicable reorganizando los accesos a la GPU, y aproximaciones como el sliding window o la sparse attention, que renuncian a mirar todos los tokens. Los modelos actuales aguantan sin problema el millón de tokens, y algunos anuncian más. Volvemos sobre estas técnicas en el capítulo 18, donde se conectan con la memoria del KV cache.

La atención es potente; también es el principal cuello de botella de los LLM modernos.

Lo siguiente

La atención por sí sola no hace un modelo de lenguaje. Hay que apilarla en bloques sucesivos, añadir capas de cálculo "feed-forward", normalizaciones, conexiones residuales. Es la arquitectura Transformer completa: el tema del próximo capítulo.

Actualizado el