las ecuaciones de esta slide
1:T′ = Decoder(hT),    hT = RNN(x1:T)(Ec. 1)
el esquema seq2seq clásico: toda la secuencia de entrada x1,…,xT se comprime en un único vector hT ∈ ℝdh, y el decoder genera la salida leyendo solo ese vector. T puede ser 5 o 5000; dh es fijo.
ht = tanh(W ht−1 + U xt)(la recurrencia)
cómo se construye hT paso a paso: el estado nuevo mezcla el estado anterior (vía W, dh×dh) con el token actual (vía U, dh×dx) y aplasta con tanh. Cada paso sobrescribe parte de lo que había: la memoria es un recurso en conflicto.
guion paso a paso
  1. Pon T = 10 con dh = 64. Factor de compresión 2.5: el embudo es ancho, hT respira. Para frases cortas la RNN va sobrada.
  2. Sube T hasta 200 sin tocar dh. El factor de compresión llega a 50× y los "números por token" caen a 0.32: cada token tiene derecho a menos de medio número del estado. La curva de abajo cruza la línea de 1 número/token mucho antes.
  3. Compensa subiendo dh a 512. El ratio mejora (factor 6.3)… pero el lector avisa: el coste por paso es dh² y se ha multiplicado por 64. Comprar memoria a base de dh sale carísimo.
  4. Vuelve a T = 100, dh = 64, el caso típico de un forecast con 2 años de historia semanal. Factor 25×: este es el régimen real en el que trabajan los seq2seq de demanda. Recuerda este número para la slide siguiente.
Comprueba que entiendes: ¿por qué no basta con hacer dh gigante?
Por dos costes que crecen más deprisa que el beneficio. Primero, la matriz W tiene dh² parámetros y cada paso de la recurrencia cuesta dh² operaciones: duplicar la memoria cuadruplica el coste y los datos necesarios para estimar W. Segundo, aunque la capacidad estática diera, el entrenamiento no consigue usarla: el gradiente que enseña a la red a conservar el token 1 debe atravesar T pasos y se desvanece (slide "Gradiente"). El cuello de botella no es solo de tamaño, es de optimización.

Setup. Arriba ves el embudo: T tokens de entrada, cada uno un embedding de dx = 16 números (en gris), tienen que pasar por el tubo de un único estado hT de dh números (celdas doradas). Abajo, la curva "números por token" dh/T en función de T para tu dh elegido, con la línea de referencia en 1: por debajo de ella, el estado ni siquiera puede dedicar un número entero a cada token. Piensa en el caso Inditex del curso: 156 semanas de historia de una tienda, o una reseña de cliente de 200 palabras, comprimidas en 64 números.

Juega. Mueve T con dh fijo y mira cómo el embudo se estrangula: la entrada crece, el tubo no. Luego intenta compensar con dh y observa en el lector el precio: parámetros de W y coste por paso crecen con dh².

Lee así. El factor de compresión T·dx/dh es cuántos números de entrada compiten por cada hueco del estado. No es una metáfora: es una cota dura de cuánta información puede sobrevivir, igual que resumir El Quijote en un post-it.

Mensaje. La capacidad informacional de hT es fija; la entrada no lo es. Todo lo demás del día (atención, Transformer) nace de esta asimetría. La slide siguiente la mide en vivo con la recurrencia de verdad.

Términos. seq2seq: arquitectura encoder–decoder para mapear secuencia a secuencia. hT: estado oculto final, el "resumen" de toda la entrada. dx: dimensión del embedding de cada token. Factor de compresión: T·dx/dh.

las ecuaciones de esta slide
ht = tanh(W ht−1 + U xt),    δt = ‖ht − h′t
el experimento: corro la recurrencia dos veces, idénticas salvo el primer token (x1 vs x′1), y mido en cada paso la distancia δt entre los dos estados. Si δT ≈ 0, el estado final ya no distingue qué primer token hubo: la información se ha perdido de verdad, no metafóricamente.
δt ≈ ‖Jt Jt−1&cdots;J2 δ1‖,   Js = diag(1−hs2) W
por qué decae: la diferencia se propaga multiplicando T−1 jacobianos. Cada uno encoge (ganancia de W por la derivada de tanh, que es ≤ 1), así que δt cae exponencialmente con t. Es la misma cadena de productos que machaca al gradiente en backprop.
guion paso a paso
  1. Con g = 0.9 y T = 80, mira el panel superior. La curva log₁₀δt baja en línea recta: decaimiento exponencial. Al llegar a t = 80 la señal ronda 10−9–10−12: el primer token es irrecuperable y el badge lo declara.
  2. Baja g a 0.5. La pendiente se hace aún más empinada: a los 20 pasos ya estás por debajo de 10−6. Olvido casi instantáneo.
  3. Sube g a 1.5–2.0. δt deja de caer y se estabiliza en orden 1: la señal "sobrevive"… pero el panel inferior te enseña que estás en la zona caótica, donde cualquier perturbación también sobrevive y todo se mezcla con todo. No es memoria útil.
  4. Pulsa "nueva muestra" varias veces en cada régimen. Las curvas cambian en lo fino, jamás en la pendiente: el olvido no es mala suerte de una W concreta, es estructural.
