Lección 11

Atención multi-cabeza

Una sola cabeza de atención puede aprender un patrón. Cuatro cabezas en paralelo pueden aprender cuatro patrones diferentes a la vez — y combinarlos.

1. El jurado que delibera

En un juicio importante, el jurado no tiene solo una persona — tiene doce. Cada jurado analiza los mismos hechos desde su propia perspectiva: uno se fija en el lenguaje corporal del acusado, otro en las fechas de los testimonios, otro en las pruebas físicas, otro en los antecedentes. Al final, votan. La decisión final es mejor que cualquiera de las perspectivas individuales.

⚖️ Las 4 cabezas de atención son 4 jurados. Ven la misma secuencia de tokens pero aprenden a prestarle atención a cosas distintas. Una cabeza puede aprender que "el inicio del nombre importa", otra que "la letra anterior es lo más relevante", otra que "las vocales forman patrones propios". Cada cabeza captura algo que las otras ignoran.

2. Dividir, procesar, reunir

Microgpt tiene n_embd=16 y n_head=4. Eso significa que cada cabeza trabaja sobre 16/4 = 4 dimensiones del embedding. No duplica el tamaño — divide el trabajo.

Diagrama · Atención multi-cabeza con 4 cabezas
Diagrama de atención multi-cabeza: división en 4 cabezas y reunificación Vector de 16 dimensiones se divide en 4 bloques de 4. Cada bloque va a su cabeza de atención. Las 4 salidas se concatenan y se proyectan de vuelta a 16 dimensiones. entrada 16 dims ÷4 Cabeza 1 dims 0-3 · 4d Cabeza 2 dims 4-7 · 4d Cabeza 3 dims 8-11 · 4d Cabeza 4 dims 12-15 · 4d concat 16 dims (4×4=16) W_o 16→16 salida 16 dims ¿qué aprende? "letra anterior" "inicio del nombre" "patrón de vocales" "longitud del nombre"

Cada cabeza tiene sus propias matrices W_Q, W_K, W_V que aprende de forma independiente. La concatenación preserva los 16 valores totales; W_o mezcla la información entre cabezas.

3. La conexión residual y RMSNorm

Después de la atención multi-cabeza, el bloque no termina ahí. Hay dos piezas más:

Conexión residual (skip connection)

La salida de la atención se suma con la entrada original. No se reemplaza — se añade. Esto permite que el gradiente fluya directamente hacia capas anteriores, sin tener que "atravesar" la atención. Es lo que hace posible entrenar redes profundas sin que los gradientes desaparezcan.

RMSNorm: normalizar para estabilizar

Antes de la atención y del MLP, se aplica RMSNorm. Normaliza el vector de entrada para que su magnitud sea predecible. Si un vector tiene valores muy grandes, los productos punto en la atención serían enormes y el softmax quedaría "aplastado" en un solo token. RMSNorm previene eso.

✍️ Bloque completo de atención multi-cabeza
Dado un vector de entrada x (16 dimensiones):

  1. x_norm = RMSNorm(x)           ← normalizar
  2. attn_out = MultiHeadAttn(x_norm)  ← 4 cabezas en paralelo
  3. x = x + attn_out              ← conexión residual (suma, no reemplaza)

Luego el MLP (feed-forward):
  4. x_norm2 = RMSNorm(x)
  5. mlp_out = MLP(x_norm2)        ← dos capas lineales con ReLU
  6. x = x + mlp_out               ← otra conexión residual

El vector x tiene 16 dimensiones al entrar y al salir del bloque.
Cada capa lo enriquece sin cambiar su forma.
      
Residual connection · El atajo que estabiliza el entrenamiento
Diagrama de conexión residual La entrada x pasa por la atención y el resultado se suma con x para producir la salida. x Atención multi-cabeza + atajo (skip connection) x' x' = x + attn(x) suma

La conexión residual (flecha amarilla punteada) permite que el gradiente fluya directamente de x' a x sin atravesar la atención. Esto es lo que hace posible entrenar redes con muchas capas.

🎮 Pruébalo: cuatro cabezas en paralelo

Selecciona un token activo para ver cómo las 4 cabezas distribuyen su atención de forma diferente sobre la misma secuencia "karpathy":

4. Lo que aprendiste

En esta lección:
  • Atención multi-cabeza divide el embedding en n_head trozos iguales. Cada cabeza trabaja sobre su trozo de forma independiente.
  • Las salidas de todas las cabezas se concatenan y se proyectan con W_o, mezclando la información entre cabezas.
  • La conexión residual suma la entrada con la salida del bloque. Esto estabiliza el entrenamiento y permite flujo directo del gradiente.
  • RMSNorm normaliza el vector antes de cada sub-bloque, evitando valores extremos que destabilizarían la atención.