Phase 07: Transformers Deep Dive

Encriptación de posición Sinusoidal, RoPE, ALiBi

La atención es invariable en la permutación. "El gato se sentó en el tapicero" y "el gato en el sat" producen la misma salida sin señal de posición. Tres algoritmos la arreglan cada uno con una apuesta diferente en lo que significa "posición".

Type: Build

Languages: Python

Prerequisites: Phase 7 · 02 (Self-Attention), Phase 7 · 03 (Multi-Head Attention)

Time: ~45 minutes

El problema

La atención a escala de producto de punto es ciega al orden.softmax(Q K^T / √d) VSe calcula a partir de similitudes parecidas.XNo hay nada dentro de la atención que se preocupe por la posición.

Para el lenguaje, código, audio, video cualquier cosa donde el orden lleva un significado es fatal.

La solución es inyectar posición en los embeddings de alguna manera.

  1. Absolute sinusoidal(Vaswani 2017). Añadir sin/cosEs simple, sin aprendizaje, extrapola poco más allá de las longitudes entrenadas.
  2. RoPE — Rotary Position Embeddings(Su 2021). Rotar los vectores Q y K por un ángulo proporcional a la posición. Encodifica posición relativa directamente en el producto de puntos. Dominante en 2026.
  3. ALiBi — Attention with Linear Biases(Presiones 2022). Salta los embebidos por completo; añade una penalización lineal por cabeza a las puntuaciones de atención basadas en la distancia. Excelente extrapolación de longitud.

A partir de 2026, prácticamente todos los modelos abiertos fronterizos usan RoPE: Llama 2/3/4, Qwen 2/3, Mistral, Mixtral, DeepSeek-V3, Kimi. Un puñado de modelos de contexto largo usan ALiBi o sus variantes modernas.

El concepto

!Sinusoidal absolute vs RoPE rotations vs ALiBi distance bias

Sinusoidal absoluto

Precomputa una matriz fija PEde forma(max_len, d_model)¿Qué es esto ?

PE[pos, 2i]   = sin(pos / 10000^(2i / d_model))
PE[pos, 2i+1] = cos(pos / 10000^(2i / d_model))

Entonces ...X' = X + PE[:N]Cada dimensión es un sinusoide con una frecuencia diferente. El modelo aprende a leer la posición del patrón de fase.max_len: nada le dijo al modelo lo que pasaba en la posición 2048 cuando sólo veía posiciones 02047.

RoPE

Gira los vectores Q y K (no embeddings). Para un par de dimensiones (2i, 2i+1)¿Qué es esto ?

