30 · Auto-atención: cada posición atiende a todas las demás
La auto-atención permite que cada posición de una secuencia atienda a todas las demás — sin recurrencia, totalmente en paralelo, el motor de los transformers.
Una idea, un intento. A tu ritmo.
APRENDE HACIENDOPon a prueba tu intuición3 pasos
30 · Auto-atención: cada posición atiende a todas las demás
Usa los ejemplos y la explicación de la lección para comprobar tu idea.
Reflexión personal. No se envía a ningún servicio de IA.La auto-atención permite que cada posición atienda a todas las demás en la MISMA secuencia — sin recurrencia, totalmente en paralelo, el motor de los transformers.
Sin esto:
Sin auto-atención, los transformers (la arquitectura que domina desde 2023+) no tienen sentido.
En la lección anterior, la atención se definió como: el decoder consulta los estados ocultos del encoder. La consulta venía de una secuencia (lado del decoder); las claves y valores venían de una secuencia diferente (lado del encoder). Esto es atención cruzada.
La auto-atención elimina la distinción encoder-decoder. Cada posición en una única secuencia consulta a TODAS las demás posiciones en la misma secuencia. Las consultas, claves y valores provienen todos de la misma fuente.
¿Por qué importa esto? En una RNN, la posición t solo puede "ver" la posición t-1 directamente. Para combinar información de posiciones separadas por 10 tokens, la señal debe viajar a través de 10 estados ocultos secuenciales, cada uno con su propia transformación. Las dependencias de largo alcance son difíciles de capturar y requieren muchas capas.
En la auto-atención, cada posición atiende directamente a todas las demás en un solo paso — la distancia entre posiciones no importa. La posición t y la posición t-50 se comunican exactamente con el mismo costo que posiciones adyacentes. El mecanismo es:
- Proyectar la entrada X de forma
(seq, d)a tres matrices: Q (queries), K (keys), V (values), cada una con una proyección lineal aprendida. - Calcular puntuaciones:
S = Q @ K^T / sqrt(d_k)— forma(seq, seq), una puntuación por par. - Softmax por filas: cada fila es la distribución de atención para una posición de salida.
- Agregar valores:
output = softmax(S) @ V— misma forma que la entrada.
La escala / sqrt(d_k) es crítica: sin ella, un d_k grande hace que los productos punto crezcan tanto que el softmax se satura, haciendo que los gradientes desaparezcan para todas las posiciones no máximas.
Formas de la auto-atención: X (seq, d) → Q, K, V → puntuaciones (seq, seq) → salida (seq, d)
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Auto-atención (5×5): cada fila es una distribución de probabilidad sobre las 5 posiciones — completamente paralelo, sin recurrencia
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Por qué dividir por sqrt(d_k): sin escalado, un d_k grande causa saturación del softmax y gradientes desvanecidos
Read-along de PyTorch: nn.MultiheadAttention y auto-atención de producto punto escalado manual
Complejidad de la auto-atención: la memoria O(n^2) es el cuello de botella; el paralelismo total es por qué los transformers superan a las RNNs en GPU
Laboratorio 3D: la atención como luz entre palabras
Elegí una oración y una palabra de consulta: los haces hacia cada otra palabra muestran sus pesos de atención softmax, calculados con productos punto escalados.
¿Cuál es la ventaja clave de la auto-atención sobre las RNNs para el procesamiento de secuencias?
Calculá softmax(QKᵀ/√d)·V a mano, con máscara causal y el truco de restar el máximo que evita que scores de ±1000 desborden.
- La auto-atención calcula Q = X W_Q, K = X W_K, V = X W_V, luego salida = softmax(Q K^T / sqrt(d_k)) V — la misma secuencia de entrada produce los tres.
- Dividir por sqrt(d_k) previene la saturación del softmax cuando las dimensiones de embedding son grandes — el 'escalado' en la atención de producto punto escalado.
- La auto-atención es O(n^2) en memoria (el cuello de botella para contextos largos) pero completamente paralela en GPU — por eso los transformers reemplazaron a las RNNs como arquitectura dominante.
La auto-atención es la operación MÁS IMPORTANTE en la IA moderna. BERT, GPT, Whisper, Stable Diffusion, AlphaFold — todos están construidos sobre ella. Entenderla es obligatorio para entender cualquier modelo actual.
Si lo quitas: Podrías usar transformers pero no razonar sobre por qué funcionan, depurar patrones de atención, elegir longitudes de contexto apropiadas, ni entender los compromisos de ingeniería en modelos de contexto largo como GPT-4 y Gemini.