Sparse Attention Nedir?
Seyrek dikkat (Sparse Attention), Transformer mimarisindeki standart çoklu kafa dikkat (Multi-Head Attention) mekanizmasının hesaplama ve bellek maliyetini azaltmak için geliştirilen bir optimizasyon tekniğidir. Standart dikkatte her token, dizideki diğer tüm tokenlerle ilişki hesaplar; bu durum O(n²) karmaşıklığına yol açar. 10.000 tokenlik bir dizi için bu yaklaşık 100 milyon dikkat skoru hesabı anlamına gelir. Seyrek dikkat bu karmaşıklığı, her tokenin yalnızca belirli kurallara göre seçilmiş bir komşuluk kümesiyle iletişim kurmasına izin vererek O(n√n) veya O(n log n)'a düşürür.
Temel Seyrek Dikkat Örüntüleri
- check_circle Yerel pencere dikkati: Her token yalnızca kendi etrafındaki sabit boyutlu bir penceredeki tokenlerle etkileşir. Komşuluk bilgisi güçlüdür ancak çok uzak bağımlılıklar yakalanmaz.
- check_circle Uzun adımlı dikkat (Strided): Her token, yakın pencereye ek olarak belirli adım aralıklarıyla uzak tokenlere de bakar. Yerel ve küresel bağlamı dengeler.
- check_circle Küresel token dikkati: Ayrıcalıklı tokenler (ör. [CLS] veya görev tokeni) tüm diğer tokenlerle iletişim kurar; diğerleri yalnızca yerel/strided örüntü uygular. Longformer ve BigBird bu yaklaşımı kullanır.
- check_circle Rastgele seyrek dikkat: Her token, örüntü dışında rastgele seçilmiş birkaç global token ek alır. BigBird'ün üçlü kombinasyonunun parçasıdır.
- check_circle FlashAttention (IO-aware): Seyrek değil, yoğun dikkatin kernel düzeyinde GPU bellek hiyerarşisine göre optimize edilmiş versiyonudur. Daha az HBM (yüksek bant genişlikli bellek) erişimi ile standart dikkatin aynı sonucunu çok daha hızlı üretir.
Neden Uzun Bağlam İçin Kritiktir?
Standart dikkat mekanizması 4.096 token için ~134 MB, 32.768 token için ~8.6 GB dikkat matrisi (float16) gerektirir; bu sayı 1M tokende terabayt boyutlarına ulaşır. Seyrek dikkat bu bariyeri kaldırarak, özellikle hukuki belgeler, akademik makaleler, uzun kod tabanları ve çok oturumlu konuşmalar gibi uzun giriş gerektiren görevleri mümkün kılar. 2024-2025 döneminde Claude 3.5 (200K), Gemini 1.5 Pro (1M) ve GPT-4o (128K) gibi modellerin geniş bağlam pencerelerini desteklemesi, büyük ölçüde FlashAttention ve benzer optimizasyonlara dayanmaktadır.
Öne Çıkan Modeller ve Kütüphaneler
- check_circle Sparse Transformer (OpenAI, 2019): Seyrek dikkat konseptini geniş ölçekte ilk kullanan araştırma modellerinden biri. Faktörize dikkat örüntülerini tanıttı.
- check_circle Longformer (Allen AI, 2020): Yerel pencere + küresel token kombinasyonu. Uzun belge NLP görevlerinde benchmark skorları kırdı.
- check_circle BigBird (Google, 2020): Yerel + strided + rastgele seyrek dikkat üçlüsü. Teorik olarak seyrek dikkatin yoğun dikkate eşdeğer olabileceğini kanıtladı.
- check_circle FlashAttention (2022-2024): IO-aware çekirdek; yoğun dikkati GPU SRAM'inde tutan, çok daha az HBM erişimi gerektiren yaklaşım. v1, v2 ve v3 sürümleri giderek artan verimlilik sunar.
- check_circle Ring Attention (2023): Dikkat hesaplamasını birden fazla GPU'ya yayan dağıtık yaklaşım; milyonlarca token bağlam için tasarlandı.
Trade-off'lar ve Sınırlamalar
Seyrek dikkat bazı uzak bağımlılıkları kaçırabilir; bu durum, özellikle dizinin başındaki kritik bilgilerin sonunda referans alındığı görevlerde 'kayıp ortadaki iğne' (lost-in-the-middle) sorununu şiddetlendirebilir. Örüntü seçimi görev özeldir ve evrensel bir optimal örüntü yoktur. Implementasyon karmaşıklığı da önemli bir etkendir: standart PyTorch/JAX kodundan farklı, optimize edilmiş CUDA çekirdekleri gerektirir. FlashAttention doğruluk kaybı olmaksızın hız kazanırken, gerçek seyrek örüntüler teorik doğruluk kaybı riski taşıyabilir.
Sık Sorulan Sorular
- check_circle Sparse Attention ile FlashAttention aynı şey midir? Hayır. Sparse Attention, hangi token çiftlerinin dikkat hesabı yapacağını kısıtlayan bir paradigmadır. FlashAttention ise tüm token çiftlerini hesaplayan (tam dikkat) ancak bunu GPU belleğini verimli kullanarak çok daha hızlı yapan bir kernel optimizasyonudur. FlashAttention, teorik karmaşıklığı değiştirmez; pratikte büyük bellek avantajı ve hız sağlar.
- check_circle Claude veya GPT-4 seyrek dikkat kullanıyor mu? Bu modellerin iç mimarisi tam olarak kamuya açıklanmamıştır. Ancak uzun bağlam desteği (128K-1M token) büyük olasılıkla FlashAttention veya benzer IO-aware optimizasyonları, muhtemelen katman bazında hibrit yaklaşımlarla mümkün kılınmaktadır.
- check_circle Seyrek dikkat kaç parametresi etkiler? Seyrek dikkat, model parametrelerini değiştirmez; yalnızca çıkarım ve eğitim sırasındaki hesaplama grafiğini etkiler. Ağırlıklar standart dikkatle aynıdır; dikkat maskesi örüntüsü belirlenir.
- check_circle Kendi modelimde seyrek dikkat nasıl uygularım? PyTorch için xFormers kütüphanesi seyrek dikkat bloklarını hazır sunar. FlashAttention için flash-attn paketi resmi implementasyonu içerir. Hugging Face Transformers çoğu modern modelde FlashAttention'ı attention_implementation='flash_attention_2' parametresiyle etkinleştirmeyi destekler.
- check_circle Seyrek dikkat her zaman yoğun dikketten hızlı mıdır? Kısa dizilerde (ör. <1K token) overhead nedeniyle yavaş olabilir; asıl avantaj uzun dizilerde ortaya çıkar. Genel kural: n > 2048-4096 token seviyesinden itibaren seyrek/IO-aware dikkat belirgin kazanım sağlar.