La codificación posicional es un componente fundamental de la arquitectura Transformer (architecture) en el Deep learning. Los transformers procesan secuencias de entrada en paralelo en lugar de secuencialmente, por lo que carecen de un sentido inherente de orden. La codificación posicional añade una señal única a la incrustación de cada token que representa su posición en la secuencia, permitiendo al modelo comprender el orden de las palabras y la distancia. Esta técnica fue introducida en el influyente artículo de 2017 "Attention Is All You Need" y se ha vuelto esencial para los Large language model y otros sistemas de procesamiento de secuencias.
La idea central es modificar las incrustaciones de entrada antes de que entren en las capas de atención del transformer. Para cada posición en la secuencia, se genera un vector que codifica el índice de la posición. Este vector se añade a la incrustación del token, produciendo una representación combinada que lleva tanto información semántica como posicional. El mecanismo de atención puede entonces utilizar estas señales posicionales para calcular relaciones entre tokens basándose en sus distancias relativas.
Codificación Sinusoidal
El artículo original del transformer propuso un esquema de codificación posicional sinusoidal. Para una posición pos y una dimensión i, el valor de codificación es:
- PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
- PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
donde d_model es la dimensión de la incrustación. Esta elección tiene varias propiedades deseables. Las funciones seno y coseno producen valores en un rango acotado, y la codificación para cada posición es determinista. Más importante aún, la relación lineal entre posiciones permite al modelo aprender fácilmente posiciones relativas: para cualquier desplazamiento fijo k, PE(pos+k) puede expresarse como una función lineal de PE(pos). Esta propiedad ayuda al mecanismo de atención a generalizar a secuencias más largas que las vistas durante el entrenamiento.
La frecuencia disminuye a lo largo de la dimensión, con dimensiones más bajas oscilando rápidamente y dimensiones más altas lentamente. Esto crea una representación multiescala similar a cómo el cerebro codifica información espacial. Los autores originales eligieron este método porque no requiere parámetros aprendidos y puede manejar teóricamente secuencias de longitud arbitraria.
Incrustaciones Posicionales Aprendidas
Una alternativa a la codificación sinusoidal es aprender incrustaciones posicionales durante el entrenamiento. En este enfoque, a cada índice de posición se le asigna un vector entrenable, y estos vectores se optimizan junto con el resto del modelo. El modelo aprende la representación posicional más adecuada para su tarea.
Las incrustaciones aprendidas se utilizaron en las primeras implementaciones de transformers, incluido el modelo BERT original. Ofrecen flexibilidad porque el modelo puede adaptar la codificación a la distribución específica de los datos. Sin embargo, están limitadas a una longitud máxima de secuencia definida en el momento del entrenamiento y requieren parámetros adicionales. Para secuencias muy largas, el costo de memoria puede volverse significativo.
Tanto las codificaciones sinusoidales como las aprendidas han sido ampliamente adoptadas. Muchos modelos modernos, como las variantes de GPT, utilizan incrustaciones aprendidas, mientras que otros, como el transformer original, usan sinusoidales. La investigación ha demostrado que ambos métodos funcionan de manera comparable en muchas tareas, pero las incrustaciones aprendidas a menudo se prefieren por su simplicidad en la implementación.
Papel en la Arquitectura del Transformer
En la arquitectura del transformer, la codificación posicional se aplica en la etapa de entrada. Los tokens de entrada se convierten primero en incrustaciones mediante una matriz de incrustación aprendida. Luego, el vector de codificación posicional se añade elemento a elemento a la incrustación del token. Este vector combinado se pasa a través de las capas de atención multi-cabeza.
El mecanismo de atención calcula vectores de consulta, clave y valor a partir de la entrada. La información posicional influye en estos cálculos, permitiendo al modelo atender a tokens basándose en sus posiciones relativas. Por ejemplo, en una oración, el modelo puede aprender que un verbo debe atender a su sujeto, que a menudo está a unas pocas posiciones de distancia.
Sin codificación posicional, el transformer trataría la entrada como una bolsa de palabras, perdiendo toda la información de orden. Esto haría imposibles tareas como el modelado del lenguaje y la traducción. La codificación posicional es, por tanto, una innovación crítica que hizo efectivos a los transformers para datos secuenciales.
Variaciones y Mejoras
Desde la propuesta original, se han desarrollado muchas variaciones de codificación posicional. Una variante notable es la codificación posicional relativa, que codifica la distancia entre tokens en lugar de posiciones absolutas. Este enfoque, introducido en modelos como Transformer-XL y T5, puede generalizar mejor a secuencias más largas y es más interpretable.
Otra variante es la codificación posicional rotatoria (RoPE), utilizada en modelos como LLaMA y PaLM. RoPE aplica una matriz de rotación a los vectores de consulta y clave basándose en sus posiciones, preservando información relativa mientras permite al modelo extrapolar a secuencias más largas. Este método se ha vuelto popular en los recientes modelos de lenguaje grandes.
Otros enfoques incluyen ALiBi (Atención con Sesgos Lineales), que añade un sesgo lineal a las puntuaciones de atención basado en la distancia, y sesgos relativos aprendidos utilizados en modelos como T5. Estos métodos a menudo eliminan la necesidad de incrustaciones posicionales explícitas, simplificando la arquitectura.
Aplicaciones en Modelos de Lenguaje Grandes
La codificación posicional es integral en todos los Large language model modernos. Modelos como GPT-3, GPT-4, Claude y Gemini dependen de la información posicional para generar texto coherente y contextualmente apropiado. La elección del método de codificación puede afectar la capacidad del modelo para manejar documentos largos, código y otros datos estructurados.
Por ejemplo, los modelos GPT de OpenAI utilizan incrustaciones posicionales aprendidas, mientras que Chinchilla y Gopher de Google DeepMind usan codificaciones rotatorias. La tendencia hacia ventanas de contexto más largas ha impulsado la investigación en métodos de codificación posicional más eficientes y escalables.
La codificación posicional también juega un papel en modelos multimodales que procesan imágenes, audio y texto. En los transformers de visión, se añaden codificaciones posicionales a los parches de imagen para preservar el diseño espacial. En el reconocimiento de voz, ayudan a modelar el orden temporal.
Consideraciones Teóricas y Prácticas
Desde una perspectiva teórica, la codificación posicional es una forma de sesgo inductivo que inyecta conocimiento previo sobre el orden de la secuencia en el modelo. La capacidad de la codificación sinusoidal para representar posiciones relativas linealmente es una ventaja teórica clave. Sin embargo, algunos investigadores argumentan que las incrustaciones aprendidas pueden capturar relaciones posicionales más complejas.
Prácticamente, la elección de la codificación afecta la estabilidad del entrenamiento y el rendimiento. Las codificaciones sinusoidales son fijas y no requieren parámetros adicionales, lo que puede reducir el sobreajuste. Las incrustaciones aprendidas pueden ser más flexibles pero pueden requerir más datos para entrenarse efectivamente.
Otra consideración es la extrapolación: la capacidad de manejar secuencias más largas que las vistas durante el entrenamiento. Las codificaciones sinusoidales pueden teóricamente extrapolar a longitudes arbitrarias, pero en la práctica, los mecanismos de atención a menudo luchan con longitudes no vistas. Las incrustaciones aprendidas no pueden extrapolar en absoluto, ya que están definidas para una longitud máxima fija. Esto ha motivado la investigación en métodos como RoPE y ALiBi que mejoran la extrapolación.
Direcciones Futuras
La investigación sobre codificación posicional continúa evolucionando. Con la creciente demanda de modelos de contexto largo, se están desarrollando nuevos métodos para codificar eficientemente posiciones en secuencias de cientos de miles o millones de tokens. Se están explorando técnicas como la codificación posicional jerárquica y representaciones continuas.
Algunos modelos recientes, como Mamba y otros modelos de espacio de estados, han propuesto alternativas a la atención que no requieren codificación posicional explícita. Sin embargo, los transformers siguen siendo dominantes, y la codificación posicional sigue siendo un área clave de estudio.
A partir de 2025, el campo se está moviendo hacia representaciones posicionales más adaptativas y basadas en datos, pero los conceptos fundamentales introducidos en 2017 siguen siendo fundacionales.
Conclusión
La codificación posicional es una técnica simple pero poderosa que permite a los transformers procesar datos secuenciales. Al inyectar información de orden en las incrustaciones de tokens, permite a los modelos comprender lenguaje, código y otros datos ordenados. Tanto las codificaciones sinusoidales como las aprendidas han demostrado ser efectivas, y la investigación en curso continúa refinando estos métodos. Comprender la codificación posicional es esencial para cualquiera que estudie la Artificial intelligence y el Machine learning modernos.