Comprueba que entiendes: ¿por qué subir la ganancia g no arregla la memoria?
Porque la recurrencia solo tiene dos regímenes y ninguno sirve. Con g < 1 los jacobianos encogen y δt → 0: olvido exponencial. Con g bastante mayor que 1 las perturbaciones no se extinguen, pero entonces todas las perturbaciones crecen: el estado se vuelve caótico, dos frases casi idénticas acaban en estados completamente distintos, y el gradiente explota al entrenar. La frontera (g ≈ 1, "edge of chaos") es una cuerda floja imposible de mantener para todos los tiempos y datos a la vez. LSTM y GRU alivian esto con puertas; la atención lo elimina: no hay cadena.

Setup. Esto no es un esquema: el navegador está ejecutando ahora mismo la recurrencia ht = tanh(W ht−1 + U xt) con dh = 32, W aleatoria de ganancia g (entradas N(0, g²/dh), semilla reproducible) y T tokens. La corro dos veces cambiando solo x1 y pinto arriba log₁₀ de la distancia δt entre ambos estados en cada paso. Abajo, el barrido completo: δT final en función de g, con tu g actual marcado, y las tres zonas (olvido / frontera / caos).

Juega. El slider de g es el "volumen" de la matriz W. Busca un g que conserve el primer token sin caos: comprobarás que no existe. Piensa en churn telco: el evento que predice la fuga (un impago hace 14 meses) está al principio de la secuencia; con g = 0.9 su rastro en hT es 10−9 veces el ruido.

Lee así. El eje y es logarítmico: una recta ahí abajo es una exponencial. Cada paso de la cadena multiplica la señal por un factor < 1 (ganancia × derivada de tanh); T pasos son ese factor elevado a T.

Mensaje. El estado oculto es un canal con fuga: la información del pasado lejano se diluye exponencialmente en el forward y el gradiente que querría corregirlo se desvanece igual en el backward. Necesitamos un mecanismo que llegue al token 1 sin atravesar la cadena. Eso es la atención.

Términos. δt: distancia entre los dos estados gemelos en el paso t; mide cuánta huella queda del primer token. Jacobiano Js: matriz que dice cómo una perturbación en hs−1 pasa a hs. Edge of chaos: frontera g ≈ 1 entre olvido y caos.

las ecuaciones de esta slide
αj = exp(s(q, kj))Σi exp(s(q, ki)),    Att(q; K, V) = Σj αj vj(Ec. 2)
la atención completa en dos gestos: la softmax convierte los scores en pesos αj positivos que suman 1, y la salida es la media ponderada de los values con esos pesos. Nada más: la atención es elegir cuánto pesa cada token, no procesar la secuencia en orden.
s(q, k) = qk = Σm qmkm(el score)
la afinidad query–key es un producto punto: grande y positivo si los vectores apuntan en la misma dirección, cero si son perpendiculares, negativo si se oponen. La query dice "qué busco"; cada key dice "qué ofrezco"; el score mide el encaje.
guion paso a paso
  1. No toques nada: q = (2, 1), el ejemplo exacto del deck. Scores K q = (2, 1, 3) que escalados dan (1.414, 0.707, 2.121); α = (0.284, 0.140, 0.576) y contexto c = (0.860, 0.716): los mismos números de la transparencia "ejemplo a mano", ahora vivos.
  2. Lleva la query hacia (−0.5, 2), tumbada hacia k2. El peso α2 pasa de 0.14 a ≈ 0.53 y la flecha del contexto c se tumba hacia v2 = (0, 1): c ≈ (0.47, 0.91). La misma frase responde distinto a otra pregunta.
  3. Pon q = (0, 0). Los tres scores valen 0, la softmax devuelve α = (⅓, ⅓, ⅓) y c = (0.667, 0.667): sin pregunta, la atención es la media simple de los values.
  4. Con q = (2, 2), desactiva el escalado √2. Los scores doblan su separación efectiva y α3 se endurece. El escalado mantiene la atención en zona blanda: lo cuantificamos dos slides más adelante.
Comprueba que entiendes: ¿puede el contexto c salir del triángulo que forman los values?
No. Los pesos αj son positivos y suman 1, así que c = Σαjvj es una combinación convexa: vive siempre dentro del triángulo (la envolvente convexa) de v1, v2, v3. Si un αj → 1, c → vj (atención dura = copiar un token); si la atención es uniforme, c es el baricentro. La atención interpola contenidos, nunca extrapola.

Setup. Frase de juguete de tres tokens con embeddings 2D: los keys son k1 = (1, 0), k2 = (0, 1), k3 = (1, 1) y, para poder dibujarlo todo en el mismo plano, los values coinciden con los keys (V = K), exactamente como en el ejemplo a mano del deck. Arriba: el plano con los keys (tinta), tu query (flecha dorada) y el vector contexto c (flecha dorada gruesa). Abajo: los pesos αj como barras sobre los tokens, con los scores ej = q·kj impresos. Todo se recalcula con cada movimiento del slider: producto punto, escalado, softmax, media ponderada.

