Attention Sinks: İlk Token'ların Gizli Rolü
MIT'nin 2023'te yayınladığı StreamingLLM araştırması: ilk birkaç tokeni atarsan model çöker. Neden? 'Attention sinks' — modelin attention'ını boşaltacak yer. Bu, context engineering'de unutulmaması gereken bir kural.
Şükrü Yusuf KAYA
12 dakikalık okuma
İleriAttention Sinks: İlk Token'ların Gizli Rolü
2023'te MIT'den Xiao et al. şaşırtıcı bir bulgu yayınladı:
"LLM'lerin ilk 1-4 tokeni 'attention sinks' olarak çalışır. Bu tokenları silersen model perplexity'si patlar — context'in başını koruman zorunlu."
Yayın: arXiv:2309.17453, StreamingLLM.
Bu bulgunun context engineering'de pratik anlamı var.
Problem: Sliding Window Attention'ın Tuhaf Davranışı#
Modelin context window'u dolduğunda eski tokenları atmak istersin (sliding window). Naif yaklaşım:
Token 1, 2, 3, ..., N ← context dolu Token N+1 geldi → Token 1 sil, gerisini kaydır Yeni: Token 2, 3, ..., N+1
Sonuç: Model çöker. Perplexity %10'dan %1000'e fırlar.
Neden? Cevap softmax.
Matematiksel Sebep: Softmax Garantisi#
Hatırla: attention'da skorlar softmax'tan geçer:
Yani attention weights her zaman 1'e toplanır. Bu bir matematiksel garanti.
Model bazen şu durumda kalır: "şu anki tokeni etkili kullanmak için hiçbir geçmiş tokena dikkat etmem gerekmiyor." Ama softmax 1'e toplayacak — bir yere "boşaltması" lazım.
Çözüm: ilk tokenları "sink" olarak kullan. Modeller bunu eğitim sırasında öğreniyor. İlk token genelde (beginning of sentence) veya space — semantik olarak boş. Model boşa giden attention'ı buraya yönlendiriyor.
<bos>Pratik Etki#
Eğer cache'de eski tokenları silersen ama ilk birkaç token'ı korursan model normal çalışmaya devam ediyor. Bu bilgi vLLM ve SGLang'da kullanılıyor:
# vLLM/SGLang sliding window def evict_old_tokens(context, keep_initial=4): # İlk 4 tokeni KORU (attention sinks) # Ortadaki eski tokenları sil keep = context[:keep_initial] + context[-MAX-keep_initial:] return keep
Bu sayede uzun konuşmalarda context'i temizleyebilirsin ama model kalitesini korursun.
Context Engineering İçin Pratik Anlamlar#
1. System Prompt'un İlk Karakterleri Önemli#
# ❌ Önemli bilgi 1000. tokende system = " " * 1000 + "Sen bir asistansın..." # ← 1000 token padding! # ✅ İlk tokenden anlamlı system = "Sen bir asistansın. ..."
İlk karakterleri "boşa harcamak" model performansını düşürür çünkü model orayı sink olarak kullanmaya alışkın.
2. <bos> Token Otomatik Eklenir#
<bos>Provider'ların hepsi tokeni otomatik ekler. Sen system prompt'un başına manuel "" yazma — çift eklenir, garip davranışlara yol açar.
<bos>3. Long Context'te Sliding Window Yaparken Dikkat#
Eğer kendi inference engine'in varsa (vLLM, SGLang, custom), sliding window'da ilk 4-8 token'ı her zaman koru. Yoksa quality kaybedersin.
4. Streaming'de Önemli#
Sürekli yeni text üreten uygulamalarda (live transcript, streaming chat) context her zaman büyüyor → eventually overflow. Doğru tasarım:
- İlk N tokeni (sink) sabit tut
- En son M tokeni tut (recency)
- Ortadakileri at veya summarize
✓ Pekiştir#
Bir Sonraki Derste#
Hands-on lab: kendi 100K tokenlı context'inde "needle-in-haystack" testi yap, pozisyonun accuracy'yi nasıl etkilediğini gör.
Sık Sorulan Sorular
Hayır, tam tersi: ilk tokenlar (sinks) cache'lenmesi ZORUNLU. Onları silmek kalite öldürür. Caching pattern'in zaten 'statik üstte' diyor — bu bilgi onun matematiksel temelini güçlendirir.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
1. Temeller — Context Penceresi Ekonomisi
Bu Eğitim Hakkında ve Prompt Caching Neden Önemli?
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi
Token Ekonomisi 101: Input vs Output Cost Asimetrisi
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi