English · Español
00 — Motivación: Attention es permutación-equivariante¶
🇪🇸 Si tomas la salida de attention y permutas la entrada, obtienes la misma salida (en el mismo orden permutado). Esto significa que attention, por sí sola, no distingue entre
he worksyworks he. Necesitamos añadir información posicional al modelo. Cómo hacerlo — sumando, concatenando, rotando — es lo que esta fase resuelve.
Este archivo demuestra que attention es permutación-equivariante, concreta la consecuencia con un ejemplo de 3 tokens y prepara las tres soluciones (sinusoidal, aprendida, RoPE) que siguen.
La afirmación¶
Sea \(\pi\) cualquier permutación de \(\{1, 2, \ldots, T\}\). Sea \(X\) una secuencia de \(T\) embeddings de tokens, y \(X_\pi\) los mismos tokens reordenados según \(\pi\) (es decir, \((X_\pi)_i = X_{\pi(i)}\)).
Afirmación: la salida de attention sobre \(X_\pi\) es la misma que la salida de attention sobre \(X\), con las filas permutadas según \(\pi\).
En símbolos: \(\text{Attention}(X_\pi) = (\text{Attention}(X))_\pi\).
Esto es equivarianza por permutación: permuta la entrada, obtén la (misma) salida permutada. La función conmuta con las permutaciones.
Demostración¶
Sea \(A = \text{Attention}(X) \in \mathbb{R}^{T \times d}\). Queremos demostrar que \(\text{Attention}(X_\pi) = A_\pi\).
Escribimos attention con la entrada permutada:
Como \(W_Q, W_K, W_V\) no dependen de la posición, \((Q_\pi)_i = Q_{\pi(i)}\), y análogamente para \(K_\pi, V_\pi\). Así que permutar las filas de la entrada simplemente permuta las filas de Q, K, V.
La matriz de scores: \((Q_\pi K_\pi^\top)_{ij} = Q_{\pi(i)} \cdot K_{\pi(j)} = S_{\pi(i), \pi(j)}\).
Softmax se aplica fila a fila; la fila de \(S_\pi\) en el índice \(i\) es la fila \(\pi(i)\) de \(S\), con las columnas también permutadas. Tras softmax, \(A_\pi^{(\text{intermedia})}_{ij} = A^{(\text{intermedia})}_{\pi(i), \pi(j)}\).
La salida: \((A_\pi^{(\text{intermedia})} V_\pi)_i = \sum_j A_{\pi(i), \pi(j)} V_{\pi(j)} = \sum_{j'} A_{\pi(i), j'} V_{j'}\) (reindexando \(j' = \pi(j)\)).
Así que la \(i\)-ésima fila de la salida es la \(\pi(i)\)-ésima fila de \(A\). La salida con entrada permutada es igual a la permutación de la salida original. Hecho.
Un ejemplo concreto de 3 tokens¶
Toma \(T = 3\), \(d = 2\). Tokens en las posiciones 1, 2, 3 con embeddings:
Sea \(W_Q = W_K = W_V = I\) (identidad).
Entonces \(Q = K = V = X\). Scores \(S = QK^\top\):
Tras softmax (fila a fila, sin escalado porque \(d = 2\) es pequeño):
Salida \(Y = A V\).
Ahora intercambia las posiciones 1 y 3 en la entrada: \(X' = [x_3, x_2, x_1] = [(1,1), (0,1), (1,0)]\). Calcula \(Y'\).
Por la demostración de equivarianza por permutación: \(Y' = [y_3, y_2, y_1]\) — mismos valores, reordenados.
El modelo no puede saber qué secuencia se le dio. Si queremos que he works sea distinto de works he, tenemos que romper esta equivarianza. Ese es todo el contenido de la codificación posicional (positional encoding).
🇪🇸 Resumen: sin posiciones, el modelo trata la secuencia como un conjunto. Para que distinga
he worksdeworks he, tenemos que inyectar información posicional. Cómo hacerlo, sin romper otras buenas propiedades de attention, es el problema que esta fase resuelve.
Por qué esto importa para nuestra tarea de gramática verbal¶
El orden de las palabras importa en el lenguaje. Dog bites man y Man bites dog tienen las mismas palabras, distinto significado. Sin información posicional, el modelo no podría distinguirlas.
Para nuestro alcance microscópico específico (§A13: 20 verbos, 5 tiempos, 3 personas), el orden de las palabras es la señal gramatical. Considera:
he works— sujeto + verbo en 3ª persona del singular. Correcto.works he— mismos tokens, pero el orden señaliza una lectura "imperativa + destinatario". Distinto significado.I work, you work, he ___— el slot 7 tiene que concordar con el token en la posición 6 (he). El vecino del slot a la izquierda es el sujeto relevante; un token en el mismo offset a la derecha no lo sería.
El modelo tiene que saber qué token vino antes que cuál. Sin codificación posicional, attention trata la secuencia como una bolsa de tokens — y una bolsa de tokens no puede distinguir "sujeto precede al verbo" de "verbo precede al sujeto". La concordancia de persona, el orden de tiempos (auxiliar + verbo principal: will work) y el alineamiento bilingüe (emparejamientos inglés↔español) requieren todos información de posición.
Tres soluciones¶
El resto de la Fase 16 son tres respuestas a "¿cómo añadimos información de posición?":
Solución 1 — Sumar al embedding¶
El transformer de Vaswani 2017 suma un vector posicional al embedding del token antes de la capa de attention:
donde \(\text{PE}(p) \in \mathbb{R}^d\) es alguna función de la posición.
Dos variantes:
- Sinusoidal: \(\text{PE}\) es una función fija (no entrenada) usando sin/cos a frecuencias variables. Derivada en theory/01-sinusoidal.md.
- Aprendida: \(\text{PE}\) es una consulta a una matriz entrenable de \(T_\text{max} \times d\). Derivada en theory/02-learned-vs-sinusoidal.md.
Ambas modifican la entrada. Attention ve información de posición mezclada en el embedding.
Solución 2 — Inyectar dentro de attention (RoPE)¶
Rotary Position Embedding (Su 2021) no toca el embedding. En su lugar, rota Q y K dentro de la capa de attention:
La rotación depende de la posición \(p\). El producto escalar \(\langle Q'_m, K'_n \rangle\) depende solo de \(m - n\) — la posición relativa emerge de forma natural. Derivada en theory/03-rope.md.
V no se toca. La posición es puramente una propiedad de cómo se calculan los pesos de attention.
Solución 3 — Sesgar el score de attention (ALiBi, T5, ...)¶
Añadir un sesgo dependiente de la posición al score de attention:
donde \(b(i, j)\) depende de \(|i - j|\) (ALiBi) o se aprende por offset (estilo T5). El sesgo hace que las posiciones cercanas reciban más attention sin modificar Q, K, V para nada.
Las mencionamos en theory/02 pero no las implementamos. RoPE tiene una extrapolación más limpia; los sesgos aprendidos de T5 son más limitados.
¿Cuál usa la Fase 17?¶
Spoiler del spec (LYNX_CORTEX.md §4 PHASE 16): "Por qué los LLMs modernos usan RoPE."
La decisión es RoPE, contingente a que: - La propiedad de posición relativa se verifique numéricamente en el lab 02. - La comparación de extrapolación del lab 03 muestre que RoPE generaliza mejor que sinusoidal más allá del largo de entrenamiento.
Si RoPE resulta demasiado complejo de integrar limpiamente en el bloque transformer de la Fase 17, recurrimos a sinusoidal (sigue extrapolando mejor que la aprendida). En cualquier caso, los embeddings posicionales aprendidos no son la opción — fallan en extrapolación por construcción.
Lo que viene¶
theory/01-sinusoidal.md— deriva la fórmula sinusoidal, demuestra la propiedad de cambio lineal.theory/02-learned-vs-sinusoidal.md— cuándo funciona cada una, por qué ambas fallan.theory/03-rope.md— la derivación de la rotación, la propiedad de posición relativa.- Tres labs (uno por esquema) + un cuarto lab de comparación.
La equivarianza por permutación es el problema. Los siguientes tres archivos de teoría son tres soluciones. Elige con cuidado; el Mini-GPT depende de la elección.
Siguiente: 01-sinusoidal.md.