Codificación posicionalPositional Encoding

Marcar cada posición con su número de orden

  • Avanzado
  • 6 min de lectura
  • 3 diagramas

Puntos clave

  • La codificación posicional consiste en añadir a cada trozo una marca de qué número de posición ocupa.
  • Hace falta porque un cálculo en el que todas las posiciones se miran entre sí por igual no logra distinguir el orden.
  • Los primeros métodos suman la marca al propio contenido y la incorporan como un solo bloque, mientras que el método más usado hoy integra el orden dentro del cálculo que compara las posiciones.
  • A veces se usa una marca hecha con una regla fija, y a veces se deja que el entrenamiento la decida sola.
  • Hoy se usa más el tipo que registra cuánto se separan dos posiciones entre sí, en vez del número absoluto de cada una.

La analogía

Las entradas de teatro llevan impreso el número de asiento. ¿Qué pasaría si no lo tuvieran? El público estaría igual de sentado, pero nadie sabría quién va en primera fila y quién en la última. Las personas son las mismas, las caras también, y solo desaparece el orden. La codificación posicional es escribir ese número de asiento en la entrada.

El número no viaja aparte de la persona. En un mismo papel están juntos el número de asiento y los datos de quien va a ver la función. Los primeros métodos de codificación posicional hacen lo mismo: suman la marca de orden al contenido del trozo y forman con eso un solo bloque.

En cuanto se pone el número de asiento aparece una relación: "quien está en primera fila queda más cerca del escenario que quien está en la última". Hace falta el número para poder hablar de distancia y de antes y después.

En detalle

Una estructura que pierde el orden

El método anterior, que procesaba la frase palabra por palabra en orden, no tenía problema de orden: el turno de procesarla era el orden mismo. A cambio, era lento.

El método actual hace que todas las posiciones se miren entre sí a la vez. Eso lo volvió muy rápido, pero tuvo un precio. Si todas se miran a la vez, no se sabe cuál salió primero. "El perro persiguió al gato" y "el gato persiguió al perro" se ven como el mismo conjunto de palabras.

Por eso hay que añadir una marca de orden. Un cálculo en el que todas las posiciones se miran entre sí por igual no basta, por sí solo, para distinguir el orden de las palabras.

El número se suma al contenido

En el método propuesto primero, la marca no se coloca al lado del trozo, aparte. Al bloque de números que lleva el contenido del trozo se le suma un bloque del mismo tamaño con el número de orden, y con eso se forma uno solo. Así, el valor de esa posición pasa a llevar dentro tanto "qué es" como "en qué lugar va".

Sumarlos y mezclarlos no da problema porque hay espacio de sobra. El bloque de números tiene de cientos a más de diez mil casillas, así que el contenido y el orden pueden ocupar direcciones distintas sin estorbarse. Con el entrenamiento, el modelo aprende a leer ambas cosas por separado.

Dos formas de fabricar la marca

El método propuesto primero fabricaba la marca con una regla fija, definida por una persona. Se superponen ondas de varios periodos para que cada posición salga con un patrón distinto. No necesita entrenamiento y permite calcular el número incluso para longitudes más largas que las vistas durante el entrenamiento. Pero poder asignar un número no es lo mismo que el modelo maneje bien esa longitud, así que en la práctica el rendimiento baja al superar la longitud de entrenamiento.

El otro camino deja que la propia marca se decida con el entrenamiento. Se coloca un bloque de números por cada posición y sus valores se ajustan durante el entrenamiento. Así se logra una marca más adaptada a los datos, pero no hay número que asignar si se supera la cantidad de posiciones preparada de antemano.

La distancia entre posiciones, más que el número absoluto

Escribir directamente el número de orden tiene un punto débil. El número cambia por completo según si la misma frase está al principio o al final de un documento, y lo que suele importar de verdad es "a cuántas casillas está esta palabra de aquella otra".

Por eso hoy se usa más un método que hace que la propia distancia entre dos posiciones aparezca reflejada en el cálculo. Consiste en girar un poco los valores según el número de posición, de modo que al comparar dos posiciones se refleje de forma natural la distancia entre ellas. Sea cual sea el lugar donde caigan, si la separación es igual se lee como la misma relación. Eso sí, al pasar de las longitudes vistas en el entrenamiento este método también se tambalea y hay que ajustarlo aparte, como se explica a continuación.

Cuando se supera el número de asientos

Si aparece un número de posición muy lejano, nunca visto durante el entrenamiento, el modelo se tambalea. Es parecido a recibir una entrada con un número de asiento que no existe en el teatro. La frase se vuelve rara de repente, o se pierde el principio del texto.

Por eso ampliar la ventana de contexto no es solo cuestión de subir un número. Hace falta reajustar la marca para que cubra un rango más amplio y, por lo general, también se entrena un poco más con la longitud aumentada.

Con más precisión

La codificación posicional suma al embedding de cada token un vector con información de posición, o incorpora la relación de posición dentro del propio cálculo de atención. El método propuesto primero era fijo, con senos y cosenos de varios periodos colocados de forma distinta en cada posición; también se usó mucho un método con un vector que se aprende por posición. El método que más usan hoy los modelos grandes gira la consulta y la clave según el número de posición, para que la distancia relativa entre dos posiciones quede reflejada de forma natural. Eso sí, un modelo que genera texto con una máscara que solo le deja ver lo anterior puede intuir en parte la posición por sí solo, a partir de cuántas posiciones previas ve. Aun así, añadir una marca de orden sigue siendo lo básico.

La analogía también tiene sus costuras. El número de asiento del teatro es un solo entero, pero la codificación posicional es un bloque de más de varios cientos de valores por posición. Además, en la entrada el número de asiento y los datos del espectador comparten el mismo papel pero se leen en casillas separadas, mientras que la codificación posicional de tipo aditivo se suma al valor del contenido y queda mezclada sin distinguirse por fuera. Y sobre todo, el número de asiento de un teatro es una cuenta que crece de uno en uno (1, 2, 3), mientras que la marca de posición del método propuesto primero es un patrón hecho superponiendo ondas de varios periodos. Las posiciones cercanas tienen patrones parecidos, y está construido para que se pueda leer, con un cálculo, cuántas casillas separan dos posiciones.

Pruébalo

Malentendidos comunes

  • Es fácil pensar que el modelo conoce el orden de las palabras por sí solo, pero en realidad el cálculo que mira todas las posiciones a la vez no tiene en sí ningún concepto de orden, y añadir una marca de orden es la forma básica de indicárselo.

  • Es fácil pensar que la marca de posición va pegada aparte del trozo, pero en realidad se suma al valor del contenido o se incorpora dentro del cálculo que compara las posiciones. No va como una etiqueta suelta.

  • Es fácil pensar que la ventana de contexto crece con solo cambiar un ajuste, pero en realidad hay que adaptar la marca de posición a ese rango más amplio y, por lo general, también se entrena un poco más con la longitud aumentada.

Resumen en una línea

En resumen

La codificación posicional es como el número de asiento de una entrada de teatro: marca en qué lugar va cada trozo y devuelve el concepto de antes y después a una estructura que, por sí sola, no conoce el orden.

¿Has visto un error o tienes una analogía mejor? Sugerir una corrección · Última actualización 2026-10-17