Bahdanau'dan Flash Attention'a, modern LLM'lerin kalbi
Attention mekanizması, bir orkestra şefinin her enstrümana ne zaman dikkat edeceğini bilmesi gibidir. 2015'teki ilk adımlarından bugünkü Flash Attention'a kadar, bu mekanizma modern yapay zekanın kalbi haline geldi. Şimdi bu kalbin anatomisini katman katman keşfedeceğiz.
2015'te Bahdanau ve ekibi, RNN encoder-decoder modellerinde **ilk attention mekanizmasını*…
📚Kitap Okurken Not Alma
Bahdanau attention, bir kitabı okurken önemli yerlerin altını çizmek gibidir. Özet yazarken (decoder), kitabın tamamına bakmak yerine çizdiğiniz yerlere (yüksek ağırlıklı encoder durumları) odaklanırsınız. Alignment model ise hangi satırların altını çizeceğinize karar veren içgüdünüzdür.
Transformer'ın temel taşı: **QKᵀ/√dₖ → softmax → V**…
Attention(Q,K,V) = softmax(QKᵀ / √dₖ) · Vdₖ = key vektör boyutu. √dₖ ile bölme, skorları varyansı 1 olacak şekilde normalize eder. dₖ=64 için √64=8 ile böleriz.
Scaled Dot-Product Attention — boyut akışını takip edin
| 1 | import torch |
| 2 | import torch.nn.functional as F |
| 3 | |
| 4 | def scaled_dot_product_attention(Q, K, V): |
| 5 | # Q, K, V: (batch, seq_len, d_k) |
| 6 | d_k = K.size(-1) |
| 7 | |
| 8 | # Skorlar: (batch, seq_len, seq_len) |
| 9 | scores = Q @ K.transpose(-2, -1) / (d_k ** 0.5) |
| 10 | |
| 11 | # Dikkat ağırlıkları: satır toplamı 1 |
| 12 | attn_weights = F.softmax(scores, dim=-1) |
| 13 | |
| 14 | # Çıktı: (batch, seq_len, d_k) |
| 15 | return attn_weights @ V |
| 16 | |
| 17 | # Örnek: batch=2, seq=4, d_k=8 |
| 18 | Q = torch.randn(2, 4, 8) |
| 19 | K = torch.randn(2, 4, 8) |
| 20 | V = torch.randn(2, 4, 8) |
| 21 | out = scaled_dot_product_attention(Q, K, V) |
| 22 | print(out.shape) # torch.Size([2, 4, 8]) |
⚠️√dₖ olmadan ne olur? dₖ=512 için nokta çarpımları ~22 mertebesine çıkabilir. softmax(22) ≈ 1.0 — gradyan sıfırlanır, model öğrenemez!
Tek bir attention, tek bir ilişki tipini yakalar. **Multi-head** ile h farklı bakış açısı …
MultiHead(Q,K,V) = Concat(head₁,...,headₕ) · Wᴼheadᵢ = Attention(QWᵢᵠ, KWᵢᴷ, VWᵢⱽ). Her kafanın boyutu d_model/h olur. 768 boyut, 12 kafa → her kafa 64 boyut.
Self-attention'da Q, K, V aynı kaynaktan gelir. **Cross-attention**'da decoder Q üretir, e…
Self-Attention
Cross-Attention
Standart multi-head'de her kafa kendi K-V çiftine sahip — **inference'ta KV-cache bellek p…
💡GQA, MHA (Multi-Head) ve MQA (Multi-Query, tek K-V) arasında bir denge noktasıdır. MQA çok agresif, MHA çok pahalı — GQA tatlı nokta.
Klasik attention O(n²) bellek kullanır — 100K token için terabaytlar gerekir. **Flash Atte…
🍳Mutfak Tezgahı Metaforu
Klasik attention: Tüm malzemeleri (QKᵀ matrisi) dev bir masaya yayıp işlem yapmak — masa (HBM) büyük ama uzak. Flash Attention: Küçük tezgahta (SRAM) porsiyon porsiyon pişirip tabağa koymak. Toplam yemek aynı, ama mutfakta koşturma (bellek trafiği) 20x azalır.
✦ Quiz
Scaled dot-product attention'da √dₖ ile bölme neden yapılır?
✦ Quiz
Grouped Query Attention (GQA) hangi sorunu çözmek için tasarlanmıştır?
✦ Quiz
Flash Attention'ın temel optimizasyon stratejisi nedir?
ℹ️ViT (Vision Transformer) da aynı multi-head self-attention kullanır. Görüntü 16×16 patch'lere bölünür, her patch bir 'token' olur. Bu konu 'transformer' ve 'attention-2017' konularının doğal devamıdır.
Bağlantılı Konular