Phase 07 - Lesson 01
Por qué Transformers — Los problemas con las RNN
Las RNN procesan los tokens uno a uno. Los Transformers procesan todos los tokens a la vez. Esa única apuesta arquitectónica cambió todas las curvas de escalamiento del deep learning después de 2017.
Tipo: Aprender Lenguajes: Python Requisitos previos: Fase 3 (Núcleo de Deep Learning), Fase 5 · 09 (Sequence-to-Sequence), Fase 5 · 10 (Mecanismo de Atención) Tiempo: ~45 minutos
El Problema
Antes de 2017, todos los modelos de secuencia de última generación del planeta — lenguaje, traducción, voz — eran redes neuronales recurrentes. Las LSTM y GRU ganaron benchmarks de traducción equivalentes a ImageNet durante media década. Eran la única herramienta que cualquiera tenía.
Tenían tres debilidades fatales. El cómputo secuencial significaba que no podías paralelizar a lo largo del eje del tiempo: el token t+1 necesita el estado oculto del token t. Una secuencia de 1.024 tokens significaba 1.024 pasos seriales en una GPU capaz de hacer 1.000.000 de operaciones de punto flotante por ciclo. El tiempo de reloj de entrenamiento escalaba linealmente con la longitud de la secuencia en hardware diseñado para el paralelismo.
Los gradientes que se desvanecen significaban que la información 50 tokens atrás ya estaba comprimida a través de 50 no linealidades. Las unidades recurrentes con compuertas (LSTM, GRU) suavizaron el aplastamiento pero nunca lo eliminaron. Las dependencias de largo alcance — "el libro que leí el verano pasado en un avión a Kyoto era…" — fallaban de forma rutinaria.
Los estados ocultos de ancho fijo significaban que el encoder exprimía toda la secuencia de origen en un solo vector antes de que el decoder viera nada. No importa si el origen tiene 5 tokens o 500; el cuello de botella tiene la misma forma.
El artículo de 2017 "Attention Is All You Need" propuso algo radical: abandonar la recurrencia por completo. Dejar que cada posición atienda a todas las demás posiciones en paralelo. Entrenar en una gran multiplicación de matrices en lugar de 1.024 secuenciales.
El resultado domina todas las modalidades para 2026. Lenguaje (GPT-5, Claude 4, Llama 4), visión (ViT, DINOv2, SAM 3), audio (Whisper), biología (AlphaFold 3), robótica (RT-2). Mismo bloque, entradas distintas.
El Concepto
La recurrencia como cuello de botella. Una RNN computa h_t = f(h_{t-1}, x_t). Cada paso depende del anterior. No puedes computar h_5 antes de h_4. En las GPU modernas con más de 10.000 núcleos paralelos, esto desperdicia el 99% del silicio en una secuencia larga.
La atención como broadcast. La self-attention computa output_i = sum_j(a_ij * v_j) para cada par (i, j) simultáneamente. Toda la matriz de atención N×N se llena en un solo matmul por lotes. Ningún paso depende de otro. A las GPU les encanta.
La aceleración no es una constante. Es la diferencia entre profundidad serial O(N) y profundidad serial O(1). En la práctica, los transformers entrenan de 5 a 10× más rápido por época en hardware equivalente con N=512, y la brecha se amplía con la longitud de la secuencia hasta que chocas con el muro de memoria O(N²) de la atención (que el Flash Attention solucionó después — ver la Lección 12).
Lo que cuestan los transformers. La memoria de la atención escala como O(N²). Para un contexto de 2K, bien. Para un contexto de 128K, necesitas ventanas deslizantes, extrapolación RoPE, tiling de Flash Attention o variantes de atención lineal. La recurrencia era O(N) tanto en tiempo como en memoria; los transformers cambian tiempo por memoria y luego recuperan el tiempo mediante el paralelismo.
El cambio de sesgo inductivo. Las RNN asumen localidad y proximidad temporal. Los transformers no asumen nada — cada par es un candidato para la atención. Por eso los transformers necesitan más datos para entrenar bien pero escalan más lejos una vez que los tienen. Chinchilla (2022) lo formalizó: dados suficientes tokens, un transformer siempre supera a una RNN con la misma cantidad de parámetros.
Constrúyelo
No hay red neuronal aquí — simulamos el cuello de botella central numéricamente para que sientas la diferencia en tu laptop.
Paso 1: medir la profundidad serial
Ver code/main.py. Construimos dos funciones. Una codifica una secuencia como una cadena de sumas (serial, como una RNN). La otra la codifica como una reducción paralela (broadcast, como la atención). La misma matemática, distinto grafo de dependencias.
def rnn_style(xs):
h = 0.0
for x in xs:
h = 0.9 * h + x # can't parallelize: h depends on previous h
return h
def attention_style(xs):
return sum(xs) / len(xs) # every x is independent
Cronometramos ambas en secuencias de hasta 100.000 elementos. La versión RNN es O(N) y un único pipeline de CPU. Incluso en Python puro, la reducción al estilo atención la supera en longitud ≥ 1.000 porque el sum() de Python está implementado en C e itera sin sobrecarga del intérprete por paso.
Paso 2: contar operaciones teóricas
Ambos algoritmos hacen N sumas. La diferencia es la profundidad de dependencia: cuántas operaciones deben ocurrir secuencialmente antes de que la siguiente pueda empezar. Profundidad de la RNN = N. Profundidad de la atención = log(N) con una reducción en árbol, o 1 con un scan paralelo. La profundidad, no el conteo de operaciones, decide el tiempo de GPU.
Paso 3: escalamiento empírico en secuencias largas
Imprimimos una tabla de tiempos que hace visible la brecha O(N). En una laptop Mac de 2026, las secuencias de menos de 1.000 elementos son demasiado rápidas para medirse. Las secuencias de 100.000 muestran un scan lineal limpio. Escala eso a un transformer de 16.384 tokens con un LSTM equivalente de 12 capas y verás por qué el tiempo de reloj de entrenamiento era un obstáculo en 2016.
Úsalo
Cuándo todavía elegir una RNN en 2026:
| Situación | Elige |
|---|---|
| Inferencia en streaming, un token a la vez, memoria constante | RNN o modelo de espacio de estados (Mamba, RWKV) |
| Secuencias muy largas (>1M tokens) donde la memoria de atención explota | Atención lineal, Mamba 2, Hyena |
| Dispositivo edge sin acelerador de matmul | RNN depthwise-separable todavía gana en FLOPs/vatio |
| Cualquier otra cosa (entrenamiento, inferencia por lotes, contexto hasta 128K) | Transformer |
Los modelos de espacio de estados (SSM) como Mamba son esencialmente RNN con una parametrización estructurada que les da lo mejor de ambos mundos: memoria de scan O(N), entrenamiento paralelo vía scan selectivo. Recuperan el 90% de la calidad del transformer con mejor escalamiento de contexto largo. En 2026, la mayoría de los laboratorios de frontera entrenan modelos híbridos SSM+transformer (por ejemplo Jamba, Samba) — la recurrencia no está muerta, es un componente.
Entrégalo
Ver outputs/skill-architecture-picker.md. La skill elige una arquitectura para un nuevo problema de secuencia dadas restricciones de longitud, throughput y presupuesto de entrenamiento. Siempre debe negarse a recomendar una RNN pura para ejecuciones de entrenamiento por encima de 1B tokens sin declarar el trade-off.
Ejercicios
- Fácil. Toma
rnn_styledecode/main.pyy reemplaza el estado oculto escalar por un vector de longitud 64 de estados ocultos. Vuelve a medir. ¿Cuánto crece la sobrecarga serial con la dimensión del estado oculto? - Medio. Implementa una suma de prefijos paralela (scan de Hillis-Steele) en Python puro. Verifica que produce la misma salida numérica que un scan serial en longitud 1024. Cuenta la profundidad.
- Difícil. Porta la reducción al estilo atención a PyTorch en GPU. Cronometra ambas mientras barres la longitud de la secuencia de 64 a 65.536. Grafica y explica la forma de la curva.
Términos clave
| Término | Lo que la gente dice | Lo que realmente significa |
|---|---|---|
| Recurrencia | "Las RNN son secuenciales" | Cómputo donde el paso t depende del paso t-1, forzando ejecución serial a lo largo del eje del tiempo. |
| Profundidad serial | "Qué tan profundo es el grafo" | La cadena más larga de operaciones dependientes; acota el tiempo de reloj incluso con hardware infinito. |
| Atención | "Deja que los tokens se miren entre sí" | Suma ponderada sum_j a_ij v_j donde a_ij proviene de un puntaje de similitud entre las posiciones i y j. |
| Ventana de contexto | "Cuánto ve el modelo" | Número de posiciones que una capa de atención puede recibir como entrada; el costo cuadrático de memoria escala aquí. |
| Sesgo inductivo | "Suposiciones incorporadas en la arquitectura" | Prior sobre cómo lucen los datos; las CNN asumen invariancia a la traslación, las RNN asumen proximidad temporal. |
| Modelo de espacio de estados | "RNN con álgebra detrás" | Recurrencia parametrizada para entrenamiento paralelo vía matrices estructuradas de espacio de estados. |
| Cuello de botella cuadrático | "Por qué el contexto cuesta tanto" | Memoria de atención = O(N²) en la longitud de la secuencia; el Flash Attention oculta las constantes, no el escalamiento. |
Lectura Adicional
- Vaswani et al. (2017). Attention Is All You Need — el artículo que mató la recurrencia en el NLP mainstream.
- Bahdanau, Cho, Bengio (2014). Neural MT by Jointly Learning to Align and Translate — donde nació la atención, acoplada a una RNN.
- Hochreiter, Schmidhuber (1997). Long Short-Term Memory — el artículo original del LSTM, para que conste.
- Gu, Dao (2023). Mamba: Linear-Time Sequence Modeling with Selective State Spaces — la respuesta recurrente moderna a los transformers.