Juega. La query es la pregunta. Gírala por el plano y mira el orden de las barras cambiar; el contexto c persigue siempre a los values con más peso. En el caso Netflix del curso: los keys son las películas vistas, la query es "¿qué le apetece ahora?", y c es el perfil instantáneo con el que se puntúa el catálogo.

Lee así. En el lector, Σαj = 1.000 siempre: la softmax reparte un presupuesto fijo de atención. Un token solo puede ganar peso quitándoselo a otros.

Mensaje. No hay estado que arrastrar ni orden que respetar: la salida se construye mirando directamente todos los tokens y ponderándolos. El cuello de botella de la slide anterior ha desaparecido por construcción.

Términos. query q: qué busco. key kj: etiqueta de cada token, qué ofrece. value vj: contenido que se llevará quien lo atienda. score ej: afinidad q·kj. contexto c: la media ponderada Σαjvj.

las ecuaciones de esta slide
e = (q·k1, q·k2, q·k3) = (1, 0.5, −1)(paso 1: scores)
con q = (1, 0): q·k1 = 1·1 + 0·0 = 1; q·k2 = 0.5; q·k3 = −1. El tercer key se opone a la query: score negativo, casi vetado.
αj = eejee1+ee2+ee3 = (0.574, 0.348, 0.078)(paso 2: softmax)
e1 = 2.718, e0.5 = 1.649, e−1 = 0.368; suma 4.735. El deck redondea a (0.56, 0.34, 0.10); aquí lo calculamos exacto y el lector te lo enseña con tres decimales.
ŷ = Σj αjvj = 0.574·10 + 0.348·20 + 0.078·30 = 15.04(paso 3: salida)
la salida tira hacia v1 = 10 porque la query se parece a k1. Cambia la query y cambia el reparto: eso es todo el mecanismo.
tokenkjejexp(ej)αjαjvj
guion paso a paso
  1. Valores por defecto (θ = 0°, ‖q‖ = 1, sin escalar): es el ejemplo "cálculo paso a paso" del deck. La tabla reproduce los tres pasos: e = (1, 0.5, −1), α = (0.574, 0.348, 0.078) que suman 1.000, y ŷ = 15.04 (el deck redondeaba a 15.4).
  2. Gira θ hasta 135°. Ahora q apunta hacia k3 = (−1, 0.5): α3 sube a ≈ 0.66 y la salida salta a ŷ ≈ 25.5. La misma memoria, otra pregunta, otra respuesta.
  3. Vuelve a θ = 0° y sube el módulo a 3. Los scores se triplican, e3 aplasta al resto: α1 ≈ 0.82 y ŷ baja hacia 10. Queries largas = atención dura.
  4. Con el módulo en 3, activa √2. Los scores se dividen por 1.414 y los pesos se ablandan visiblemente. Es el mismo botón que el Transformer lleva de serie.
Comprueba que entiendes: ¿puede ŷ valer 35 para alguna query?
No. ŷ es una combinación convexa de los values {10, 20, 30}: pesos positivos que suman 1 implican 10 ≤ ŷ ≤ 30, y los extremos solo se alcanzan en el límite de atención dura (αj → 1 sobre el value mínimo o máximo). La atención recupera y mezcla contenido almacenado; no inventa valores nuevos. Si necesitas salir del rango, eso lo hará la capa siguiente de la red, no la atención.

Setup. El ejemplo a mano del deck con sus números exactos: keys k1 = (1, 0), k2 = (0.5, 0.5), k3 = (−1, 0.5) y values escalares v = (10, 20, 30); piensa en tres transacciones con importes 10, 20 y 30 €. Arriba, el plano con los keys y tu query (que ahora controlas en polares: ángulo y módulo). Abajo, las barras αj y, en la recta inferior, la salida ŷ deslizándose entre 10 y 30. La tabla central es el cálculo completo columna a columna: nada está precocinado, cada celda se recalcula al mover un slider.

Juega. Haz el barrido completo de θ de −180° a 180° despacio y observa la salida ŷ recorrer su rango: la atención es una función continua de la query. No hay saltos: la softmax suaviza la selección que un "argmax" haría a tirones.

Lee así. Columnas de la tabla en orden de cálculo: producto punto → exponencial → normalización → mezcla. Comprueba en cada posición que Σαj = 1.000 y que ŷ queda entre el menor y el mayor value.

Mensaje. Sabes hacer atención a mano: tres productos punto, tres exponenciales, una división y una media. La práctica del día te pide exactamente esto en numpy, verificado contra torch.nn.functional.scaled_dot_product_attention.

Términos. polares: la query expresada como ángulo + módulo; el ángulo elige a quién mirar, el módulo decide cuán dura es la elección. combinación convexa: media ponderada con pesos positivos que suman 1.

