9 Información de posición y RoPE
Dónde estamos. Ya tenemos la maquinaria completa: atención, multi-cabeza, FFN y el andamiaje. Pero le falta un sentido básico —el orden—. Tal cual, a la atención le da igual en qué posición esté cada palabra. Este capítulo explica cómo se le mete el orden, y en particular RoPE, el método que usan casi todos los modelos actuales. Es además la bisagra del libro: la geometría de RoPE es de donde sale, en la Parte II, nuestra ley de decaimiento de la atención.
9.1 La idea en una frase
Como la atención no distingue el orden de las palabras, se le añade información de posición; el método moderno (RoPE) lo hace rotando los vectores según su posición, de forma que la atención percibe la distancia relativa entre tokens.
9.2 Conceptos clave y su papel en el transformer
Antes de entrar en detalle, definimos los términos de este capítulo y para qué sirve cada uno dentro de un transformer:
- Invariancia a permutaciones. Definición: como la atención solo calcula un promedio ponderado, si barajas las palabras el resultado es el mismo. En el transformer: es el punto ciego que obliga a inyectar posición; sin ella, el modelo vería el texto como una bolsa de palabras, no como una secuencia.
- Codificación posicional. Definición: la información de orden que se añade para que la atención distinga la posición de cada token. En el transformer: le da el sentido del orden que por sí sola no tiene.
- Posición absoluta (sinusoidal / aprendida). Definición: asignar a cada posición una “huella” —fija de senos/cosenos, o un vector aprendido— que se suma al embedding. En el transformer: la primera solución; la aprendida fija una longitud máxima y no extrapola.
- Posición relativa. Definición: codificar la distancia entre tokens (i−j) en vez de su posición absoluta (Shaw et al. 2018). En el transformer: refleja que casi siempre importa “cómo de lejos están”, no “estar en la posición 5”.
- RoPE (Rotary Position Embedding). Definición: en vez de sumar posición, rota cada consulta y clave un ángulo proporcional a su posición (Su et al. 2021). En el transformer: el estándar actual; mete la posición relativa directamente en el score de atención sin tocar los embeddings.
- Base θ (theta). Definición: el parámetro (por defecto 10000) que fija las frecuencias de giro \(\omega_i = \theta^{-2i/d}\). En el transformer: controla el rango de velocidades —pares de índice bajo giran rápido (alcance corto), altos lento (alcance largo)—; reescalarlo (NTK-aware, YaRN) extiende el contexto.
- Posición relativa en el score. Definición: el producto escalar de dos vectores rotados depende solo de la posición relativa (m − n); las absolutas se cancelan. En el transformer: es la propiedad que hace de RoPE algo elegante y “gratis”.
- ALiBi. Definición: alternativa que no rota, sino que resta al score una penalización proporcional a la distancia (Press et al. 2022). En el transformer: sesga hacia lo reciente y extrapola muy bien a secuencias más largas.
- Decaimiento de la atención (
A(d) ∝ d^−γ). Definición: la idea —en disputa— de que la atención decae con la distancia entre tokens. En el transformer: es la bisagra hacia la Parte II, donde lo medimos y predecimos como ley de potencia desde la geometría de RoPE.
Con esto en mente, veamos por qué la atención necesita que le inyecten el orden.
9.3 Para qué sirve (su papel en el transformer)
La atención del Cap. 4 tiene un punto ciego sorprendente: es invariante a permutaciones. Como solo calcula un promedio ponderado, si barajas las palabras, el resultado es el mismo. Para la atención pura, “el perro muerde al hombre” y “el hombre muerde al perro” son indistinguibles.
Función de la codificación posicional: inyectar el orden que la atención no ve. Sin ella, el modelo entendería un texto como una bolsa de palabras, no como una secuencia.
9.4 Las formas de dar posición (una pequeña evolución)
- Sinusoidal absoluta (Transformer original): a cada posición se le asigna una “huella” fija de ondas seno/coseno de distintas frecuencias, que se suma al embedding. No se aprende.
- Aprendida absoluta (GPT-2, BERT): un vector aprendido por cada posición. Simple, pero fija una longitud máxima y no extrapola más allá.
- Relativa (Shaw et al. 2018): codifica la distancia entre tokens (i−j) en vez de la posición absoluta —porque casi siempre importa “cómo de lejos están”, no “estar en la posición 5”—.
- RoPE (Su et al. 2021): la idea que se impuso. La vemos en detalle.
9.5 RoPE: codificar la posición rotando
RoPE (Rotary Position Embedding) hace algo elegante: en vez de sumar posición, rota cada vector consulta y clave un ángulo proporcional a su posición.
🧩 Analogía — las manecillas de un reloj. Imagina que cada palabra lleva una manecilla, y su posición la hace girar un cierto ángulo. Cuando dos palabras se comparan, lo que importa es el ángulo entre sus manecillas —y ese ángulo depende solo de cuántas posiciones las separan, no de dónde estén en absoluto—. (Y no hay una manecilla, sino muchas girando a distintas velocidades.)
Esa imagen es literal. Por cómo funcionan las rotaciones, el producto escalar de dos vectores rotados depende solo de la posición relativa (m − n): las posiciones absolutas se cancelan. Así RoPE consigue algo muy útil gratis: mete la posición relativa directamente dentro del score de atención, sin añadir nada a los embeddings.
Para un par de dimensiones, “rotar en la posición \(m\)” es multiplicar por la matriz de rotación 2D \(R(m\omega)\) —girar el ángulo \(m\omega\), donde \(\omega\) es la velocidad de giro de ese par—. Dos hechos de las rotaciones 2D bastan: (1) son ortogonales —deshacer un giro es girar lo mismo al revés, \(R(a)^\top = R(a)^{-1} = R(-a)\)— y (2) se componen sumando ángulos, \(R(a)\,R(b) = R(a+b)\). Con eso, el score entre una consulta \(q\) en la posición \(m\) y una clave \(k\) en la posición \(n\):
\[ \langle R(m\omega)\,q,\; R(n\omega)\,k \rangle \;=\; q^\top R(m\omega)^\top R(n\omega)\,k \;=\; q^\top R\big((n-m)\,\omega\big)\,k \]
- La primera igualdad solo reescribe el producto escalar en forma de matrices (es la definición, nada nuevo).
- La segunda usa los dos hechos: por ortogonalidad, \(R(m\omega)^\top = R(-m\omega)\); y al componer, \(R(-m\omega)\,R(n\omega) = R((n-m)\,\omega)\) (los ángulos se suman).
Las posiciones absolutas \(m\) y \(n\) han desaparecido: solo queda su diferencia \((n-m)\) —la misma cantidad que el \((m-n)\) del texto, con el signo opuesto según desde qué vector se mire; lo esencial es que solo la separación sobrevive—. Eso es, con símbolos, el “ángulo entre las manecillas”. (Con muchos pares pasa lo mismo par a par, cada uno con su velocidad \(\omega_i\).)
Y esa imagen, en 3D e interactiva: cada reloj es una banda de frecuencia (un par de dimensiones). Mueve la posición del token y mira cómo los relojes del fondo (alta frecuencia) giran rápido y se solapan, mientras los del frente (baja frecuencia) apenas se mueven —el germen del aliasing y de las “tres escalas” del Cap. 14—:
Y la propiedad clave de RoPE, en 2D: el ángulo entre las manecillas de dos tokens depende solo de su distancia (m−n), no de dónde estén. Desliza ambos a la vez y compruébalo —el ángulo relativo no cambia—:
Los detalles que conviene retener:
- Se rotan las dimensiones por pares, cada par a una velocidad distinta.
- La velocidad la fija la base θ (theta, por defecto 10000), mediante las frecuencias \(\omega_i = \theta^{-2i/d}\), donde i numera el par de dimensiones (0, 1, 2…) y d es la dimensión de la cabeza.
- Qué hace θ: controla el rango de velocidades. Los pares de índice bajo rotan rápido (capturan distancias cortas); los de índice alto rotan lento (capturan distancias largas).
- RoPE solo toca las consultas y las claves (q, k), nunca los valores.
import torch
d, base = 64, 10000
i = torch.arange(0, d, 2)
inv_freq = 1.0 / (base ** (i / d)) # ω_i: velocidad de giro de cada par
# en la posición m, cada par se rota el ángulo m * inv_freqRoPE es hoy el estándar: LLaMA, GPT-NeoX, Qwen, Gemma… lo usan.
9.6 Un contraste: ALiBi
No todos rotan. ALiBi (Press et al. 2022) toma otro camino: no añade posición a los vectores, sino que resta al score una penalización proporcional a la distancia (cada cabeza con su pendiente). Resultado: sesgo hacia lo reciente y muy buena extrapolación a secuencias más largas que las de entrenamiento. Es una alternativa elegante que conviene conocer.
9.7 El puente a la Parte II: el decaimiento (y una disputa honesta)
Su et al. (2021) afirmaron que RoPE hace que la atención decaiga al aumentar la distancia —algo deseable, en principio—. Pero esto está en disputa: trabajos como HoPE (Chen et al. 2024) argumentan que ese decaimiento a largo plazo ni está garantizado ni es deseable a gran escala (los LLM necesitan recuperar información lejana; en la práctica muestran patrones en U, no un decaimiento monótono).
Este es exactamente el hueco que aborda nuestra Parte II. En vez de afirmar “RoPE decae” o “no decae”, lo medimos y lo predecimos: el decaimiento sigue una ley de potencia A(d) ∝ d^−γ —donde A(d) es la atención media entre tokens a distancia d (aquí d es distancia entre tokens, no la dimensión de la cabeza de antes)—, y el exponente γ se puede calcular desde la geometría de RoPE (la base θ, las frecuencias, el aliasing). De ahí saldrán herramientas concretas —comprimir la memoria del modelo, extender su contexto—. RoPE es, por tanto, la bisagra entre los fundamentos y lo que solo encontrarás aquí.
Un apunte relacionado: como RoPE depende de θ, reescalar θ (NTK-aware, YaRN) permite que un modelo funcione más allá de su longitud de entrenamiento. Lo veremos en la Parte II.
9.8 Resumen
- La atención es ciega al orden (invariante a permutaciones); la codificación posicional inyecta el orden.
- Evolución: sinusoidal → aprendida → relativa → RoPE.
- RoPE rota q/k un ángulo ∝ posición; el producto escalar depende solo de la posición relativa (los ángulos absolutos se cancelan). Base θ=10000; pares de índice bajo rotan rápido (corto alcance), altos lento (largo alcance). No toca los valores.
- ALiBi es la alternativa (penalización por distancia, buena extrapolación).
- El decaimiento de RoPE está en disputa — y es justo lo que nuestra Parte II mide y predice como ley de potencia
A(d)∝d^−γ.
tafagent tiene un modo 🪜 Mapa de profundidad que, a partir de la base θ de este capítulo, calcula las tres escalas de RoPE —λ₀ (grano local), \(T_\text{cross}=2\pi\sqrt{\theta}\) y \(T_\text{max}=2\pi\theta\)— y la capa \(L_{crit}\) donde cambia el régimen de atención. Pega un id de HF y verás cómo la misma θ fija a la vez el eje de distancia (γ) y el de profundidad. Sin inferencia.
Siguiente (Capítulo 9): ya tenemos todas las piezas y el sentido del orden. Toca montar el bloque transformer completo y ver qué pasa al apilarlo en profundidad.
9.9 Ejercicios
- Ceguera al orden. Explica por qué, sin posición, la atención da el mismo resultado para “el perro muerde al hombre” y “el hombre muerde al perro”.
- Relativa gratis. ¿Por qué el producto escalar de dos vectores rotados por RoPE depende solo de la diferencia de posiciones y no de las posiciones absolutas? (Pista: piensa en el ángulo entre dos manecillas.)
- θ y el alcance. Si subes la base θ, ¿qué les pasa a las velocidades de giro y, por tanto, al alcance de distancias que el modelo distingue bien?
- q, k, ¿y v? ¿A qué vectores aplica RoPE su rotación y a cuáles no? ¿Por qué tiene sentido?