Clase 04 — Atención y Transformers

Aquí no hay matrices de adorno: \(Q\), \(K\), \(V\), los puntajes, el softmax y la mezcla se calculan de verdad a partir de las matrices que puedes editar. Los valores por defecto reproducen, número a número, los ejemplos trabajados del apunte.

\( \text{Attention}(Q,K,V) = \text{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right) V \)

Tres tokens, embeddings de dimensión 2. Todas las casillas son editables. Los valores de fábrica son los del ejemplo trabajado 4.2.6 del apunte, así que puedes comprobar cada número contra el texto.

Embeddings de entrada \(X\) (3×2)
\(W_Q\)
\(W_K\)
\(W_V\)
\(Q = XW_Q\)
\(K = XW_K\)
\(V = XW_V\)
Pesos de atención \(A = \text{softmax}(\cdot)\) — cada fila suma 1
Salida \(Z = AV\) (3×2)
¿Por qué dividir por \(\sqrt{d_k}\)?

Si \(q\) y \(k\) tienen componentes independientes de varianza 1, el producto punto \(q\cdot k\) tiene varianza \(d_k\): crece con la dimensión. Puntajes grandes empujan al softmax hacia un one-hot, donde su gradiente es casi cero — y el modelo deja de aprender. Dividir por \(\sqrt{d_k}\) devuelve la varianza a 1.

Puntaje típico
desviación ≈ √d_k sin escalar
Entropía del softmax
bits, sin escalar
Con escalado
bits, tras dividir por √d_k

Distribución de atención sobre 8 llaves con puntajes aleatorios típicos de esa \(d_k\). Sin escalar, una sola llave se lo lleva todo y las demás quedan en cero: gradiente nulo para todas ellas.

Varias cabezas, varias relaciones a la vez

Cada cabeza tiene sus propias \(W_Q, W_K, W_V\), así que aprende un patrón de atención distinto sobre la misma frase. Los arcos salen de la matriz de pesos real: el grosor y la opacidad son proporcionales a \(\alpha_{ij}\). patrones ilustrativos — en un modelo real estos roles emergen del entrenamiento y rara vez son tan limpios.

Los arcos van desde el token que consulta hacia el token atendido. Pasa el ratón por la matriz de la derecha para resaltar una fila.

Suma de todas las cabezas (lo que ve la capa siguiente)
Por qué varias cabezas y no una más grande. Una sola distribución de atención tiene que elegir: o sigue la concordancia sujeto–verbo, o resuelve el pronombre, o mira al vecino. Con \(h\) cabezas de dimensión \(d_{model}/h\) cada una, el costo total es el mismo pero el modelo puede mantener varias relaciones abiertas a la vez y concatenar los resultados.
La matriz de codificación posicional

\( PE_{(pos,2i)} = \sin\!\left(\frac{pos}{10000^{2i/d}}\right), \quad PE_{(pos,2i+1)} = \cos\!\left(\frac{pos}{10000^{2i/d}}\right) \)

Una fila por posición, una columna por dimensión. Las columnas de la izquierda (alta frecuencia) cambian en cada paso: distinguen vecinos. Las de la derecha (baja frecuencia) apenas se mueven: distinguen regiones lejanas.

Ondas y distancia relativa

Similitud \(PE_{pos} \cdot PE_{pos+\Delta}\) en función de la separación \(\Delta\): decae de forma suave y solo depende de la distancia, no de la posición absoluta. Esa es la propiedad que permite al modelo razonar sobre "hace tres palabras".

El ejemplo del apunte: tres tokens contiguos con \(d = 4\)
Vectordim 0dim 1dim 2dim 3Comentario
La suma no destruye el contenido. \(x + PE(pos)\) desplaza el embedding a una zona del espacio donde una proyección lineal (\(W_Q\), \(W_K\)) todavía puede leer por separado qué palabra es y en qué posición está. Sin este paso, la atención sería estrictamente invariante a permutaciones: "el perro mordió al hombre" y "el hombre mordió al perro" darían exactamente lo mismo.
"La capital de ___ es …" — el recorrido completo, calculado

Los ocho pasos del apéndice de la Clase 4, ejecutados de verdad con \(d_{model} = 3\) y un vocabulario de 8 palabras. Cambia el país y observa lo que no cambia: la fila de atención es idéntica. Lo que cambia es el contenido que viaja.

Fila de atención de "es" sobre los 5 tokens

Distribución final sobre el vocabulario de 8 palabras. Las seis palabras "resto" comparten el mismo vector de salida nulo, así que reciben todas el mismo logit 0.

Predicción
Probabilidad
Pérdida si acierta
−ln p
Para seguir jugando
  • En la 1, activa la máscara causal: la fila del token 1 pasa a ser (1, 0, 0) — sin nada que mirar salvo a sí mismo, el softmax no tiene elección.
  • Desactiva el escalado por \(\sqrt{d_k}\) con el preset "puntajes grandes": el softmax colapsa a one-hot y el gradiente se apaga.
  • Pon \(W_K = W_Q\) (preset 2): la diagonal domina y cada token se mira a sí mismo. Las proyecciones aprendidas existen para poder romper eso.
  • En la 4, arrastra la identidad del país hasta 0: el modelo queda genuinamente indeciso entre París y Roma, ambas con la misma probabilidad.
  • En la 4, pon la identidad en −0.90 y compara: \(p(\text{Roma}) \approx 0.34\), no 0.38. La asimetría es real y el apunte explica por qué.