İçeriğe geç

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
İleri

Attention 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."
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
<bos>
(beginning of sentence) veya space — semantik olarak boş. Model boşa giden attention'ı buraya yönlendiriyor.

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#

Provider'ların hepsi
<bos>
tokeni otomatik ekler. Sen system prompt'un başına manuel "" yazma — çift eklenir, garip davranışlara yol açar.

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

Attention Sinks: StreamingLLM Bulgusu — Şükrü Yusuf KAYA | Prompt Caching & Context Engineering