las ecuaciones de esta slide
αj(τ) = exp(ej/τ)Σi exp(ei/τ),    H(α) = −Σj αj log αj
la softmax con temperatura τ: dividir los scores por τ grande los aplana (atención difusa, α → uniforme); τ pequeña los exagera (atención dura, α → argmax). La entropía H mide en qué punto estás: log 3 ≈ 1.099 nats si uniforme sobre 3 tokens, 0 si toda la masa cae en uno.
Var(q·k) = Σm=1..dk Var(qmkm) = dk  ⇒   Att(Q,K,V) = softmax(Q K√dk) V(Ec. 3)
por qué el Transformer divide por √dk: con componentes independientes de varianza 1, el producto punto suma dk términos y su desviación típica crece como √dk. Sin corregirlo, a dk = 512 los scores rondan ±22 y la softmax se satura en argmax desde el primer paso de entrenamiento. Dividir por √dk devuelve los scores a escala ±1: es elegir la temperatura correcta.
guion paso a paso
  1. Con τ = 1, lee el lector. Scores (1, 0.5, −1) de la slide anterior, α = (0.574, 0.348, 0.078) y entropía H = 0.884 nats, frente al máximo log 3 = 1.099: atención moderadamente concentrada.
  2. Sube τ a 10. α ≈ (0.361, 0.343, 0.296) y H = 1.095 ≈ log 3: atención difusa, casi una media simple. El punto dorado del panel inferior se pega al techo de la curva.
  3. Baja τ a 0.1. α = (0.993, 0.007, 0.000) y H = 0.04: argmax con otro nombre, atención dura que copia el token 1 e ignora el resto.
  4. Con dk = 512, pulsa "otra semilla" y mira la segunda línea del lector. La desviación típica medida de q·k sale ≈ 22–23, clavada a √512 = 22.6; tras dividir por √dk vuelve a ≈ 1. Baja dk a 4 y verás ≈ 2 = √4. La regla del Transformer, verificada por Monte Carlo delante de ti.
Comprueba que entiendes: ¿por qué la varianza del producto punto es exactamente dk?
El score es una suma de dk productos qmkm. Si cada componente es independiente con media 0 y varianza 1, cada producto tiene media 0 y varianza E[q²]E[k²] = 1, y las varianzas de sumandos independientes se suman: Var = dk. La desviación típica crece como √dk, así que dividir el score por √dk lo devuelve a varianza 1 sea cual sea la dimensión. Es un control de temperatura automático: sin él, modelos grandes nacerían con la atención saturada y gradientes casi nulos a través de la softmax.

Setup. Dos experimentos en uno. Arriba, los tres scores del ejemplo a mano, e = (1, 0.5, −1), pasados por la softmax con la temperatura τ que elijas: las barras son α(τ), de uniforme a argmax. Abajo, la curva completa de la entropía H(α(τ)) con tu τ marcada en dorado, entre las dos referencias: log 3 (difusa) y 0 (dura). En paralelo, el lector corre un Monte Carlo real con la semilla reproducible: sortea 300 pares (q, k) con componentes N(0, 1) en dimensión dk y mide la desviación típica empírica de q·k, antes y después de dividir por √dk.

Juega. El slider de τ es logarítmico (0.1 a 10). Recorre la curva de entropía de punta a punta y localiza dónde estaba el ejemplo de la slide anterior (τ = 1). Después juega con dk: estás midiendo el fenómeno exacto que motivó el √dk del paper del Transformer.

Lee así. Las probabilidades del lector suman 1.000 en cualquier régimen; lo que cambia es cómo se reparten. La entropía es el número que resume el reparto: úsala como diagnóstico cuando entrenes (atención siempre saturada o siempre uniforme = algo va mal con la escala).

Mensaje. El misterioso √dk de la fórmula Att(Q, K, V) = softmax(QK/√dk)V no es decoración: es fijar la temperatura de la softmax para que la atención nazca blanda y entrenable, independientemente de la dimensión.

Términos. τ: temperatura; divide los scores. H(α): entropía de los pesos, en nats; máxima si uniforme, 0 si argmax. saturación: régimen donde la softmax ya es un argmax y su gradiente ≈ 0. √dk: la temperatura que compensa el crecimiento del producto punto con la dimensión.

