Position Encoding Neden Zorunlu? Sinusoidal vs Learned Absolute Position — Vaswani 2017'den GPT-2'ye Klasik Yaklaşımlar
Attention'ın permutation-invariance problemi: 'Köpek kediyi ısırdı' ile 'Kedi köpeği ısırdı' aynı! Position encoding'in zorunluluğu. Vaswani 2017 sinusoidal formülü (sin/cos farklı frequency'lerde), generalization argümanı (longer sequences). GPT-2 learned absolute position embedding, max_position_embeddings sınırı. Trade-offs, Türkçe sözdizimi için pratik anlamı.
Şükrü Yusuf KAYA
65 dakikalık okuma
İleri📍 Attention sıra bilmez — pozisyon bilgisi ayrı injected edilmeli
Vaswani 2017 transformer'ı tasarlarken bir 'eksik' fark etti: attention mekanizması permutation-invariant. 'Köpek kediyi ısırdı' ile 'Kediyi köpek ısırdı' aynı attention output verir — özne-yüklem-nesne sırası kaybolur. RNN'lerde sequential işlem doğal olarak position bilgisi taşıyor, ama paralel attention'da bu manuel injection gerekir. Çözüm: position encoding. Bu ders position encoding'in niye zorunlu olduğunu, Vaswani 2017'nin sinusoidal formülünün matematiksel anatomisini, GPT-2'nin learned absolute embedding'inin trade-off'larını, Türkçe sözdizimi için pratik anlamını ders boyunca derinlemesine işliyoruz. 65 dakika sonra: transformer'ın 'sıra problemi' ve 5 farklı çözüm yaklaşımının tarihsel evrimine hakim olacaksın.
Ders Haritası (10 Bölüm)#
- Permutation-invariance kanıtı — attention sıra bilmiyor (matematiksel)
- Bahdanau RNN attention — sıra niye eskiden sorun değildi
- Çözüm yaklaşımları — absolute vs relative, additive vs multiplicative
- Sinusoidal position (Vaswani 2017) — formül anatomi
- Niye sin + cos — geometric interpretation, frequency hierarchy
- Generalization argümanı — longer sequences extrapolation
- GPT-2 learned absolute — nn.Embedding(max_seq, d_model)
- max_position_embeddings sınırı — context window limit
- Sinusoidal vs Learned — empirical karşılaştırma
- Türkçe sözdizimi — SOV ile pratik etkileri
1. Permutation-Invariance — Matematiksel Kanıt#
1.1 Attention recap#
Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V
Q, K, V matris şeklinde — her token bir satır.
1.2 Permutation operation#
P = permutation matrix (row sıralarını değiştir). Örnek:
P = [[0, 1, 0], [1, 0, 0], [0, 0, 1]] # Bu P, ilk iki satırı yer değiştirir.
1.3 Permuted input attention#
Q' = PQ K' = PK V' = PV
Attention output:
Attention(Q', K', V') = softmax(PQ (PK)^T / sqrt(d_k)) PV = softmax(PQ K^T P^T / sqrt(d_k)) PV = P softmax(QK^T / sqrt(d_k)) P^T PV = P softmax(QK^T / sqrt(d_k)) V [P^T P = I] = P Attention(Q, K, V)
1.4 Yorum#
Output da permute edildi. Yani input'u permute edince output da aynı şekilde permute oluyor.
Bu equivariance demek (permutation-equivariant), tam invariance değil. Ama sıra bilgisi içkin DEĞİL — herhangi bir token'ın output'u sadece set of tokens'a bağlı, sıraya değil.
1.5 Pratik etkisi#
'Köpek kediyi ısırdı' (sequence A) ve 'Kediyi köpek ısırdı' (sequence B):
- Aynı tokens, farklı sıra
- Attention output (each token's representation) yer değiştirilmiş — ama hala same set
- Model özne-yüklem-nesne sıra ayrımı yapamaz
1.6 RNN niye sıra biliyordu#
h_t = f(h_{t-1}, x_t)
h_t önceki tüm input'lara sequential dependence. h_5 hesabı 5. token'da olur, h_3 hesabı 3. token'da. Sıra implicit.
Ama RNN'in dezavantajları (Modül 8.1): no parallelization, vanishing gradient.
1.7 Transformer'ın çözüm zorunluluğu#
Transformer parallel + attention-only. Permutation-equivariant. Sıra bilgisi explicitly injected edilmeli.
→ Position Encoding: her token'a 'ben i'inci pozisyondayım' bilgisi ekle.
4-5. Sinusoidal Position (Vaswani 2017)#
4.1 Formül#
PE(pos, 2i) = sin(pos / 10000^{2i/d_model}) PE(pos, 2i+1) = cos(pos / 10000^{2i/d_model})
pos = token position (0, 1, 2, ...)
i = dimension index (0, 1, 2, ..., d_model/2 - 1)
Her position için d_model-dimensional vector.
4.2 İlk birkaç değer#
d_model=4 örnek:
- pos=0: PE = [sin(0/1), cos(0/1), sin(0/100), cos(0/100)] = [0, 1, 0, 1]
- pos=1: PE = [sin(1/1), cos(1/1), sin(1/100), cos(1/100)] = [0.84, 0.54, 0.01, 0.9999]
- pos=2: PE = [sin(2/1), cos(2/1), sin(2/100), cos(2/100)] = [0.91, -0.42, 0.02, 0.9998]
Her dimension farklı frequency'de osilasyon yapıyor.
4.3 Frequency hierarchy#
Dimension i için:
frequency_i = 1 / 10000^{2i/d_model}
- i=0: freq 1 (en hızlı, her token'da değişir)
- i=d_model/2 - 1: freq 1/10000 (en yavaş, çok uzun period)
Bu, multi-scale temporal information. Aynı anda short-range (frequent) ve long-range (rare) pattern.
Fourier basis benzetmesi: her position d_model boyutlu Fourier representation'ı.
4.4 Sinusoidal + token embedding#
x = token_embedding(token_id) + sinusoidal_position(pos)
İki vector toplanır. Sonuç hem token kimliği hem pozisyon bilgisini içerir.
4.5 Niye sin + cos beraber#
Key property: relative position computability.
PE(pos + k) bir lineer fonksiyondur PE(pos)'tan k cinsinden: PE(pos+k) = R_k × PE(pos)
(R_k = rotation matrix depending on k.)
Yani modelin relative position'i çıkarması mümkün — sadece absolute değil.
4.6 Generalization argümanı#
Vaswani 2017 paper iddiası: sinusoidal extrapolation'a izin verir. Training'de 512 token görmüş model, inference'da 1024 token üzerinde çalışabilmeli (theoretically).
Gerçekte: zayıf extrapolation. Model training distribution dışında zorlanır. Daha sonra RoPE/ALiBi/YaRN daha iyi extrapolation sağladı.
4.7 Frequency choice (10000)#
Niye 10000 base? Empirical. Period spectrum 1 token ile 10000 × 2π token (≈63K) arası.
Daha sonra RoPE base = 10000 aynı, ama frequency adjust ile long context support.
python
import torchimport torch.nn as nnimport math def sinusoidal_position_encoding(max_seq_len, d_model): """Vaswani 2017 sinusoidal position encoding.""" pe = torch.zeros(max_seq_len, d_model) position = torch.arange(0, max_seq_len, dtype=torch.float).unsqueeze(1) div_term = torch.exp(torch.arange(0, d_model, 2).float() * -(math.log(10000.0) / d_model)) pe[:, 0::2] = torch.sin(position * div_term) pe[:, 1::2] = torch.cos(position * div_term) return pe # Testd_model = 512max_seq = 1024pe = sinusoidal_position_encoding(max_seq, d_model)print(f"Shape: {pe.shape}") # [1024, 512]print(f"PE[0]: {pe[0][:8]}")print(f"PE[1]: {pe[1][:8]}")print(f"PE[100]: {pe[100][:8]}") # Inner product (relative position decay)print(f"\nInner products with PE[10]:")for offset in [0, 1, 5, 50, 500]: sim = (pe[10] * pe[10 + offset]).sum() / 512 print(f" offset={offset}: {sim.item():.4f}") # Visualize: heatmap of position encodingimport matplotlib.pyplot as pltplt.figure(figsize=(15, 5))plt.imshow(pe.numpy(), cmap='RdBu_r', aspect='auto')plt.xlabel('Dimension')plt.ylabel('Position')plt.title('Sinusoidal Position Encoding')plt.colorbar()# plt.savefig('pe-heatmap.png')Sinusoidal position encoding — Vaswani 2017 formula
7-8. GPT-2 Learned Absolute Position#
7.1 GPT-2 yaklaşımı#
Vaswani'nin sinusoidal'ı yerine: learnable parameters.
class GPT2Position(nn.Module): def __init__(self, max_seq_len, d_model): super().__init__() self.pos_emb = nn.Embedding(max_seq_len, d_model) def forward(self, token_emb, position_ids): return token_emb + self.pos_emb(position_ids)
Her pozisyon için ayrı d_model-dim vector. Random init, training'de öğrenilir.
7.2 max_position_embeddings sınırı#
GPT-2: max_position_embeddings = 1024.
GPT-3: 2048.
GPT-4 (initial): 8192.
Llama-2: 4096.
Bu hard limit — model bu sayıdan fazla pozisyon görmedi, ekstrapolasyon güvenilmez.
7.3 Trade-offs#
Avantajlar (learned):
- Esnek — model 'optimal' position pattern öğrenir
- Specific corpus patterns yakalanabilir
Dezavantajlar (learned):
- Max sequence length sabit (extending = re-training)
- Extrapolation imkansız
- Extra parameters (max_seq × d_model = milyonlar)
Avantajlar (sinusoidal):
- No parameters
- Theoretically extrapolation
Dezavantajlar (sinusoidal):
- Less flexible
- Empirik extrapolation zayıf
7.4 Empirical karşılaştırma#
Vaswani 2017 paper: sinusoidal ve learned comparable quality. Sinusoidal slight edge — extrapolation potential.
Ama 2018-2020 GPT/BERT learned tercih etti — implementation simpler, empirical OK.
7.5 Modern era (2022+)#
İkisi de bırakıldı. Modern modeller (Llama-3, Mistral, GPT-4): RoPE (Rotary Position Embedding, Ders 9.2).
RoPE:
- Relative position info
- Better long-context extrapolation
- Attention'da inject (embedding'e eklenmez)
Klasik (sinusoidal + learned) tarihsel önem taşıyor. Modern modellerde nadir.
10. Türkçe Sözdizimi — SOV Pratik Etkileri#
10.1 Türkçe SOV#
Türkçe Subject-Object-Verb sözdizimi:
'Köpek kediyi ısırdı' = [Köpek (S)] [kediyi (O)] [ısırdı (V)]
İngilizce SVO:
'The dog bit the cat' = [The dog (S)] [bit (V)] [the cat (O)]
10.2 Position bilgisi Türkçe için kritik#
Türkçe'de yüklem cümlenin sonuna geliyor. Position encoding modelin 'yüklem geliyor' bilgisini taşıması için kritik.
Kötü position encoding:
- 'Köpek kediyi ısırdı' ve 'Köpeği kedi ısırdı' anlamca farklı
- Sıra olmadan model ikisini ayırt edemez
10.3 Türkçe'nin avantajı#
Türkçe morfolojik dil — durum ekleri (i-tamlama, e-yönelme, de-bulunma) sözdizimi'ne ek bilgi katar:
- 'Köpeki kediye ısırdı' — durum ekleri özne/nesne ayrımı korur
- Word order daha esnek (free word order'a yakın)
Ama model yine de pozisyon bilgisinden faydalanır — biased order tipik.
10.4 Llama-3 Türkçe ile position encoding#
Llama-3 RoPE kullanır (Ders 9.2). Türkçe için optimal — relative position bilgisi morfoloji ile uyumlu çalışır.
Production Türkçe LLM:
- Llama-3 base (RoPE) fine-tune Türkçe: pozisyon bilgisi korunur
- Custom Türkçe model: RoPE önerilir
10.5 Long Türkçe sentences#
Türkçe agglutinative — bir cümle 5-10 kelimeden çok daha uzun olabilir. Long context (8K+) support kritik. RoPE + YaRN-style scaling Türkçe için pratik.
✅ Ders 9.1 Özeti — Position Encoding Temelleri
Attention permutation-equivariant — sıra bilgisi içkin değil. Position encoding zorunlu. Sinusoidal (Vaswani 2017): sin/cos farklı frequency'lerde, no parameters, theoretical extrapolation. Learned absolute (GPT-2): nn.Embedding(max_seq, d_model), parameter cost, max_seq hard limit. İkisi de modern era'da bırakıldı — RoPE yerini aldı. Türkçe SOV sözdizimi için position bilgisi kritik, morfoloji avantaj sağlar. Ders 9.2'de RoPE'in matematik anatomisine geçeceğiz.
Sıradaki Ders: RoPE Derinlemesine#
Ders 9.2: Rotary Position Embedding (Su 2021) matematiksel anatomi, kompleks sayı rotation interpretation, Llama-3 implementation, niye 'rotary', relative position implicit how.
Sık Sorulan Sorular
Çalışır ama 'bag of words' modeli olur. Set-of-tokens semantic capture eder ama order ignore. Bazı tasks (basit classification) hâlâ acceptable. Sequence-sensitive tasks (translation, summarization, code) için critical.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
Modül 0: Kurs Çerçevesi ve Atölye Kurulumu
LLM Engineer Kimdir? Junior'dan Staff'a Yapay Zekâ Mühendisliği Kariyer Haritası
Öğrenmeye BaşlaModül 0: Kurs Çerçevesi ve Atölye Kurulumu
Kurs Felsefesi: Neden Bu Yol, Neden Bu Sıra — 8 Aylık Müfredatın İskeleti
Öğrenmeye BaşlaModül 0: Kurs Çerçevesi ve Atölye Kurulumu