Phase 07: Transformers Deep Dive

Konut kodlaması Sinusoidal, RoPE, ALiBi

Dikkat, permutasyon-invariant. "Kedi çarşaf üzerinde oturdu" ve "mat üzerinde sat kedi" pozisyon sinyalsiz aynı çıkış üretir.

Type: Build

Languages: Python

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

Time: ~45 minutes

Sorun

Skalalı nokta ürün dikkat, sırayla kördür.softmax(Q K^T / √d) V XDikkatin içinde hiçbir şey pozisyonu önemsemedi.

Bu bir kelime çantası modelinde bir hata değil. dil, kod, ses, video için emir anlamı taşıyan her şey ölümcül.

Bu çözüm, yerleşimlere bir şekilde yerleştirmek.

  1. Absolute sinusoidal(Vaswani 2017) Ekle sin/cosBasit, öğrenilmez, eğitimli uzunluklardan kötü bir şekilde uzaklaştırılır.
  2. RoPE — Rotary Position Embeddings(Su 2021). Q ve K vektörlerini pozisyonuna orantılı bir açıyla döndürün.
  3. ALiBi — Attention with Linear Biases(Press 2022). Tüm yerleşimleri atlayın; mesafeye göre dikkat puanlarına baş başına bir çizgi ceza ekleyin. Mükemmel uzunluk ekstrapolasyonu.

2026 itibariyle, esasen her sınır açık modeli RoPE kullanır: Llama 2/3/4, Qwen 2/3, Mistral, Mixtral, DeepSeek-V3, Kimi.

Anlaşım

!Sinusoidal absolute vs RoPE rotations vs ALiBi distance bias

Kesin sinusoidal

Bir sabit matris önceden hesaplayın PEşekli ile(max_len, d_model)- ...

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

O zaman ...X' = X + PE[:N]Her boyut farklı bir frekansta sinusoid.max_len: hiçbir şey modelin sadece pozisyon 02047'i gördüğünde 2048 pozisyonunda ne olduğunu söylemedi.

RoPE

Bir çift boyut için Q ve K vektörlerini (kaynak değil) döndürün (2i, 2i+1)- ...

[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

Aynı dönümsellik pozisyonlu anahtarlara uygulayın pos_k- Dots ürünüq'_m · k'_n(m - n)- Yalnız.the attention score depends only on the relative distance- ...eğer de dönüşüm mutlak pozisyonlarda kilitlenmiş olsa.

RoPE'yi uzatmak: baseLlama 3'ün 8K'den 128K'ye kadar uzandığı bu şekilde.

ALiBi

Dikkatin doğrudan puanlarını ayır.

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

Nerede ?m_hbaşı için özel bir eğimdir (örneğin 1 / 2^(8·h/H)) Yakınlıklı tokenler artırılır; uzak tokenler cezalandırılır. Eğitim zamanı maliyeti yoktur. Kağıt uzunluk ekstrapolasyonunun sinusoidal olduğunu ve RoPE'ye orijinal eğitim uzunluğunda eşleştiğini gösterir.

2026'da neyi seçmeliyiz?

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, yapısını değiştirmeden dikkat çekerek, nispet konumunu kodlayarak ve basehiperparametre uzun bağlamlı ince ayarlama için temiz bir düğme verir.

Yapın

Adım 1: Sinusoidal kodlama

Bakın .code/main.py- 4 satırlık hesaplama:

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

İlk dikkat katmanından önce bunu yerleştirme matrisine ekleyin.

Adım 2: Q, K'ye uygulanan RoPE

RoPE, Q ve K'de yerinde çalışır. Her çift dimmer için:

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

Önemli: aynı işlevi pozisyonda Q ' e uygulayın mVe K pozisyonda n- Dots ürünü bir cos((m-n)·θ_i)Dikkat, nispet konumunu ücretsiz öğrenir.

Adım 3: ALiBi yamaçları ve tarafsızlığı

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

Eklebias[h]- ...(seq_len, seq_len)dikkat puanı matrisi başı h, sonra softmax.

Adım 4: RoPE'nin nispet mesafe özelliğini doğrulayın

İki rastgele vektör seçin .a, b- Dönüşüm .(pos_a, pos_b)- Sonra da .(pos_a + k, pos_b + k)Bu özellik RoPE'nin tüm noktasıdır mutlak sıfırlama ile değişmez, sadece nispetik boşluk önemlidir.

Kullan

PyTorch 2.5+ gemileri RoPE hizmetleri torch.nn.functionalÇoğu üretim kodu kullanıyor.flash_attnveya xformersRoPE dikkat çekirdeğinin içinde uygulanır.

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.Yeniden ölçeklendirmebase- ...base * (scale_factor)^(d/(d-2))4K'den 16K'ye kadar uzanırken.
  • YaRN.Daha akıllı bir interpolasyon, uzun bağlamlarda dikkat entropiyi korur. Llama 3.1 128K kullanıyor.
  • LongRoPE.Microsoft'un 2024 yöntemi, evrimsel arama kullanarak boyut boyutlarındaki faktörleri seçer.
  • Position interpolation + fine-tuning.Sadece pozisyonları uzatma faktörü ile küçültüp 15B token için ince ayarlayın.

Gönder

Bakın .outputs/skill-positional-encoding-picker.md. Bu beceri, hedef bağlam uzunluğu, ekstrapolasyon ihtiyaçları ve eğitim bütçesi göz önüne alındığında yeni bir model için bir kodlama stratejisini seçer.

Egzersizler

  1. Easy.Sinusoidal çizgiyi çiz .PE için bir ısı haritası olarak matrismax_len=512, d=128"Dimension index büyüdükçe çizgiler daha genişleşiyor" şeklini onaylayın.
  2. Medium.NTK-a karşı duyarlı RoPE ölçeklendirme uygulayın. 256 uzunluklı sekanslarda küçük bir LM çalıştırın, sonra 1024 uzunlukta ölçeklendirme ile ve olmaksızın test edin. Kafasını karışıklık ölçün.
  3. Hard.ALiBi ve RoPE'yi aynı dikkat modülüne uygulayın. 4 katlı bir transformatörü bir kopyalama görevi üzerinde uzunluğu 512 olan dizilerle çalıştırın. Test sırasında 2048'e ekstrapolasyon yapın.

Anahtar Terimler

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?

Daha Fazla Okumak

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.