La Codificación Posicional (Positional Encoding) es un mecanismo utilizado en arquitecturas Transformer para representar el orden, la ubicación o la distancia relativa de los tokens.
Su finalidad es permitir que un modelo diferencie secuencias que contienen los mismos elementos en un orden distinto.
Por ejemplo:
- «El perro persigue al gato».
- «El gato persigue al perro».
Ambas frases contienen las mismas palabras, pero describen situaciones diferentes.
Un Transformer necesita información sobre las posiciones para aprender adecuadamente estas diferencias.
La autoatención convencional relaciona tokens mediante operaciones matriciales, pero no incorpora de forma intrínseca una noción de orden secuencial.
La codificación posicional proporciona esa información mediante representaciones numéricas que se integran con los embeddings o con los cálculos de atención.
El artículo Attention Is All You Need, publicado por Vaswani y colaboradores en 2017, introdujo una codificación posicional basada en funciones seno y coseno de diferentes frecuencias.
Posteriormente se desarrollaron alternativas como:
- Learned Positional Embeddings.
- Relative Position Encoding.
- Relative Position Bias.
- Rotary Positional Embeddings (RoPE).
- Attention with Linear Biases (ALiBi).
- Positional Encodings bidimensionales para imágenes.
- Métodos especializados para contextos largos.
Estas técnicas presentan diferencias importantes.
La codificación sinusoidal crea vectores deterministas.
Los embeddings aprendidos utilizan parámetros entrenables.
Los enfoques relativos representan desplazamientos entre posiciones.
RoPE aplica rotaciones a componentes de Query y Key.
ALiBi introduce penalizaciones relacionadas con la distancia dentro de las puntuaciones de atención.
Ningún método es universalmente superior.
Su rendimiento depende del modelo, de la distribución de datos, de la longitud del contexto, del entrenamiento y del hardware.
En esta entrada estudiaremos sus fundamentos matemáticos, las implementaciones en NumPy y PyTorch, las ventajas y limitaciones de cada alternativa y sus aplicaciones en modelos de lenguaje y visión artificial.
1. ¿Qué es Positional Encoding?
Definición breve: Positional Encoding es un conjunto de técnicas que proporciona a los modelos Transformer información sobre el orden, la posición absoluta o la relación espacial entre tokens.
Ejemplo
Consideremos una secuencia:
[A, B, C, D]
Sus índices son:
[0, 1, 2, 3]
La codificación posicional permite introducir esta información en el procesamiento del modelo.
¿Por qué es necesaria?
Porque el contenido de los tokens no describe necesariamente dónde aparecen.
¿Es una técnica exclusiva de NLP?
No.
También se utiliza en visión por computadora, procesamiento de audio y modelos multimodales.
2. ¿Por qué Self-Attention no conoce el orden automáticamente?
La operación básica de autoatención es:
Attention(Q,K,V) = softmax(QKᵀ/√dₖ)V
Las Queries, Keys y Values se obtienen a partir de representaciones de tokens.
Si permutamos coherentemente esas representaciones y no existe información posicional, el resultado de Self-Attention se permuta de la misma manera.
Esta propiedad se conoce como equivarianza a permutaciones.
¿Qué significa?
La operación no identifica por sí sola si un token ocupaba originalmente la primera o la cuarta posición.
¿Qué debemos añadir?
Una señal que represente posiciones u orden.
3. ¿Qué es la equivarianza a permutaciones?
Una operación es equivariante a permutaciones si reorganizar la entrada produce una reorganización correspondiente de la salida.
Para una matriz de permutación P y una función de autoatención sin posiciones ni máscaras que introduzcan estructura:
Attention(PX) = P Attention(X)
¿Es lo mismo que invariancia?
No.
Invariancia significa que el resultado no cambia.
Equivarianza significa que cambia de forma consistente con la transformación de entrada.
¿Por qué importa?
Porque explica matemáticamente la necesidad de introducir información sobre el orden.
4. ¿Qué es una posición absoluta?
Una posición absoluta identifica dónde aparece un token dentro de una secuencia.
Ejemplo
Primer token: posición 0.
Segundo token: posición 1.
Tercer token: posición 2.
¿Cómo se representa?
Mediante un vector fijo o aprendido asociado a su índice.
¿Qué limitación puede existir?
Algunas implementaciones aprendidas tienen una tabla de posiciones de longitud máxima definida.
5. ¿Qué es una posición relativa?
Una posición relativa describe el desplazamiento entre dos tokens.
Por ejemplo:
- Token A en posición 2.
- Token B en posición 5.
Su distancia dirigida es:
5 − 2 = 3
¿Por qué es útil?
Porque muchas relaciones dependen más de la distancia entre elementos que de su índice absoluto.
¿Qué ejemplos existen?
Dependencias entre palabras, relaciones entre parches visuales y patrones temporales.
6. Codificación Posicional Sinusoidal
La Sinusoidal Positional Encoding utiliza funciones seno y coseno de distintas frecuencias para construir vectores posicionales.
Fue utilizada en el Transformer original de 2017.
Cada posición obtiene un vector determinista.
La dimensión de este vector coincide con la dimensión del embedding del modelo.
¿Se aprende mediante Backpropagation?
No en su formulación fija.
¿Qué se aprende?
Las demás transformaciones del modelo pueden aprender a utilizar esas señales posicionales.
7. Fórmula de Sinusoidal Positional Encoding
Para una posición pos, una dimensión de modelo d_model y el índice de un par de dimensiones i:
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
¿Qué representa pos?
La posición del token.
¿Qué representa i?
El índice del par seno/coseno.
¿Qué representa d_model?
La dimensión total de los embeddings.
¿Por qué utilizar diferentes frecuencias?
Para crear patrones posicionales que evolucionan a diferentes escalas.
8. ¿Qué significa utilizar seno y coseno?
Las funciones sinusoidales permiten producir valores periódicos y continuos.
Para la primera dimensión
Cuando i = 0:
PE(pos, 0) = sin(pos)
PE(pos, 1) = cos(pos)
Para otras dimensiones
Se modifica la frecuencia mediante el denominador.
¿Cuál es la ventaja?
La combinación de frecuencias proporciona una representación estructurada de diferentes posiciones.
9. ¿Por qué se utiliza 10000?
En el Transformer original se empleó una base de 10000 para distribuir las frecuencias.
¿Es una constante universal?
No.
Otras arquitecturas utilizan diferentes bases y estrategias.
¿Qué efecto tiene?
Controla el rango de frecuencias posicionales.
¿Debemos cambiarla arbitrariamente en un checkpoint entrenado?
No.
El modelo fue entrenado con una configuración específica y modificarla puede alterar sus representaciones.
10. Ejemplo 1 — Positional Encoding con NumPy
import numpy as npdef sinusoidal_encoding( sequence_length, embedding_dim): if embedding_dim % 2 != 0: raise ValueError( "Este ejemplo requiere " "una dimensión par" ) positions = np.arange( sequence_length )[:, None] dimensions = np.arange( 0, embedding_dim, 2 ) frequencies = np.exp( -np.log(10000.0) * dimensions / embedding_dim ) angles = positions * frequencies encoding = np.zeros( (sequence_length, embedding_dim), dtype=np.float64 ) encoding[:, 0::2] = np.sin(angles) encoding[:, 1::2] = np.cos(angles) return encodingPE = sinusoidal_encoding( sequence_length=10, embedding_dim=8)print(PE.shape)print( np.round(PE[:3], 4))
Resultado esperado
Forma:
(10, 8)
¿Qué demuestra?
Podemos construir un vector posicional determinista para cada índice de secuencia.
11. ¿Qué ocurre en la posición cero?
Para pos = 0:
sin(0) = 0
cos(0) = 1
Por tanto, en una dimensión de ocho componentes:
PE(0) = [0,1,0,1,0,1,0,1]
¿Significa que la primera posición no contiene información?
No.
Su patrón de ceros y unos representa una señal posicional concreta.
12. ¿Cómo se combina Positional Encoding con Token Embedding?
En una arquitectura aditiva:
Xpos = Xtoken + PE
Ejemplo
Embedding:
[0.2, 0.4, 0.1, 0.7]
Codificación:
[0.0, 1.0, 0.0, 1.0]
Resultado:
[0.2, 1.4, 0.1, 1.7]
¿Por qué utilizar suma?
Porque mantiene la dimensión del embedding y permite combinar contenido y posición en el mismo espacio.
13. Ejemplo 2 — Combinar embeddings con posiciones
import numpy as nprng = np.random.default_rng(42)tokens = rng.normal( size=(2, 10, 8))positions = sinusoidal_encoding( sequence_length=10, embedding_dim=8)combined = ( tokens + positions[None, :, :])print( "Tokens:", tokens.shape)print( "Combinados:", combined.shape)
Resultado esperado
(2, 10, 8) para ambos tensores.
¿Qué demuestra?
La suma incorpora información posicional sin cambiar la forma de la secuencia.
14. ¿Cómo visualizar Sinusoidal Positional Encoding?
Podemos representar las posiciones en el eje horizontal y las dimensiones del embedding en el eje vertical.
Los colores muestran valores entre −1 y 1.
¿Qué observaremos?
Algunas dimensiones cambian rápidamente con la posición.
Otras varían más lentamente.
15. Ejemplo 3 — Heatmap de Positional Encoding
import matplotlib.pyplot as pltPE = sinusoidal_encoding( sequence_length=128, embedding_dim=64)plt.figure(figsize=(11, 5))plt.imshow( PE.T, aspect="auto", origin="lower")plt.xlabel("Posición")plt.ylabel("Dimensión")plt.title( "Sinusoidal Positional Encoding")plt.colorbar( label="Valor")plt.show()
¿Qué demuestra?
Las diferentes dimensiones representan patrones sinusoidales de distintas frecuencias.
16. ¿Puede la codificación sinusoidal representar distancias relativas?
Las funciones seno y coseno cumplen identidades que relacionan posiciones desplazadas.
Por ejemplo:
sin(a+b) = sin(a)cos(b) + cos(a)sin(b)
cos(a+b) = cos(a)cos(b) − sin(a)sin(b)
¿Qué significa?
Un desplazamiento fijo puede expresarse mediante una transformación lineal por pares de componentes sinusoidales.
¿Garantiza generalización a cualquier longitud?
No.
La existencia matemática de una codificación más allá de las posiciones de entrenamiento no garantiza que el modelo utilice correctamente contextos más largos.
17. ¿Qué son Learned Positional Embeddings?
Los Learned Positional Embeddings son vectores posicionales cuyos valores se aprenden durante entrenamiento.
Ejemplo
Una tabla de embeddings contiene:
- Posición 0 → vector entrenable.
- Posición 1 → vector entrenable.
- Posición 2 → vector entrenable.
¿En qué se diferencian de la codificación sinusoidal?
Sus valores no proceden de una fórmula fija.
Se optimizan mediante Backpropagation.
18. ¿Qué dimensiones tiene una tabla aprendida?
Si la longitud máxima de secuencia es Lmax y la dimensión del modelo es D:
Tabla = [Lmax, D]
Ejemplo
Lmax = 512.
D = 768.
Parámetros:
512 × 768 = 393.216
¿Qué ocurre con posiciones mayores que Lmax?
La tabla no contiene automáticamente embeddings para esos índices.
Se necesita una estrategia adicional para ampliar o adaptar el modelo.
19. Ejemplo 4 — Learned Positional Embeddings con PyTorch
import torchfrom torch import nnbatch_size = 2sequence_length = 12embedding_dim = 64max_positions = 128token_embeddings = torch.randn( batch_size, sequence_length, embedding_dim)position_table = nn.Embedding( num_embeddings=max_positions, embedding_dim=embedding_dim)positions = torch.arange( sequence_length)position_vectors = position_table( positions)combined = ( token_embeddings + position_vectors.unsqueeze(0))print( combined.shape)
Resultado esperado:
torch.Size([2, 12, 64])
¿Qué demuestra?
Podemos aprender directamente vectores asociados a índices de posición.
20. ¿Qué modelos utilizan posiciones aprendidas?
Los Learned Positional Embeddings aparecen en distintas arquitecturas Transformer, incluyendo configuraciones históricas de modelos de lenguaje y de Vision Transformer.
¿Todos los modelos GPT utilizan exactamente esta estrategia?
No.
Las generaciones y familias pueden utilizar enfoques posicionales distintos.
¿ViT original utiliza posiciones aprendidas?
Sí, en su formulación habitual.
21. ¿Qué es Relative Position Encoding?
La Relative Position Encoding incorpora información sobre los desplazamientos entre posiciones.
Ejemplo
Query en posición 4.
Key en posición 7.
Distancia relativa:
7 − 4 = 3
¿Qué aporta?
Permite representar relaciones que dependen de distancias, no únicamente de índices absolutos.
¿Se añade siempre un vector a cada embedding?
No.
Existen métodos que modifican el cálculo de atención directamente.
22. ¿Qué es Relative Position Bias?
Un Relative Position Bias añade un valor a la puntuación de atención en función de la distancia relativa entre Query y Key.
Una formulación conceptual es:
Scores(i,j) = qi·kj/√dk + b(i−j)
Donde:
b(i−j) representa un sesgo asociado al desplazamiento entre posiciones.
¿Ese sesgo se aprende?
Puede ser aprendido, dependiendo de la arquitectura.
¿Qué aporta?
Permite que la atención incorpore preferencias posicionales explícitas.
23. ¿Dónde se utiliza Relative Position Bias?
Aparece en diferentes arquitecturas, incluyendo variantes de Transformers de lenguaje y visión.
Por ejemplo:
- T5 utiliza sesgos relativos organizados en buckets.
- Swin Transformer utiliza sesgos relativos dentro de ventanas espaciales.
¿Los mecanismos son idénticos?
No.
Las distancias, tablas y reglas de asignación pueden diferir.
24. Ejemplo 5 — Matriz de posiciones relativas
import numpy as nplength = 5positions = np.arange(length)relative = ( positions[None, :] - positions[:, None])print(relative)
Resultado esperado:
[[ 0 1 2 3 4] [-1 0 1 2 3] [-2 -1 0 1 2] [-3 -2 -1 0 1] [-4 -3 -2 -1 0]]
¿Qué representa?
Cada fila corresponde a una Query y cada columna a una Key.
El signo indica la dirección del desplazamiento.
25. ¿Qué es Relative Position Bucketing?
Relative Position Bucketing agrupa diferentes distancias en categorías discretas.
Ejemplo conceptual
Distancias:
-
- ±1.
- ±2.
- ±3 a ±4.
- Distancias mayores.
¿Por qué agrupar?
Para limitar el número de parámetros y representar distancias grandes mediante categorías.
¿Qué modelo utiliza una estrategia conocida de este tipo?
T5.
¿Todos los buckets son simétricos?
No necesariamente.
Dependen de la configuración bidireccional o causal.
26. ¿Qué es Rotary Positional Embedding (RoPE)?
RoPE es una técnica de posición que transforma componentes de Query y Key mediante rotaciones dependientes del índice del token.
Fue presentada en RoFormer: Enhanced Transformer with Rotary Position Embedding, de Jianlin Su y colaboradores.
A diferencia de la codificación posicional absoluta aditiva, RoPE incorpora la posición en las representaciones utilizadas para calcular atención.
¿Qué hace?
Aplica rotaciones a pares de dimensiones.
¿Por qué es interesante?
El producto escalar entre Queries y Keys rotadas puede depender de la diferencia relativa de sus posiciones.
27. ¿Qué significa rotar vectores?
En dos dimensiones, una rotación de ángulo θ utiliza:
R(θ) = [[cos θ, −sin θ], [sin θ, cos θ]]
Aplicada a:
[x, y]
produce:
x’ = x cos θ − y sin θ
y’ = x sin θ + y cos θ
¿Qué conserva una rotación ideal?
La norma euclidiana del vector.
¿Qué cambia?
Su orientación.
28. ¿Cómo utiliza RoPE las posiciones?
Para una posición m y un par de dimensiones asociado a una frecuencia ω:
θ = mω
RoPE aplica la rotación:
R(mω)
¿Qué ocurre con distintos pares de dimensiones?
Se utilizan diferentes frecuencias.
¿Cuál es el efecto?
El producto entre una Query rotada en m y una Key rotada en n puede expresar relaciones dependientes de m−n.
29. Propiedad relativa de RoPE
Para una matriz de rotación R:
R(mθ)ᵀR(nθ) = R((n−m)θ)
Por tanto:
(R(mθ)q)ᵀ(R(nθ)k) = qᵀR((n−m)θ)k
¿Qué demuestra?
Que la interacción entre dos vectores puede depender de su desplazamiento relativo.
¿Garantiza comprensión perfecta de dependencias largas?
No.
Es una propiedad matemática del mecanismo, no una garantía de generalización de todo el modelo.
30. Ejemplo 6 — Rotar un vector con NumPy
import numpy as npdef rotate_2d(vector, angle): x, y = vector cosine = np.cos(angle) sine = np.sin(angle) return np.array([ x * cosine - y * sine, x * sine + y * cosine ])vector = np.array([ 1.0, 0.0])for position in [0, 1, 2]: rotated = rotate_2d( vector, angle=position * 0.5 ) print( position, np.round(rotated, 4) )
¿Qué demuestra?
Cada posición produce una orientación diferente del mismo vector.
31. ¿Cómo funciona RoPE con muchas dimensiones?
En lugar de rotar un único vector bidimensional, se agrupan las dimensiones de cada cabeza de atención en pares.
Ejemplo
Head Dimension:
64
Número de pares:
32
Cada par utiliza una frecuencia.
¿Es idéntico el orden de dimensiones en todas las implementaciones?
No.
Existen configuraciones que utilizan agrupaciones intercaladas o por mitades.
Es esencial utilizar la convención compatible con el checkpoint.
32. Ejemplo 7 — RoPE simplificado con PyTorch
import torchdef apply_rope(x, positions, base=10000.0): # x: [Batch, Heads, Sequence, HeadDim] batch, heads, length, dim = x.shape if dim % 2 != 0: raise ValueError( "HeadDim debe ser par" ) half = dim // 2 frequencies = 1.0 / ( base ** ( torch.arange( half, device=x.device, dtype=torch.float32 ) / half ) ) angles = ( positions.to( device=x.device, dtype=torch.float32 )[:, None] * frequencies[None, :] ) cos = angles.cos()[None, None, :, :] sin = angles.sin()[None, None, :, :] # Convención de pares intercalados pairs = x.float().reshape( batch, heads, length, half, 2 ) a = pairs[..., 0] b = pairs[..., 1] rotated = torch.stack( [ a * cos - b * sin, a * sin + b * cos ], dim=-1 ) return rotated.reshape_as(x).to(x.dtype)Q = torch.randn( 2, 4, 10, 32)positions = torch.arange(10)Q_rotated = apply_rope( Q, positions)print(Q_rotated.shape)
Resultado esperado:
torch.Size([2, 4, 10, 32])
¿Qué demuestra?
Podemos aplicar rotaciones dependientes de posición a cada par de dimensiones.
Precaución
Este ejemplo utiliza una convención de pares intercalados. Los checkpoints pueden utilizar otra distribución de dimensiones, otras frecuencias o mecanismos adicionales de escalado.
Para inferencia con un modelo preentrenado debemos respetar exactamente su implementación.
33. ¿RoPE se aplica a Query, Key y Value?
En su formulación habitual de atención, RoPE se aplica a:
- Query.
- Key.
No se requiere aplicar la misma rotación a Value para obtener la propiedad relativa descrita.
¿Por qué?
Porque la compatibilidad posicional se incorpora al producto QKᵀ.
¿Puede existir una arquitectura diferente?
Sí.
Los sistemas especializados pueden modificar otras partes de la atención.
34. ¿Cómo utilizar RoPE con KV Cache?
En inferencia autorregresiva, cada Key debe asociarse a su posición real dentro de la secuencia.
¿Qué ocurre al generar un token nuevo?
Se debe aplicar la posición correcta al nuevo Query y Key.
¿Qué riesgo existe?
Reiniciar posiciones o utilizar índices equivocados puede modificar las puntuaciones de atención.
¿Por qué importa el offset?
Porque durante generación incremental la secuencia ya puede contener tokens anteriores almacenados en KV Cache.
35. ¿Qué significa RoPE Scaling?
RoPE Scaling agrupa técnicas que modifican el comportamiento de las frecuencias o posiciones rotatorias para adaptar modelos a diferentes longitudes de contexto.
Ejemplos de familias de técnicas
- Position Interpolation.
- Escalados de frecuencia.
- NTK-aware Scaling.
- YaRN.
- LongRoPE.
¿Son intercambiables?
No.
Utilizan métodos y supuestos diferentes.
¿Permiten ampliar cualquier modelo sin entrenamiento ni evaluación?
No.
36. ¿Qué es Position Interpolation?
Position Interpolation es una estrategia que adapta índices posicionales a un intervalo menor para utilizar longitudes de secuencia mayores.
Una versión conceptual utiliza:
m’ = m / s
donde s es un factor de escala.
Ejemplo
Si s = 2:
Posición original 1000 se transforma en 500.
¿Qué ventaja busca?
Ajustar las fases posicionales a un rango más próximo al utilizado durante entrenamiento.
¿Cuál es el riesgo?
Puede modificar la resolución de las señales de distancia y perjudicar ciertas capacidades si no se ajusta adecuadamente.
37. ¿Qué es ALiBi?
ALiBi significa:
Attention with Linear Biases.
Fue presentado por Ofir Press, Noah A. Smith y Mike Lewis en Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation.
A diferencia de enfoques que añaden embeddings posicionales a los tokens, ALiBi modifica directamente las puntuaciones de atención utilizando penalizaciones relacionadas con la distancia.
¿Qué aporta?
Un sesgo que favorece posiciones cercanas según la dirección y configuración de atención.
38. Fórmula de ALiBi
En una configuración causal, para una Query en posición i y una Key anterior en posición j:
Score(i,j) = qi·kj/√dk − mh(i−j)
Donde:
- i ≥ j.
- mh es una pendiente positiva específica de la cabeza.
- i−j es la distancia hacia el pasado.
¿Qué ocurre con tokens lejanos?
Reciben una penalización de puntuación mayor.
¿Todas las cabezas tienen la misma pendiente?
En ALiBi se utilizan pendientes distintas entre cabezas.
39. Ejemplo 8 — Crear un sesgo ALiBi con NumPy
import numpy as npdef causal_alibi_bias( length, slope=0.25): positions = np.arange(length) distance = ( positions[:, None] - positions[None, :] ) bias = ( -slope * np.maximum(distance, 0) ) bias = np.where( distance >= 0, bias, -np.inf ) return biasbias = causal_alibi_bias( length=5, slope=0.25)print(bias)
¿Qué demuestra?
Las posiciones anteriores reciben penalizaciones crecientes con la distancia.
Las posiciones futuras se bloquean.
¿Es el generador completo de pendientes del artículo original?
No.
Se utiliza una única pendiente ilustrativa.
40. ¿Cómo se integra ALiBi en Self-Attention?
Partimos de:
S = QKᵀ / √dk
Añadimos el sesgo:
S’ = S + B_ALiBi
Después:
A = softmax(S’)
Finalmente:
Output = AV
¿Es necesario añadir un vector posicional al embedding?
No en la formulación original de ALiBi.
¿Qué diferencia existe con RoPE?
RoPE rota Q y K.
ALiBi añade un sesgo a las puntuaciones.
41. Ejemplo 9 — Atención con ALiBi en PyTorch
import torchimport torch.nn.functional as Flength = 6head_dim = 16Q = torch.randn( 1, 1, length, head_dim)K = torch.randn_like(Q)V = torch.randn_like(Q)position = torch.arange(length)distance = ( position[:, None] - position[None, :])slope = 0.25bias = -slope * distance.clamp_min(0).float()bias = bias.masked_fill( distance < 0, float("-inf"))output = F.scaled_dot_product_attention( Q, K, V, attn_mask=bias, dropout_p=0.0)print(output.shape)
Resultado esperado:
torch.Size([1, 1, 6, 16])
¿Qué demuestra?
Podemos incorporar información de distancia mediante un sesgo aditivo en las puntuaciones de atención.
42. Comparación entre Sinusoidal, Learned, RoPE y ALiBi
| Método | Dónde incorpora posición | Parámetros posicionales |
|---|---|---|
| Sinusoidal | Embeddings de entrada | Ninguno en la codificación fija |
| Learned Absolute | Embeddings de entrada | Tabla aprendible |
| Relative Bias | Puntuaciones de atención | Puede usar parámetros aprendibles |
| RoPE | Rotaciones de Q y K | Habitualmente frecuencias configuradas |
| ALiBi | Sesgos de puntuaciones | Pendientes deterministas en la formulación original |
¿Cuál es mejor?
No hay una respuesta universal.
¿Qué variables importan?
- Arquitectura.
- Longitud de contexto.
- Tarea.
- Entrenamiento.
- Hardware.
- Backend.
- Evaluación a longitudes no vistas.
43. ¿Qué método utiliza BERT?
BERT original utiliza embeddings aprendidos de posición absoluta, combinados con embeddings de token y de segmento.
¿Significa que todos los modelos Encoder utilizan posiciones aprendidas?
No.
¿Cuál es la longitud máxima habitual de BERT original?
Una configuración ampliamente conocida utiliza 512 posiciones.
¿Puede aumentarse sin cambios?
No debe asumirse.
44. ¿Qué método utiliza Vision Transformer?
ViT original utiliza embeddings posicionales aprendidos.
¿Por qué?
Porque los parches de imagen necesitan conservar información sobre su ubicación espacial.
¿Qué ocurre cuando cambia la resolución?
Puede ser necesario interpolar los embeddings posicionales para adaptarlos a una nueva cuadrícula.
45. ¿Qué es Positional Encoding 2D?
En visión artificial debemos representar posiciones en dos dimensiones:
- Fila.
- Columna.
Ejemplo
Una cuadrícula visual de 14 × 14 contiene 196 Patches.
Cada Patch tiene coordenadas:
(fila, columna)
¿Por qué utilizar 2D?
Porque la organización espacial de una imagen no es únicamente una secuencia de lectura lineal.
46. ¿Cómo construir una codificación sinusoidal 2D?
Una estrategia consiste en utilizar parte de la dimensión para representar filas y otra parte para columnas.
Ejemplo
Embedding Dimension:
64
Dimensiones para filas:
32
Dimensiones para columnas:
32
¿Qué obtenemos?
Un vector de 64 componentes que incorpora ambos índices.
47. Ejemplo 10 — Positional Encoding 2D con NumPy
import numpy as npdef sinusoidal_2d( height, width, embedding_dim): if embedding_dim % 4 != 0: raise ValueError( "embedding_dim debe ser " "divisible por 4" ) half = embedding_dim // 2 rows = sinusoidal_encoding( height, half ) columns = sinusoidal_encoding( width, half ) row_grid = np.broadcast_to( rows[:, None, :], (height, width, half) ) col_grid = np.broadcast_to( columns[None, :, :], (height, width, half) ) combined = np.concatenate( [row_grid, col_grid], axis=-1 ) return combinedencoding = sinusoidal_2d( height=14, width=14, embedding_dim=64)print(encoding.shape)
Resultado esperado:
(14, 14, 64)
¿Qué demuestra?
Podemos generar posiciones espaciales a partir de coordenadas bidimensionales.
48. ¿Qué es Relative Position Bias en Swin Transformer?
Swin Transformer utiliza atención dentro de ventanas espaciales.
Sus sesgos relativos pueden depender del desplazamiento entre fila y columna.
¿Por qué es útil?
Porque dos parches vecinos pueden mantener una relación espacial local incluso cuando la ventana se desplaza.
¿Utiliza siempre la misma tabla que un Transformer de lenguaje?
No.
Los desplazamientos son bidimensionales y las reglas difieren.
49. ¿Qué son posiciones temporales?
En modelos de vídeo y audio, la posición también puede representar el tiempo.
Ejemplo
Fotogramas:
- t = 0.
- t = 1.
- t = 2.
¿Qué aporta?
Información sobre la secuencia temporal.
¿Se necesita también información espacial?
En vídeo, frecuentemente sí.
Un sistema puede combinar dimensiones espaciales y temporales.
50. ¿Qué es el problema de Long-Context Extrapolation?
Long-Context Extrapolation consiste en utilizar el modelo con secuencias más largas que las habituales durante entrenamiento.
Ejemplo
Entrenamiento con contextos de 4096 tokens.
Inferencia con 8192 tokens.
¿Qué problemas pueden aparecer?
- Posiciones no vistas.
- Diferencias en las fases posicionales.
- Degradación de recuperación.
- Dificultades para utilizar información distante.
- Aumento de memoria y latencia.
¿Una codificación matemática definida para posiciones mayores garantiza buen funcionamiento?
No.
51. ¿Cómo evaluar la extensión del contexto?
Las pruebas deben comprobar más que la capacidad de ejecutar inferencia.
Métricas relevantes
- Perplexity.
- Precisión de recuperación.
- Recuperación por posición.
- Exactitud de respuestas.
- Retención de rendimiento en contextos cortos.
- Latencia y memoria.
- Calidad en tareas de razonamiento largo.
¿Por qué evaluar diferentes posiciones?
Porque un modelo puede recuperar información correctamente al principio y final del contexto, pero fallar en otras ubicaciones.
52. ¿Qué es Position Interpolation frente a extrapolación directa?
La extrapolación directa utiliza posiciones superiores a las vistas durante entrenamiento.
La interpolación adapta las posiciones para mantenerlas dentro de un rango transformado.
¿Cuál es mejor?
Depende de la arquitectura y del procedimiento de adaptación.
¿Se debe aplicar interpolación a cualquier modelo con RoPE?
No.
La configuración debe corresponder al modelo y al método seleccionado.
53. ¿Cómo afecta la codificación posicional a KV Cache?
Durante generación autorregresiva, Keys y Values de tokens anteriores pueden almacenarse.
Con RoPE
Las Keys almacenadas deben mantener la codificación correspondiente a sus posiciones.
Con ALiBi
Los sesgos dependen de la distancia entre la Query actual y las Keys almacenadas.
¿Por qué importa?
Porque una gestión incorrecta de índices puede modificar las relaciones de atención.
54. ¿Cómo implementar una capa sinusoidal reutilizable en PyTorch?
Podemos crear un módulo que registre una tabla determinista mediante register_buffer.
¿Por qué utilizar un buffer?
Porque los valores no necesitan optimizarse mediante gradientes, pero deben moverse junto con el modelo al dispositivo adecuado.
55. Ejemplo 11 — Módulo SinusoidalPositionalEncoding
import mathimport torchfrom torch import nnclass SinusoidalPositionalEncoding(nn.Module): def __init__( self, embedding_dim, max_length=4096 ): super().__init__() if embedding_dim % 2 != 0: raise ValueError( "embedding_dim debe ser par" ) positions = torch.arange( max_length, dtype=torch.float32 ).unsqueeze(1) div_term = torch.exp( torch.arange( 0, embedding_dim, 2, dtype=torch.float32 ) * ( -math.log(10000.0) / embedding_dim ) ) encoding = torch.zeros( max_length, embedding_dim ) encoding[:, 0::2] = torch.sin( positions * div_term ) encoding[:, 1::2] = torch.cos( positions * div_term ) self.register_buffer( "encoding", encoding.unsqueeze(0), persistent=False ) def forward(self, x): length = x.size(1) if length > self.encoding.size(1): raise ValueError( "Secuencia demasiado larga" ) positions = self.encoding[ :, :length, : ].to(dtype=x.dtype) return x + positionslayer = SinusoidalPositionalEncoding( embedding_dim=64, max_length=512)tokens = torch.randn( 2, 20, 64)result = layer(tokens)print(result.shape)
Resultado esperado:
torch.Size([2, 20, 64])
¿Qué demuestra?
Podemos incorporar posiciones sinusoidales de manera reutilizable dentro de un modelo PyTorch.
¿Admite posiciones iniciales distintas de cero?
Esta versión educativa comienza siempre en la posición cero.
Para generación incremental debe añadirse una gestión explícita del offset posicional.
56. ¿Cómo se combina con un Transformer Encoder?
Podemos sumar la codificación antes de los bloques Transformer.
Ejemplo conceptual
Token Embedding → Positional Encoding → Transformer Encoder → Salida
57. Ejemplo 12 — Posiciones y Transformer Encoder
import torchfrom torch import nnembedding_dim = 64position = SinusoidalPositionalEncoding( embedding_dim=embedding_dim, max_length=512)encoder_layer = nn.TransformerEncoderLayer( d_model=embedding_dim, nhead=4, dim_feedforward=256, batch_first=True)encoder = nn.TransformerEncoder( encoder_layer, num_layers=2)tokens = torch.randn( 2, 12, embedding_dim)tokens_with_position = position( tokens)output = encoder( tokens_with_position)print(output.shape)
Resultado esperado:
torch.Size([2, 12, 64])
¿Qué demuestra?
La información posicional puede integrarse antes de un Transformer Encoder.
¿Está entrenado para una tarea real?
No.
Es un ejemplo de arquitectura.
58. ¿Cómo comprobar que la posición importa?
Una prueba educativa consiste en comparar salidas al cambiar el orden de los tokens.
Condiciones
- Modelo sin información posicional.
- Modelo con información posicional.
- Misma permutación de entrada.
- Modo de evaluación sin Dropout.
¿Qué deberíamos observar?
Sin posiciones, Self-Attention convencional es equivariante a permutaciones.
Con embeddings posicionales fijos asociados a índices, cambiar los tokens de orden sin cambiar las posiciones puede modificar las relaciones de atención y las representaciones resultantes.
59. ¿Cuál es el coste de Positional Encoding?
Depende del método.
Sinusoidal
Puede calcularse previamente y reutilizarse.
Learned Absolute
Requiere almacenar una tabla de parámetros.
Relative Bias
Puede requerir una matriz o una forma eficiente de generar sesgos.
RoPE
Incorpora operaciones de rotación sobre Q y K.
ALiBi
Añade sesgos a las puntuaciones de atención.
¿Cuál utiliza menos memoria en cualquier circunstancia?
No existe una respuesta universal.
Debemos medir la implementación completa.
60. ¿Qué método conviene para un Transformer nuevo?
Depende de los objetivos.
| Necesidad | Estrategia que merece evaluar |
|---|---|
| Aprendizaje del Transformer original | Sinusoidal |
| Modelo con longitud fija y posiciones entrenables | Learned Absolute |
| Relaciones entre posiciones | Relative Bias |
| Decoder autorregresivo moderno | RoPE |
| Experimentos de extrapolación de longitud | ALiBi o métodos adaptados |
| Modelo visual jerárquico | Relative Position Bias 2D |
¿Es una tabla de ganadores?
No.
Son puntos de partida para experimentación.
61. Codificación posicional en modelos multimodales
Un modelo multimodal puede procesar:
- Texto.
- Imágenes.
- Audio.
- Vídeo.
¿Qué desafío aparece?
Cada modalidad posee una estructura posicional diferente.
Texto
Orden secuencial.
Imagen
Fila y columna.
Audio
Tiempo.
Vídeo
Tiempo y posición espacial.
¿Cómo se resuelve?
Mediante mecanismos posicionales específicos o una representación conjunta diseñada para el sistema.
62. ¿Qué relación tiene Positional Encoding con la búsqueda semántica?
Los modelos de embeddings pueden utilizar Transformers con información posicional.
¿Qué significa?
El orden de los términos puede influir en las representaciones generadas.
¿La búsqueda semántica depende únicamente de Positional Encoding?
No.
Depende del modelo completo, su entrenamiento y el procedimiento de recuperación.
63. Positional Encoding en análisis de documentos
Los documentos contienen estructuras como:
- Títulos.
- Párrafos.
- Tablas.
- Columnas.
- Encabezados.
- Secciones.
¿Qué puede aportar la posición?
Información sobre el orden de tokens y la organización espacial cuando la arquitectura incorpora mecanismos adecuados.
¿Es suficiente una codificación unidimensional para comprender cualquier documento?
No.
Los documentos visualmente complejos pueden necesitar representaciones bidimensionales u otros componentes.
64. Positional Encoding y AI Visibility
La codificación posicional ayuda a comprender cómo los modelos Transformer procesan secuencias ordenadas.
Ejemplo
Una consulta compara:
«Software de contabilidad para autónomos».
con:
«Contabilidad de software para autónomos».
Aunque algunas palabras coinciden, el orden puede modificar su significado.
Los Transformers pueden utilizar señales posicionales para distinguir representaciones.
¿Qué significa para AI Visibility?
Es un concepto fundamental para explicar cómo funcionan los modelos, pero no constituye por sí mismo una técnica de optimización de visibilidad de marca.
65. ¿Positional Encoding mejora Recommendation Rate?
No directamente.
Recommendation Rate es una métrica de recomendaciones observadas.
La codificación posicional es un componente interno del procesamiento Transformer.
No existe una fórmula que relacione directamente la frecuencia de recomendación de una marca con un valor de Positional Encoding.
66. ¿Positional Encoding mejora Citation Coverage?
No directamente.
Citation Coverage depende de las fuentes citadas en respuestas observadas bajo una metodología.
Las señales posicionales no equivalen a referencias ni citas externas.
La generación de citas depende de mecanismos más amplios, como recuperación de información, acceso a fuentes y generación de respuestas.
67. Errores frecuentes sobre Codificación Posicional
Error 1. Suponer que Self-Attention conoce automáticamente el orden
La operación básica no incorpora orden por sí sola.
Error 2. Confundir posiciones absolutas y relativas
Representan información diferente.
Error 3. Pensar que todas las posiciones se añaden al embedding
RoPE y ALiBi utilizan mecanismos distintos.
Error 4. Confundir seno y coseno con parámetros aprendidos
La codificación sinusoidal original es fija.
Error 5. Utilizar dimensiones incompatibles
Puede impedir la suma con embeddings.
Error 6. Confundir dimensión del modelo con longitud de secuencia
Son ejes distintos.
Error 7. Reiniciar posiciones durante generación con KV Cache
Puede alterar las puntuaciones de atención.
Error 8. Suponer que Learned Positional Embeddings admiten cualquier longitud
Una tabla tiene una cantidad concreta de posiciones.
Error 9. Cambiar resolución de ViT sin revisar Positional Embeddings
Puede generar incompatibilidades.
Error 10. Suponer que RoPE es una simple suma de vectores
Utiliza rotaciones.
Error 11. Aplicar RoPE a Values sin justificación
No corresponde a la formulación habitual.
Error 12. Mezclar convenciones de pares de RoPE
Puede invalidar la compatibilidad con un checkpoint.
Error 13. Cambiar la base de RoPE arbitrariamente
Puede modificar el comportamiento aprendido.
Error 14. Suponer que ALiBi utiliza una tabla de embeddings aprendidos
Su formulación original utiliza sesgos lineales.
Error 15. Utilizar la dirección equivocada para la distancia causal
Puede penalizar posiciones incorrectas.
Error 16. Confundir Relative Bias con Relative Embedding
Son familias relacionadas pero no idénticas.
Error 17. Interpretar la extrapolación matemática como calidad garantizada
No implica buena generalización.
Error 18. Suponer que ampliar la ventana de contexto no tiene coste
La atención puede requerir más memoria y operaciones.
Error 19. No controlar las máscaras
Puede provocar acceso a información futura no permitida.
Error 20. Confundir posiciones de tokens con coordenadas de píxeles
Deben respetarse las modalidades.
Error 21. Utilizar una codificación 1D para cualquier diseño de visión sin evaluarla
Puede perder información espacial útil.
Error 22. Suponer que un método es mejor en cualquier tarea
Los resultados dependen del contexto.
Error 23. Cambiar la codificación de un modelo preentrenado sin adaptación
Puede degradar el rendimiento.
Error 24. Evaluar solamente si el modelo acepta secuencias largas
También debe evaluarse su calidad.
Error 25. Relacionar directamente Positional Encoding con Citation Coverage
No existe una equivalencia.
68. Buenas prácticas
- Identificar el tipo de arquitectura.
- Documentar el método posicional utilizado.
- Comprender la diferencia entre posición absoluta y relativa.
- Verificar las dimensiones tensoriales.
- Controlar la convención de índices.
- Respetar el tratamiento de padding.
- Utilizar máscaras causales cuando corresponda.
- Documentar la longitud máxima de contexto.
- Gestionar correctamente los offsets de KV Cache.
- Verificar la convención exacta de RoPE.
- Mantener coherencia con checkpoints preentrenados.
- Evitar cambios arbitrarios de frecuencias.
- Evaluar interpolación y escalado con pruebas específicas.
- Medir calidad en contexto corto y largo.
- Evaluar diferentes posiciones del contexto.
- Medir memoria y latencia.
- Separar la complejidad de atención del coste posicional.
- Utilizar codificaciones 2D cuando la tarea lo requiera.
- Comprobar los efectos del redimensionado visual.
- Registrar versiones y configuraciones.
- Comparar contra una línea base.
- Evaluar con datos representativos.
- Utilizar pruebas matemáticas de equivalencia.
- Documentar las limitaciones.
- No atribuir capacidades completas del modelo únicamente al mecanismo posicional.
Preguntas frecuentes sobre Positional Encoding
¿Qué es Positional Encoding?
Es un mecanismo que incorpora información sobre el orden o posición de tokens en modelos Transformer.
¿Por qué es necesario?
Porque Self-Attention estándar no representa explícitamente el orden de los tokens.
¿Quién introdujo la codificación sinusoidal del Transformer?
Vaswani y colaboradores en 2017.
¿Qué es Sinusoidal Positional Encoding?
Una codificación fija basada en funciones seno y coseno de diferentes frecuencias.
¿Qué representa pos?
El índice de posición.
¿Qué es d_model?
La dimensión de la representación del token.
¿Por qué utilizar seno y coseno?
Para crear señales posicionales estructuradas de diferentes frecuencias.
¿Qué significa la constante 10000?
Es la base utilizada en la formulación original para distribuir frecuencias.
¿La codificación sinusoidal se aprende?
No en su formulación fija.
¿Qué es Learned Positional Embedding?
Una representación posicional cuyos valores se optimizan durante entrenamiento.
¿Qué diferencia existe entre posiciones absolutas y relativas?
Las absolutas representan índices; las relativas representan desplazamientos entre posiciones.
¿Qué es Relative Position Bias?
Es un sesgo añadido a puntuaciones de atención según desplazamientos relativos.
¿Qué es T5 Relative Position Bucketing?
Es un mecanismo de agrupación de distancias relativas en categorías utilizadas para calcular sesgos.
¿Qué es RoPE?
Rotary Positional Embedding.
¿Quién propuso RoPE?
Jianlin Su y colaboradores.
¿Cómo funciona RoPE?
Aplica rotaciones dependientes de posición a Query y Key.
¿RoPE se añade a los embeddings?
No en su formulación habitual.
¿Qué significa rotar Query y Key?
Aplicar transformaciones que modifican sus componentes según ángulos posicionales.
¿RoPE incorpora relaciones relativas?
Sí, mediante las diferencias entre rotaciones posicionales.
¿RoPE garantiza contexto ilimitado?
No.
¿Qué es RoPE Scaling?
Son técnicas para modificar las señales rotatorias al adaptar longitudes de contexto.
¿Qué es Position Interpolation?
Es una técnica que transforma índices posicionales para manejar contextos más largos.
¿Qué es ALiBi?
Attention with Linear Biases.
¿Cómo funciona ALiBi?
Añade penalizaciones relacionadas con la distancia a las puntuaciones de atención.
¿ALiBi utiliza pendientes distintas por cabeza?
Sí en su formulación característica.
¿ALiBi siempre mejora la extrapolación?
No en todas las tareas y modelos.
¿Qué método utiliza ViT original?
Learned Positional Embeddings.
¿Qué utiliza BERT original?
Embeddings posicionales absolutos aprendidos.
¿Qué es Positional Encoding 2D?
Una representación de posiciones espaciales en filas y columnas.
¿Qué es Relative Position Bias en Swin?
Un mecanismo que incorpora desplazamientos espaciales dentro de ventanas de atención.
¿Qué es Long-Context Extrapolation?
Utilizar el modelo con secuencias mayores que las habituales durante entrenamiento.
¿Es lo mismo extrapolar que interpolar?
No.
¿Qué es KV Cache?
Es el almacenamiento de Keys y Values para inferencia incremental.
¿Por qué importa la posición en KV Cache?
Porque las representaciones deben conservar los índices correctos de la secuencia.
¿Positional Encoding mejora las capacidades de razonamiento?
Puede influir en cómo se procesa el orden y las relaciones, pero no garantiza una mejora universal de razonamiento.
¿Puede utilizarse en imágenes?
Sí.
¿Puede utilizarse en vídeo?
Sí, utilizando representaciones espaciales y temporales apropiadas.
¿Puede implementarse con NumPy?
Sí.
¿Puede implementarse con PyTorch?
Sí.
¿Es obligatorio utilizar GPU?
No.
¿Qué tipo es mejor para un Transformer nuevo?
Depende de la tarea, arquitectura y requisitos.
¿Positional Encoding mejora Recommendation Rate?
No directamente.
¿Aumenta Citation Coverage?
No directamente.
¿Por qué importa para AI Visibility?
Permite comprender cómo los Transformers representan el orden y la organización del contenido que procesan.
Conceptos relacionados
- Inteligencia Artificial.
- Deep Learning.
- Redes Neuronales.
- Transformer.
- Self-Attention.
- Multi-Head Attention.
- Positional Encoding.
- Absolute Position.
- Relative Position.
- Sinusoidal Positional Encoding.
- Learned Positional Embedding.
- Relative Position Bias.
- Rotary Positional Embedding.
- RoPE.
- ALiBi.
- Position Interpolation.
- RoPE Scaling.
- NTK-aware Scaling.
- Attention Bias.
- Token Embedding.
- Query.
- Key.
- Value.
- KV Cache.
- Context Window.
- Long-Context Extrapolation.
- Vision Transformer.
- Swin Transformer.
- BERT.
- PyTorch.
- NumPy.
- AI Visibility.
Conclusión
La Codificación Posicional (Positional Encoding) es uno de los mecanismos fundamentales para que los modelos Transformer representen el orden y la organización de la información.
La autoatención convencional relaciona tokens mediante operaciones matemáticas, pero no proporciona por sí sola una representación explícita de sus posiciones.
Los mecanismos posicionales resuelven esta limitación mediante diferentes estrategias.
La codificación sinusoidal utiliza funciones seno y coseno.
Los embeddings aprendidos asignan parámetros entrenables a posiciones.
Los métodos relativos representan distancias o desplazamientos.
RoPE aplica rotaciones a Query y Key para incorporar relaciones posicionales en las puntuaciones de atención.
ALiBi introduce penalizaciones lineales relacionadas con la distancia.
En visión artificial, las codificaciones bidimensionales y los sesgos relativos permiten representar la organización espacial de las imágenes.
Estos mecanismos también son relevantes en sistemas de contexto largo, donde deben mantenerse representaciones posicionales coherentes durante la generación y el uso de KV Cache.
Sin embargo, la posibilidad de calcular una codificación para posiciones muy grandes no garantiza una generalización adecuada.
Los modelos deben evaluarse con tareas, longitudes y posiciones de contexto representativas.
Para aplicaciones empresariales, Positional Encoding es una tecnología subyacente de modelos utilizados en procesamiento de documentos, búsqueda semántica, clasificación visual y asistentes inteligentes.
En AI Visibility ayuda a comprender los fundamentos de los Transformers, aunque no produce directamente nuevas recomendaciones ni citas de marcas.
La conclusión fundamental es que Positional Encoding permite que los Transformers distingan el contenido de los tokens de su posición y de sus relaciones espaciales o temporales. Comprender sus variantes es esencial para estudiar los modelos de lenguaje, Vision Transformers y las técnicas modernas de procesamiento de contextos largos.