las ecuaciones de esta slide
∂hT∂xt = u (1−ht2s=t+1..T w (1−hs2)(cadena RNN)
el gradiente que enseña a la RNN a usar el token t debe atravesar T−t factores, cada uno = peso recurrente × derivada de tanh (que es ≤ 1). Producto de muchos números < 1 → se desvanece; de números > 1 → explota o satura la tanh y muere igual. La distancia se paga en factores multiplicativos.
∂c∂vj = αj(camino directo de la atención)
en c = Σαjvj, el gradiente respecto de cualquier token es su peso αj, un solo salto, da igual que el token esté a 1 o a 1000 posiciones. La distancia desaparece de la ecuación: ese es el cambio estructural.
guion paso a paso
  1. Con w = 0.9, lleva Δ a 30. El gradiente RNN ronda 4·10−3 mientras el camino directo de la atención (α = 1/60 ≈ 0.017, línea dorada plana) ya le saca casi un orden de magnitud. La cruz marca tu Δ.
  2. Lleva Δ a 59 (el primer token). RNN ≈ 2·10−5: unas mil veces menos señal de aprendizaje que por el camino directo. Es la versión backward de la dilución que mediste en la slide "Señal x₁".
  3. Sube w a 1.5. Lejos de arreglarse, la curva se hunde a 10−13 en Δ = 30: el estado satura la tanh, su derivada (1−h²) ≈ 0 y mata el producto. Y baja w a 0.7: desvanecimiento aún más rápido. No existe w que haga plana esa curva.
  4. Pulsa "otra entrada" varias veces. Los dientes de sierra cambian (dependen de la secuencia concreta), la pendiente exponencial no. La línea dorada ni se inmuta.
Comprueba que entiendes: ¿por qué el camino de la atención es O(1) y no depende de Δ?
Porque entre la salida c y el token vj no hay cadena: c = Σαjvj conecta cada token con la salida mediante una única arista con peso αj, y ∂c/∂vj = αj directamente. En la RNN el grafo de cómputo obliga a pasar por todos los estados intermedios y el gradiente es un producto de Δ jacobianos; en la atención el grafo tiene un salto de longitud 1 hacia cada token. La distancia sigue existiendo en la frase, pero ya no existe en el grafo por el que viaja el gradiente.

Setup. Backprop de verdad sobre una RNN escalar ht = tanh(w ht−1 + u xt) con T = 60, u = 0.5 y entrada aleatoria reproducible. Para cada distancia Δ el canvas pinta |∂hT/∂xT−Δ|, calculado con la regla de la cadena exacta (el producto de la izquierda del panel de ecuaciones), en escala logarítmica. La línea dorada horizontal es el camino directo de la atención con pesos uniformes: |∂c/∂vj| = αj = 1/60, idéntico a cualquier distancia. Abajo, el resumen estructural: para conectar dos tokens separados Δ posiciones, la RNN necesita Δ aristas encadenadas y la atención exactamente 1.

Juega. Tu objetivo es encontrar un w que mantenga el gradiente RNN por encima de la línea dorada a todas las distancias. Comprobarás que el slider no tiene ese valor: pequeño se desvanece, grande satura. El forecast de demanda con estacionalidad anual (Δ = 52 semanas) vive exactamente en la zona muerta de la curva.

Lee así. Eje y logarítmico: cada 10× de caída es un orden de magnitud menos de señal de aprendizaje. Donde la curva de la RNN cruza por debajo de la dorada, la atención aprende esa dependencia más rápido que la RNN, por pura geometría del grafo de cómputo.

Mensaje. El deck lo enuncia ("el gradiente se desvanece o explota"); aquí lo has medido. La atención no "mejora" la cadena: la elimina. Camino O(Δ) → camino O(1).

Términos. Δ: distancia en posiciones entre el token que influye y la salida. desvanecimiento: producto de factores < 1 a lo largo de la cadena. saturación: tanh en sus mesetas, derivada ≈ 0. camino directo: arista única salida–token con peso αj.

las ecuaciones de esta slide
CRNN ≈ T·d2  (T pasos en serie),    Catt ≈ T2·d  (1 paso en paralelo)
la RNN hace T veces una multiplicación matriz–vector de d×d; la atención construye los T² scores, cada uno un producto punto de dimensión d. Igualando T·d² = T²·d, las dos curvas se cruzan en T = d: secuencias más cortas que la dimensión favorecen a la atención en FLOPs; más largas, a la RNN.
profundidad secuencial:   RNN = T,   atención = 1
el dato que decide en la práctica: los FLOPs de la atención son independientes entre sí y la GPU los hace a la vez; los de la RNN están encadenados (ht espera a ht−1) y ningún hardware puede paralelizar una cadena. Tiempo ≈ profundidad, no FLOPs.
guion paso a paso
  1. Defaults: T = 1024, d = 256. El cruce está en T = d = 256 (punto donde se cortan las curvas); con T = 1024 la atención hace T/d = 4× más FLOPs que la RNN. Y aun así gana en tiempo: mira el panel de profundidad.
  2. Sube d a 2048 sin tocar T. Ahora T < d y la atención es más barata también en FLOPs (ratio 0.5×): con dimensiones de modelo modernas, las frases normales quedan a la izquierda del cruce.
  3. Lleva T a 8192 con d = 256. La atención paga 32× más FLOPs… pero su profundidad sigue siendo 1 contra 8192 pasos encadenados de la RNN. En una GPU con miles de cores, la cadena pierde.
  4. Recorre T de punta a punta mirando solo el panel inferior. La barra de la RNN crece linealmente; la de la atención no se mueve de 1. Esta invariancia es la que permitió entrenar con billones de tokens.
Comprueba que entiendes: si la atención hace más FLOPs, ¿por qué entrena más rápido?
Porque FLOPs y tiempo solo coinciden en hardware secuencial. Una GPU ofrece decenas de miles de unidades de cálculo simultáneas: los T² scores de la atención son independientes y se reparten entre todas; el reloj avanza una vez. La RNN, con muchos menos FLOPs, los tiene encadenados en T dependencias: la GPU ejecuta uno, espera, ejecuta el siguiente, y el reloj avanza T veces. El throughput del entrenamiento lo fija la profundidad del grafo, y ahí 1 contra T no tiene color. Por eso "Attention Is All You Need" cambió la industria: hizo el entrenamiento embarazosamente paralelo.

Setup. Arriba, FLOPs por capa en función de T (ambos ejes logarítmicos) para tu d elegida: curva tinta = recurrencia T·d², curva dorada = atención T²·d. El punto de cruce T = d está marcado, y la línea vertical es tu T actual. Abajo, la otra métrica: pasos que el hardware debe ejecutar en orden (profundidad secuencial), T para la RNN frente a 1 para la atención, en escala log.

Juega. Los dos sliders son potencias de 2, como en la práctica. Encuentra las combinaciones realistas: un BERT base (d = 768, T = 512) queda a la izquierda del cruce (atención barata incluso en FLOPs); un documento largo (T = 8192, d = 256) a la derecha. El lector siempre dice quién gana en FLOPs, en cuánto, y quién gana en profundidad.

Lee así. En escala log-log, T·d² y T²·d son rectas de pendiente 1 y 2: la atención siempre acaba por encima para T suficientemente grande. Ese es el precio estructural que la slide siguiente convierte en gigabytes.

Mensaje. La atención compra profundidad 1 pagando FLOPs T². En GPU, el cambio sale muy a cuenta hasta que T se hace enorme; ahí empieza la historia de Mamba y las alternativas sub-cuadráticas del Día 10.

Términos. FLOPs: operaciones de coma flotante; proxy de coste de cómputo. profundidad secuencial: longitud de la cadena de dependencias que no se puede paralelizar. cruce T = d: donde T·d² = T²·d.

las ecuaciones de esta slide
mem(QK) = T2 · bytes,    Tmax = √M√bytes
la matriz de scores tiene T² entradas; en float32 son 4 bytes cada una. Despejando, una GPU con M bytes de memoria aguanta como mucho Tmax = √(M/4) tokens si materializa la matriz completa: con 48 GiB salen ≈ 113 500 tokens. La memoria, no el cómputo, es el primer muro del contexto largo.
RNN: O(dh)  ·  atención: O(T2)  ·  SSM (Mamba): O(N) con N fijo(tabla del día)
la comparativa de memoria de la nota técnica: la RNN arrastra un estado de tamaño fijo, la atención una matriz cuadrática, y los SSM del Día 10 recuperan el estado fijo sin renunciar al entrenamiento paralelo.
modelocoste/tiempomemoriaaquí (T, d=512)
guion paso a paso
  1. Pon T = 16 000 en float32. La matriz pesa ≈ 0.95 GiB: cabe de sobra (badge verde frente a la línea de 48 GiB de una A6000).
  2. Sube a T ≈ 128 000 (el contexto de GPT-4). ≈ 61 GiB solo en scores, de una sola capa y una sola cabeza: badge rojo, no cabe ni en la A6000 de 48 GiB. Es el número del deck.
  3. Activa float16. La curva entera baja a la mitad (≈ 31 GiB): cabe en una H100 de 80 GiB, sigue sin caber en la A6000. La precisión es una palanca, no una solución.
  4. Lee Tmax en el lector y crúzalo con la curva. fp32 y 48 GiB dan Tmax ≈ 113 500: coincide con el "~110K" del deck. Todo contexto mayor exige trucos (Flash Attention, KV-cache, paginación).
Comprueba que entiendes: entonces, ¿cómo pueden Claude o Gemini ofrecer 200K–1M tokens?
Porque nadie materializa la matriz T×T completa. Flash Attention calcula la softmax por bloques y recomputa en lugar de almacenar: la memoria baja de O(T²) a O(T) manteniendo el resultado exacto. El KV-cache guarda solo K y V ya calculados (T·d números, lineal) para no repetir trabajo al generar. Paged Attention (vLLM) trocea ese cache en páginas como un sistema operativo. Y los SSM tipo Mamba directamente cambian el mecanismo para que el estado sea de tamaño fijo. El T² de la fórmula sigue ahí; la ingeniería decide cuánto de él se toca a la vez.

Setup. Arriba, los GiB que ocupa la matriz de scores QK en función de T (ejes log-log), con las líneas de referencia de dos GPUs reales: A6000 (48 GiB) y H100 (80 GiB). Tu T actual es el punto dorado; el badge dice si cabe o no en la A6000. Abajo, la memoria de los tres mecanismos del curso para tu mismo T con d = 512: estado RNN (dh números), matriz de atención (T²) y estado SSM (N = 16 por canal, fijo), en barras logarítmicas. La tabla es la de la nota técnica del día, con tus números en la última columna.

Juega. El slider de T es logarítmico, de 1 000 a 250 000 tokens: de un email a un libro. Busca el T exacto donde el badge cambia de color en fp32 y compáralo con el Tmax teórico del lector: coinciden porque son la misma cuenta.

Lee así. En log-log la curva T² es una recta de pendiente 2: cada 10× de contexto multiplica la memoria por 100. Contra eso no se puede comprar hardware: hay que cambiar el algoritmo o el mecanismo.

Mensaje. El Transformer paga su calidad con memoria O(T²). Para informes de 500 páginas (caso RAG del curso) la solución no es una GPU más grande: es no materializar la matriz, o no usar atención densa. Día 10.

Términos. GiB: 230 bytes. KV-cache: almacén lineal de keys y values ya calculados para la generación. Flash Attention: atención exacta por bloques, memoria O(T). SSM: modelo de espacio de estados con memoria fija (Mamba, Día 10).

las ecuaciones de esta slide
etj = qt·kjτ,    αtj = exp(etj)Σi exp(eti),    ct = Σj αtj vj
atención encoder–decoder, una fila por palabra generada: la query qt de la palabra inglesa t puntúa los keys kj de todas las palabras españolas, la softmax normaliza por filas (cada fila de la matriz suma 1) y el contexto ct recoge los values de las palabras fuente que más encajan. La matriz [αtj] completa es el alineamiento aprendido entre los dos idiomas.
guion paso a paso
  1. Con t = 1 estás generando "black". La fila resaltada de la matriz pone casi todo su peso en "negro"… que es la TERCERA palabra española: el alineamiento se cruza porque el adjetivo va detrás en español y delante en inglés. Mueve a t = 2 ("cat") y verás el cruce simétrico hacia "gato".
  2. Recorre t de 0 a 5 mirando las barras de abajo. Cada palabra generada ilumina su pareja española con α ≈ 0.9 y reparte las migajas: la matriz es casi una permutación, no la identidad.
  3. Sube el ruido σ a 0.6. Los embeddings se ensucian, la diagonal permutada se emborrona y la entropía de la fila sube: así se ve una atención mal entrenada (o un par de idiomas difícil).
  4. Con σ = 0.15, sube τ a 2. Mismos scores, atención difusa: cada palabra inglesa mira un poco a todas las españolas. La temperatura de la slide "Softmax", ahora en un caso real.
Comprueba que entiendes: ¿qué significa una columna de la matriz que nadie mira (toda blanca)?
Que ninguna palabra generada atiende a esa palabra fuente: su contenido no se usa en la traducción. A veces es correcto (palabras función que el otro idioma omite: el "do" inglés al traducir a español); a veces es un error de traducción por omisión. Las columnas, a diferencia de las filas, NO tienen por qué sumar 1: la softmax normaliza filas. Por eso los sistemas de traducción profesionales monitorizan la "cobertura" (suma por columnas) para detectar palabras fuente abandonadas.

Setup. Frase española "el gato negro duerme en casa" y su traducción "the black cat sleeps at home". Cada palabra lleva un embedding de juguete en ℝ6: la dirección de su concepto (DET, GATO, NEGRO, DORMIR, EN, CASA) más ruido gaussiano de tamaño σ con semilla reproducible. Las palabras inglesas hacen de queries; las españolas, de keys. Arriba, la matriz de atención 6×6 completa como heatmap (blanco → dorado → sepia con la rampa del curso), con tu fila t enmarcada; abajo, esa fila como barras sobre las palabras fuente. Todo sale de productos punto y softmax calculados en vivo, no de una matriz pintada a mano.

Juega. El slider t es el decoder avanzando palabra a palabra. La pareja negro/black–cat/gato es el detalle importante: la atención aprende el reordenamiento entre idiomas sin que nadie se lo programe, porque la afinidad semántica (producto punto) ignora las posiciones.

Lee así. El lector te da, para tu fila: la palabra fuente más atendida, su peso αmax, la suma de la fila (1.000 siempre) y la entropía de la fila como medida de nitidez del alineamiento.

Mensaje. Esto es lo que cambió Google Translate en 2017: el decoder dejó de leer un hT exhausto y pasó a consultar cada palabra fuente justo cuando la necesita. La matriz de atención es además un mapa interpretable de esa consulta, gratis.

Términos. alineamiento: correspondencia palabra-a-palabra entre frase fuente y destino. fila t: a qué miro cuando genero la palabra t; suma 1. columna j: cuánto se usa la palabra fuente j; no tiene por qué sumar 1. cobertura: suma por columnas, diagnóstico de omisiones.

las ecuaciones de esta slide
ej = q·kjτ,   α = softmax(e),   c = Σj αj vj,    P(churn) = σ(wc + b)
el pipeline completo de un modelo de churn con atención: cada evento del historial es un key/value con rasgos (recencia, severidad, señal de riesgo), la query es la pregunta de negocio, el contexto c resume el historial ponderado por relevancia, y una regresión logística final convierte c en probabilidad de fuga. Los αj son, gratis, el "qué ha mirado el modelo" que exige el área de negocio (y el regulador bancario).
guion paso a paso
  1. Con λ = 1 (pregunta churn) e impago reciente (m = 2), mira las barras. El peso se concentra en el impago (α ≈ 0.6), con la reclamación y la visita a la competencia repartiéndose casi todo el resto; P(churn) ≈ 0.89. El "alta de hace 3 años" pesa ≈ 0.
  2. Lleva λ a 0 (pregunta upsell). El MISMO historial reordena sus pesos: ahora domina el "uso normal de esta semana" (α ≈ 0.86) y P cae a ≈ 0.2. La query cambia qué pasado importa: eso es exactamente lo que un hT fijo no puede hacer.
  3. Vuelve a λ = 1 y envejece el impago hasta m = 24 meses. Su α se desploma de ≈ 0.6 a ≈ 0.08 y el protagonismo pasa a la visita a la competencia; P(churn) apenas baja (0.89 → ≈ 0.84) pero la explicación de la predicción es otra. La acción comercial correcta cambia aunque el riesgo no.
  4. Barre λ despacio de 0 a 1 mirando la curva inferior. P(λ) no es una recta: hay un codo donde la atención "cambia de tema". La media ponderada es lineal en los values, pero los pesos responden de forma no lineal a la query.
Comprueba que entiendes: ¿los pesos α son LA explicación causal de la predicción?
No exactamente: son una atribución de lectura (qué miró el modelo al construir c), no un contraste causal (qué pasaría si el evento no hubiera ocurrido). Pero para el gestor son oro operativo: si el 60% del peso está en un impago, la llamada de retención habla del plan de pagos, no de la subida de tarifa. En banca (BBVA) este tipo de mapa de atención se usa además como evidencia de explicabilidad ante el regulador; la validación causal seria se hace aparte, con contrafactuales o perturbaciones como la que acabas de hacer con el slider de antigüedad.

Setup. Un cliente de telco con 8 eventos en su historial, del alta hace 3 años al uso de esta semana. Cada evento lleva 3 rasgos en [0, 1]: recencia (1 = ayer), severidad y señal de riesgo; esos rasgos son su key y su value. La query del modelo se interpola con λ entre dos preguntas de negocio reales: detectar fuga (pesa severidad y riesgo) o detectar oportunidad de venta (pesa recencia y salud de la relación). Arriba, los pesos αj de cada evento como barras horizontales etiquetadas; abajo, la curva P(churn) en función de λ con tu posición marcada. El slider de antigüedad mueve de verdad el rasgo de recencia del impago (recencia = e−m/6) y recalcula todo el pipeline.

Juega. Eres el científico de datos del caso churn del curso: con los dos sliders puedes auditar qué mira el modelo según la pregunta y según la frescura de la evidencia. Fíjate en que Σα = 1.000 en el lector: el presupuesto de atención se reparte, no se crea.

Lee así. Las barras son la columna "por qué" del informe que entregarías a retención: top de eventos con su peso. El número P(churn) por sí solo no dispara ninguna acción útil; el par (P, α) sí: a quién llamar y de qué hablarle.

Mensaje. La atención no es solo arquitectura para el Transformer: es una pieza de negocio. Pondera historial heterogéneo, responde a preguntas distintas sobre los mismos datos y deja un rastro interpretable. Con esto y el Día 09 (self-attention) tienes el Transformer completo.

Términos. evento: transacción o interacción del historial, con sus rasgos. query de negocio: la pregunta que el modelo lanza al historial. σ(·): sigmoide, convierte el score final en probabilidad. atribución: reparto del peso de la predicción entre los eventos.

1 — El cuello de botella
Slides: Bottleneck · Señal x₁
"Un hT de dimensión fija debe resumir una entrada de longitud arbitraria, y la recurrencia que lo construye olvida exponencialmente: lo mediste con el forward real (δT ≈ 10⁻⁹ para T = 80). Más dh cuesta dh² y no cura el olvido."
2 — La atención como media ponderada
Slides: Atención · A mano · Softmax
"Scores q·kj → softmax → pesos α que suman 1 → contexto c = Σαjvj. Sabes hacerlo a mano (ŷ = 15.04) y sabes por qué se divide por √dk: mantener la softmax a temperatura entrenable. La RNN es el caso degenerado αj = 𝟙{j = t}: atención que solo mira a la posición actual."
3 — Lo que se gana y lo que se paga
Slides: Gradiente · Coste · Memoria
"Se gana el camino O(1) del gradiente (mediste la cadena RNN hundirse a 10⁻ⁱ donde la atención mantiene α constante) y la profundidad secuencial 1 que hace feliz a la GPU. Se paga T²: FLOPs que cruzan a la RNN en T = d y una matriz de scores que con T = 128K pesa 61 GiB. Flash Attention, KV-cache y los SSM del Día 10 son la factura y sus descuentos."
4 — De la fórmula al negocio
Slides: Traducción · Churn
"El alineamiento ES–EN emerge de productos punto (negro/black se cruzan solos) y el historial de un cliente se pondera según la pregunta de negocio: misma memoria, otra query, otra respuesta, con los α como explicación accionable para retención o para el regulador."
5 — Hoja de ruta
Día 08 · Día 09 · Día 10
"Día 08: embeddings semánticos, los vectores que la atención compara. Día 09: el Transformer completo — self-attention (la frase se atiende a sí misma), multi-head, posiciones. Día 10: cuando T² no se puede pagar — Mamba, MoE y la atención lineal. La práctica de hoy: atención en 20 líneas de numpy, verificada contra torch.nn.functional.scaled_dot_product_attention."

En una frase. La atención sustituye el resumen único y secuencial de la RNN por una media ponderada consultable de toda la secuencia: scores, softmax y mezcla; un cambio de grafo que elimina el cuello de botella y el desvanecimiento a cambio de un coste cuadrático, y que es el cimiento exacto del Transformer del Día 09.

Garrido-Merchán — ecgarrido@comillas.edu — Deep Learning para Business Analytics — Día 07 · De la recurrencia a la atención