En esencia, attention calcula una suma ponderada. Para cada token en una secuencia, el mecanismo pregunta: "¿Qué tan relevante es cada otro token para mí en este momento?" Lo hace a través de tres proyecciones aprendidas — queries, keys y values (los Q, K, V que ves en cada paper). La query de un token se multiplica por punto con las keys de todos los tokens para producir un conjunto de puntajes, esos puntajes pasan por softmax para convertirse en pesos, y los pesos se usan para mezclar los values en una representación consciente del contexto. Toda la operación es diferenciable, así que el modelo aprende qué relaciones importan durante el entrenamiento. Multi-head attention ejecuta varias de estas en paralelo con diferentes proyecciones, permitiendo al modelo atender a diferentes tipos de relaciones simultáneamente — una head podría rastrear la sintaxis mientras otra rastrea la correferencia.
El avance práctico de self-attention fue el paralelismo. Las redes recurrentes como los LSTM procesaban tokens uno a la vez, lo que significaba que el entrenamiento era inherentemente secuencial y lento. Attention procesa toda la secuencia de un solo golpe, convirtiendo el entrenamiento en una multiplicación de matrices masiva que las GPU devoran. Esta es la razón por la que los Transformers pudieron escalar a miles de millones de parámetros y billones de tokens de entrenamiento — el hardware ya estaba construido para exactamente este tipo de carga de trabajo. Cada LLM importante con el que interactúas hoy, desde GPT-4 hasta Claude, Llama 3 y Mistral, debe su existencia a esta ventaja de paralelismo.
El elefante en la habitación es el escalado cuadrático. El attention estándar calcula un puntaje para cada par de tokens, así que duplicar tu ventana de contexto cuadruplica el cómputo y la memoria. Un modelo de contexto 4K usa 16 millones de puntajes de attention por capa por head; salta a 128K y estás en 16 mil millones. Por eso extender las ventanas de contexto ha sido un esfuerzo de ingeniería tan masivo. Flash Attention (de Tri Dao) abordó el lado de la memoria reestructurando el cómputo para evitar materializar la matriz completa de attention en la HBM de la GPU, haciendo contextos largos prácticos sin cambiar las matemáticas. Grouped-query attention (GQA), usado en Llama 2 y modelos más nuevos, comparte heads de key-value entre heads de query para reducir el KV cache que se acumula durante la generación.
Cross-attention es una variante que vale la pena entender por separado. En modelos encoder-decoder y en generación condicional (como texto-a-imagen), las queries vienen de una secuencia mientras que las keys y values vienen de otra. Así es como Stable Diffusion condiciona sobre tu prompt de texto — las queries del lado de la imagen atienden a las salidas del encoder de texto. También es cómo el Transformer original manejaba la traducción: el decoder atendía a las salidas del encoder para decidir qué generar a continuación.
Una idea errónea común es que attention es "comprensión". No lo es. Attention es un mecanismo de enrutamiento — decide hacia dónde fluye la información, pero el procesamiento real ocurre en las capas feedforward que siguen a cada bloque de attention. Investigaciones como el trabajo "Transformer Circuits" de Anthropic han mostrado que las heads de attention desarrollan roles especializados (induction heads, previous-token heads), pero estos son patrones aprendidos, no lógica programada. Otro detalle práctico: attention no conoce inherentemente el orden de los tokens. Sin codificaciones posicionales (sinusoidales, aprendidas o rotatorias como RoPE), trata una secuencia como una bolsa de tokens. Acertar con la codificación posicional ha resultado ser crítico para el rendimiento con contextos largos, que es por lo que enfoques como ALiBi y RoPE siguen evolucionando.