English · Español
00 — Por qué pegar ahora, y qué es el residual stream¶
🇪🇸 Después de cuatro fases construyendo piezas, ahora las pegamos. Lo nuevo no es ninguna operación; es la disposición: el residual stream como autopista central, las sublayers como side-trips que leen, transforman y escriben de vuelta. Esa imagen mental es la pieza más valiosa de Phase 17.
El planteamiento¶
Ya has construido todos los componentes que necesitas:
| Componente | Fase | Qué hace |
|---|---|---|
| Token embedding \(E\) | 13 | \(\text{token\_id} \mapsto \mathbb{R}^{d_\text{model}}\) |
| Codificación posicional (RoPE) | 16 | Inyecta info de posición dentro de Q/K en attention |
| Multi-head attention | 15 | Mezcla información entre tokens |
| Linear / Tensor autograd | 7–8 | El sustrato para FFN y proyecciones |
| Intuición de LayerNorm | 10 | El patrón normalización-luego-afín |
Lo que añade la Fase 17 es disposición: cómo se componen estas piezas en un bloque transformer, cómo los bloques se componen en una pila, cómo la pila se conecta a una cabeza de vocabulario, y — lo más importante — cuál es el invariante en toda esta composición: el residual stream.
El residual stream¶
El modelo mental más útil para los transformers es el residual stream. Imagina un flujo de vectores \(h \in \mathbb{R}^{d_\text{model}}\), uno por posición de token, que va desde el fondo de la red hasta arriba. El stream empieza en el token embedding (\(h^{(0)} = E[\text{token}]\)) y termina en la cabeza LM (\(\text{logits} = h^{(\text{final})} \cdot E^\top\)).
Cada sublayer — attention, FFN — es un side-trip: lee del stream, hace algo de cómputo, y suma su salida de vuelta al stream. La estructura Pre-LN hace esto explícito:
Léelo: "el nuevo estado es el estado anterior más una actualización normalizada y transformada". Nada reemplaza; todo se acumula. Esto tiene implicaciones profundas:
- Skip connections en todas partes. Los gradientes fluyen por el residual stream sin ser tocados, lo cual es lo que hizo tratable el entrenamiento de redes profundas (He et al. 2015 para la intuición original de ResNet; Vaswani et al. 2017 para los transformers).
- Las sublayers son perturbaciones aditivas. Cada bloque hace una pequeña contribución aditiva. El stream es el "espacio de trabajo compartido"; las sublayers escriben en él.
- La información persiste. Un dato escrito en la capa 3 sigue ahí en la capa 11 a menos que una sublayer posterior lo reste.
- El ancho es fijo, la profundidad varía. El stream tiene el mismo ancho \(d_\text{model}\) desde abajo hasta arriba. Añadir capas hace la red más profunda, no más ancha.
Esta perspectiva viene del trabajo de interpretabilidad mecanística de Anthropic (Elhage et al. 2021, "A Mathematical Framework for Transformer Circuits"). Es el modelo mental que merece la pena retener. Memorízalo.
Qué hacen realmente attention y FFN, desde la vista del residual stream¶
- Sublayer de attention. Lee el stream en cada posición de token, calcula una mezcla ponderada entre posiciones, escribe la mezcla de vuelta. Es el token-mixer. Sin attention, la red no tiene forma de compartir información entre posiciones.
- Sublayer de FFN. Lee el stream en una posición de token, aplica un mapa no lineal puntual, escribe el resultado de vuelta. Es el feature-mixer. Sin FFN, el modelo es sólo una función lineal de los embeddings de entrada (la composición de attentions lineales sigue siendo lineal en los embeddings, salvo por el softmax).
El orden — primero attention, luego FFN — es canónico. Forman un par: recopilar información entre posiciones (attention), luego refinarla puntualmente (FFN). Repetir \(n_\text{layers}\) veces.
Por qué "Mini" — la configuración bloqueada¶
Bloqueamos la configuración interesante más pequeña:
d_model = 64 # ancho del residual stream
n_heads = 4 # de forma que cada head sea d_model / n_heads = 16-dim
n_layers = 2 # dos bloques apilados
d_ff = 256 # dim interna de FFN, = 4 * d_model (canónico)
vocab_size = 64 # vocabulario inglés+español de 60 tokens de formas verbales, con padding
context_len = 32 # longitud máxima de secuencia (el ejemplo canónico es 8 tokens)
Esto es suficientemente pequeño para caber en el portátil de Borja y suficientemente pequeño para trazarlo a mano. El lab 02 contará cada parámetro y encontrará ~57k. Para comparar, GPT-2 small es de 124M (~2000× más grande). El objetivo de Mini-GPT no es la capacidad; es la comprensión completa de cada parámetro.
Qué deberías ser capaz de hacer al terminar esta fase¶
- Trazar un paso forward sobre papel. Dada la secuencia canónica de 8 tokens y un modelo (simulado) inicializado, deberías ser capaz de escribir la forma y un boceto aproximado del valor en cada tensor intermedio — incluso dentro de attention y FFN — sin consultar el código.
- Predecir el conteo de parámetros a partir de la arquitectura. Dados \(d_\text{model}, n_\text{heads}, n_\text{layers}, d_\text{ff}, |V|\), puedes escribir el conteo de parámetros hasta el dígito, incluyendo o excluyendo sesgos.
- Leer código de transformer en el mundo real. GPT-2, LLaMA, Pythia — todas variaciones del mismo tema Pre-LN. Deberías poder abrir cualquiera de ellos, ignorar el ruido del framework, y reconocer el patrón residual stream + sublayer.
- Detectar la diferencia entre Pre-LN y Post-LN. Y saber por qué ganó Pre-LN.
El relevo de la Fase 17 → Fase 18¶
La Fase 17 produce:
- Una clase
MiniGPTcongelada con un paso forward funcional. - Una configuración de arquitectura bloqueada (
config.yaml) — nunca cambia en la Fase 18. - Un inventario de parámetros en el que confías hasta el dígito.
- Una referencia numérica del paso forward (lab 03 de la Fase 17).
La Fase 18 lo recoge y añade: pérdida de entropía cruzada, bucle de entrenamiento, cómputo de gradientes, optimizador, planificador de tasa de aprendizaje, recorte de gradientes, checkpointing, gráfica de la curva de pérdida. El paso forward en sí no cambia.
Qué NO cubre este archivo¶
- La matemática de LayerNorm. Esbozada en §0 de
01-transformer-block.md, pero la derivación completa queda en la Fase 10. - La matemática de attention. Fase 15. La Fase 17 trata attention como una caja negra: tiene Q, K, V, proyección de salida, posiciones aplicadas con RoPE, una máscara causal y una forma fija.
- Decisiones de inicialización. Fase 18. La Fase 17 usa inicialización gaussiana simple de la Fase 10.
Siguiente: 01-transformer-block.md