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.
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.
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.
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.
Después de la atención multi-cabeza, el bloque no termina ahí. Hay dos piezas más:
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.
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.
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.
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.
Selecciona un token activo para ver cómo las 4 cabezas distribuyen su atención de forma diferente sobre la misma secuencia "karpathy":