Hay muchos buenos recursos en línea que explican la arquitectura del transformador, pero la incrustación de posición rotativa (RoPE) a menudo no se explica bien o se omite por completo.
RoPE se presentó por primera vez en el artículo RoFormer: Enhanced Transformer with Rotary Position Embedding, y si bien las operaciones matemáticas involucradas son relativamente sencillas (principalmente matrices de rotación y multiplicaciones de matrices), el verdadero desafío radica en comprender la intuición detrás de cómo funciona. Intentaré proporcionar una manera de visualizar lo que les está haciendo a los vectores y explicar por qué este enfoque es tan efectivo.
Supongo que tienes un conocimiento básico de los transformadores y el mecanismo de atención a lo largo de esta publicación.
Intuición de cuerda
Dado que los transformadores carecen de una comprensión inherente del orden y las distancias, los investigadores desarrollaron incrustaciones posicionales. Esto es lo que deberían lograr las incrustaciones posicionales:
Los tokens más cercanos entre sí deberían asistir con pesos más altos, mientras que los tokens distantes deberían asistir con pesos más bajos. La posición dentro de una secuencia no debería importar, es decir, si dos palabras están cerca una de la otra, deberían atenderse entre sí con pesos más altos independientemente de si aparecen al principio o al final de una secuencia larga. Para lograr estos objetivos, las incorporaciones posicionales relativas son mucho más útiles que las incorporaciones posicionales absolutas.
Información clave: los LLM deben centrarse en las posiciones relativas entre dos tokens, que es lo que realmente importa para llamar la atención.
Si entiendes estos conceptos, ya estás a medio camino.
Antes de cuerda
Las incrustaciones posicionales originales del artículo fundamental La atención es todo lo que necesitas se definieron mediante una ecuación de forma cerrada y luego se agregaron a las incrustaciones semánticas. Mezclar señales de posición y semánticas en el estado oculto no era una buena idea. Investigaciones posteriores confirmaron que los LLM memorizaban (sobreajustaban) posiciones en lugar de generalizar, lo que provocaba un rápido deterioro cuando la duración de las secuencias excedía los datos de entrenamiento. Pero usar una fórmula de forma cerrada tiene sentido, nos permite extenderla indefinidamente y RoPE hace algo similar.
Una estrategia que resultó exitosa en las primeras etapas del aprendizaje profundo fue: cuando no esté seguro de cómo calcular características útiles para una red neuronal, ¡deje que la red las aprenda por sí misma! Eso es lo que hicieron modelos como el GPT-3: aprendieron sus propias incrustaciones de posición. Sin embargo, proporcionar demasiada libertad aumenta los riesgos de sobreajuste y, en este caso, crea límites estrictos en las ventanas de contexto (no puede extenderlas más allá de su ventana de contexto entrenada).
Los mejores enfoques se centraron en modificar el mecanismo de atención para que los tokens cercanos reciban mayor peso de atención mientras que los tokens distantes reciban menor peso. Al aislar la información de posición en el mecanismo de atención, se preserva el estado oculto y se mantiene enfocado en la semántica. Estas técnicas intentaron principalmente modificar inteligentemente Q y K para que sus productos escalares reflejaran la proximidad. Muchos artículos intentaron diferentes métodos, pero RoPE fue el que mejor resolvió el problema.
Intuición de rotación
RoPE modifica Q y K aplicándoles rotaciones. Una de las mejores propiedades de la rotación es que preserva los módulos vectoriales (tamaño), que potencialmente transportan información semántica.
Sea q la proyección de consulta de un token y k la proyección clave de otro. Para los tokens que están cerca en el texto, se aplica una rotación mínima, mientras que los tokens distantes sufren transformaciones rotacionales más grandes.
Imagine dos vectores de proyección idénticos: cualquier rotación los alejaría más uno del otro. Eso es exactamente lo que queremos.
Ahora, aquí hay una situación potencialmente confusa: si dos vectores de proyección ya están muy separados, la rotación podría acercarlos. ¡Eso no es lo que queremos! Se rotan porque están distantes en el texto, por lo que no deberían recibir mucha atención. ¿Por qué esto todavía funciona?
En 2D, sólo hay un plano de rotación (xy). Solo puedes girar en el sentido de las agujas del reloj o en el sentido contrario a las agujas del reloj. En 3D, hay infinitos planos de rotación, lo que hace muy poco probable que la rotación acerque dos vectores. Los modelos modernos operan en espacios de muy altas dimensiones (más de 10.000 dimensiones), lo que hace que esto sea aún más improbable.
Recuerde: en el aprendizaje profundo, ¡las probabilidades son lo más importante! Es aceptable equivocarse ocasionalmente siempre que las probabilidades sean bajas.
Ángulo de rotación
El ángulo de rotación depende de dos factores: my i. Examinemos cada uno.
Posición absoluta del token m
La rotación aumenta a medida que aumenta la posición absoluta m del token.
Sé lo que estás pensando: “m es la posición absoluta, pero ¿no dijiste que las posiciones relativas son más importantes?”
Aquí está la magia: considera un plano 2D en el que giras un vector en 𝛼 y otro en β. La diferencia angular entre ellos se convierte en 𝛼-β. Los valores absolutos de 𝛼 y β no importan, sólo su diferencia. Entonces, para dos fichas en las posiciones myn, la rotación modifica el ángulo entre ellas proporcionalmente a mn.
Para simplificar, podemos pensar que solo estamos rotando q (esto es matemáticamente exacto ya que nos importan las distancias finales, no las coordenadas).
Índice de estado oculto i
En lugar de aplicar una rotación uniforme en todas las dimensiones del estado oculto, RoPE procesa dos dimensiones a la vez, aplicando diferentes ángulos de rotación a cada par. En otras palabras, divide el vector largo en múltiples pares que se pueden rotar en 2D en diferentes ángulos.
Rotamos las dimensiones del estado oculto de manera diferente: la rotación es mayor cuando i es baja (comienzo del vector) y menor cuando i es alta (final del vector).
Comprender esta operación es sencillo, pero comprender por qué la necesitamos requiere más explicaciones:
Permite al modelo elegir qué debería tener rangos de influencia más cortos o más largos. Imagine vectores en 3D (xyz). Los ejes xey representan dimensiones tempranas (i baja) que experimentan una mayor rotación. Los tokens proyectados principalmente sobre xey deben estar muy cerca para poder asistir con alta intensidad. El eje z, donde i es mayor, gira menos. Los tokens proyectados principalmente en z pueden asistir incluso cuando están distantes.
Esta estructura captura matices complicados en el lenguaje humano, muy bueno, ¿verdad?
Una vez más, sé lo que estás pensando: “después de demasiada rotación, empiezan a acercarse de nuevo”.
Eso es correcto, pero he aquí por qué todavía funciona:
Estamos visualizando en 3D, pero esto en realidad sucede en dimensiones mucho más altas. Aunque algunas dimensiones se acercan, otras que giran más lentamente siguen alejándose. De ahí la importancia de rotar las dimensiones en diferentes ángulos. RoPE no es perfecto: debido a su naturaleza rotacional, se producen máximos locales. Vea el cuadro teórico de los autores originales:
La curva teórica tiene algunos baches locos, pero en la práctica encontré que se comporta mucho mejor:
Una idea que se me ocurrió fue recortar el ángulo de rotación para que la similitud disminuya estrictamente con el aumento de la distancia. He visto que se aplica el recorte a otras técnicas, pero no a RoPE.
Tenga en cuenta que la similitud del coseno tiende a crecer (aunque lentamente) a medida que la distancia crece mucho más allá de nuestro valor base (más adelante verá exactamente cuál es esta base de la fórmula). Una solución sencilla aquí es aumentar la base, o incluso dejar que técnicas como la atención local o de ventana se encarguen de ello.
En pocas palabras: el LLM aprende a proyectar la influencia del significado de largo y corto alcance en diferentes dimensiones de q y k.
A continuación se muestran algunos ejemplos concretos de dependencias de largo y corto alcance:
El LLM procesa código Python donde se aplica una transformación inicial a un marco de datos df. Esta información relevante debería potencialmente transmitirse a un largo alcance e influir en la incorporación contextual de los tokens df posteriores. Los adjetivos suelen caracterizar a sustantivos cercanos. En “Una hermosa montaña se extiende más allá del valle”, el adjetivo hermosa describe específicamente la montaña, no el valle, por lo que debería afectar principalmente a la incrustación de la montaña.
La fórmula del ángulo
Ahora que comprende los conceptos y tiene una fuerte intuición, aquí están las ecuaciones. El ángulo de rotación está definido por:
\[\text{angle} = m \times \theta\]
\[\theta = 10,000^{-2(i-1)/d_{model}}\]
m es la posición absoluta del token i ∈ {1, 2,…, d/2} que representa dimensiones de estado oculto, dado que procesamos dos dimensiones a la vez, solo necesitamos iterar hasta d/2 en lugar de d. dmodel es la dimensión del estado oculto (por ejemplo, 4096)
Observe que cuando:
\[i=1 \Rightarrow \theta=1 \quad \text{(high rotation)} \]
\[i=d/2 \Rightarrow \theta \approx 1/10,000 \quad \text{(low rotation)}\]
Conclusión
Deberíamos encontrar formas inteligentes de inyectar conocimiento en los LLM en lugar de dejarles aprender todo de forma independiente. Hacemos esto proporcionando las operaciones correctas que una red neuronal necesita para procesar datos; la atención y las convoluciones son excelentes ejemplos. Las ecuaciones de forma cerrada pueden extenderse indefinidamente ya que no es necesario aprender a incorporar cada posición. Es por eso que RoPE proporciona una excelente flexibilidad en la longitud de la secuencia. La propiedad más importante: los pesos de atención disminuyen a medida que aumentan las distancias relativas. Esto sigue la misma intuición que la atención local en arquitecturas de atención alterna.