[q'_2i    ]   [ cos(pos·θ_i)  -sin(pos·θ_i) ] [q_2i   ]
[q'_2i+1  ] = [ sin(pos·θ_i)   cos(pos·θ_i) ] [q_2i+1 ]

θ_i = base^(-2i / d_head),  base = 10000 by default

Aplicar la misma rotación a las teclas con posición pos_k. El producto de puntos q'_m · k'_nse convierte en una función de (m - n)Sólo.the attention score depends only on the relative distance, aunque la rotación estaba bloqueada en posiciones absolutas.

Extender el RoPE: baseEl Llama 3 se extendió de 8K a 128K de esta manera.

El mismo

Salta el truco de incrustación.

attn_score[i, j] = (q_i · k_j) / √d  -  m_h · |i - j|

¿ Dónde ?m_hes una pendiente específica de la cabeza (por ejemplo 1 / 2^(8·h/H)Los tokens más cercanos se incrementan; los tokens más lejanos se penalizan. No hay costo de tiempo de entrenamiento. El documento muestra que la extrapolación de longitud supera sinusoidal y coincide con el RoPE en su longitud entrenada original.

Qué elegir en 2026

VariantExtrapolationTraining costUsed by
Absolute sinusoidalpoorfreeoriginal transformer, early BERT
Learned absolutenonetinyGPT-2, GPT-3
RoPEgood with scalingfreeLlama 2/3/4, Qwen 2/3, Mistral, DeepSeek-V3, Kimi
RoPE + YaRNexcellentfine-tune stageQwen2-1M, Llama 3.1 128K
ALiBiexcellentfreeBLOOM, MPT, Baichuan

RoPE ganó porque atrajo la atención sin cambiar la arquitectura, codifica la posición relativa y subaseEl hiperparámetro da un botón limpio para ajustar el contexto largo.

Construye el mismo

Paso 1: codificación sinusoidal

¿ Qué ?code/main.pyUn cálculo de 4 líneas:

pythondef sinusoidal(N, d):
    pe = [[0.0] * d for _ in range(N)]
    for pos in range(N):
        for i in range(d // 2):
            theta = pos / (10000 ** (2 * i / d))
            pe[pos][2 * i]     = math.sin(theta)
            pe[pos][2 * i + 1] = math.cos(theta)
    return pe

Añadir esto a la matriz de incorporación antes de la primera capa de atención.

Paso 2: RoPE aplicado a Q, K

RoPE opera en el lugar en Q y K. Para cada par de dimmers:

pythondef apply_rope(x, pos, base=10000):
    d = len(x)
    out = list(x)
    for i in range(d // 2):
        theta = pos / (base ** (2 * i / d))
        c, s = math.cos(theta), math.sin(theta)
        a, b = x[2 * i], x[2 * i + 1]
        out[2 * i]     = a * c - b * s
        out[2 * i + 1] = a * s + b * c
    return out

Crucial: aplicar la misma función a Q en posición my K en posición nSu producto de puntos recoge uncos((m-n)·θ_i)La atención aprende la posición relativa de forma gratuita.

Paso 3: Pistas y sesgos de ALiBi

pythondef alibi_bias(n_heads, seq_len):
    # slope_h = 2 ** (-8 * h / n_heads) for h = 1..n_heads
    slopes = [2 ** (-8 * (h + 1) / n_heads) for h in range(n_heads)]
    bias = []
    for m in slopes:
        row = [[-m * abs(i - j) for j in range(seq_len)] for i in range(seq_len)]
        bias.append(row)
    return bias  # add to attention scores before softmax

Añadirbias[h]a la (seq_len, seq_len)Matriz de puntaje de atención de la cabeza h, luego softmax.

Paso 4: verificar la propiedad relativa de distancia del RoPE

Escoge dos vectores aleatorios .a, b- Gira por el .(pos_a, pos_b)Entonces por(pos_a + k, pos_b + k). ambos productos de puntos deben coincidir dentro del error de punto flotante. Esa propiedad es el punto entero de RoPE es invariante al desvio absoluto, sólo la brecha relativa importa.

Usalo

PyTorch 2.5+ envía a los servicios públicos de RoPE en torch.nn.functionalLa mayoría de los códigos de producción usanflash_attno xformersen el que se aplique RoPE dentro del núcleo de atención.

pythonfrom transformers import AutoModel
model = AutoModel.from_pretrained("meta-llama/Llama-3.2-3B")
# model.config.rope_scaling → {"type": "yarn", "factor": 32.0, "original_max_position_embeddings": 8192}

Long-context tricks in 2026:

  • NTK-aware interpolation.Reescaladobase¿ Qué ?base * (scale_factor)^(d/(d-2))cuando se extiende de 4K a 16K+.
  • YaRN.Interpolación más inteligente que preserva la entropía de la atención en contextos largos.
  • LongRoPE.El método 2024 de Microsoft que utiliza la búsqueda evolutiva para seleccionar factores de escala por dimensión.
  • Position interpolation + fine-tuning.Sólo reducir las posiciones por el factor de extensión y ajustar a 15B tokens. Sorprendentemente eficaz.

Envío

¿ Qué ?outputs/skill-positional-encoding-picker.md. La habilidad elige una estrategia de codificación para un nuevo modelo dada la longitud del contexto objetivo, las necesidades de extrapolación y el presupuesto de formación.

Los ejercicios

  1. Easy.Traza el senoideal .PEmatriz como mapa de calor para max_len=512, d=128Confirmar el patrón de "las franjas se amplían a medida que crece el índice de dimensiones".
  2. Medium.Implemente una escalación de RoPE consciente de NTK. Entrenar un pequeño LM en secuencias de longitud 256, luego probar en longitud 1024 con y sin escalación. Medir la perplejidad.
  3. Hard.Implemente ALiBi y RoPE en el mismo módulo de atención. Entrenar un transformador de 4 capas en una tarea de copia con secuencias de longitud 512. Extrapolar a 2048 en el momento de la prueba. Comparar degradación.

Términos clave

TermWhat people sayWhat it actually means
Positional encoding"Tells attention about order"Any signal added to embeddings or attention that encodes position.
Sinusoidal"The original one"sin/cos at geometric frequencies added to embeddings; doesn't extrapolate.
RoPE"Rotary embeddings"Rotate Q, K by position-dependent angle; dot product encodes relative distance.
ALiBi"Linear bias trick"Add -m·|i-j| to attention scores; no embedding needed, great extrapolation.
base"RoPE's knob"The frequency scaler in RoPE; increase to extend context at inference.
NTK-aware"A RoPE scaling trick"Rescale base so high-frequency dims aren't squeezed when context expands.
YaRN"The fancy one"Per-dimension interpolation+extrapolation that preserves attention entropy.
Extrapolation"Works beyond trained length"Can the position scheme serve correct output past max_len seen in training?

Leer más

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.