Sliding Window Attention
Kayan pencere dikkati, her token'ı yakınındaki sabit sayıda önceki token'la sınırlar; böylece dikkat maliyeti ve KV önbelleği, dizi uzunluğuyla doğrusal olarak büyür.
Kayan pencere dikkati (SWA), her belirtecin dikkatini sabit sayıda komşu belirteçle sınırlar; nedensel bir dil modelinde bu komşular en son w belirteçtir; tam öz dikkat ise tüm diziyi kapsar. Dikkat hesaplamasının maliyeti dizi uzunluğuyla karesel değil, doğrusal olarak artar ve çıktı üreten bir modelin KV önbelleğinde yalnızca son w belirtecin anahtarlarını ve değerlerini tutması yeterlidir. Longformer, 2020'de kayan pencereyi dikkat mekanizmasının merkezine yerleştirdi ve Mistral AI'ın Mistral 7B modeli, 2023'te 4,096 belirteçlik pencereyle bu yaklaşımı yaygın olarak kullanılan açık bir büyük dil modeline (LLM) taşıdı.
Pencere Derinlikle Nasıl Genişler?#
SWA'nın bir katmanı yalnızca w belirteci görür, ancak Transformer katmanları üst üste dizilir. İkinci katmanda bir belirteç, her biri birinci katmandaki w belirteci zaten özetleyen gizli durumları okur; böylece bilgi, tıpkı üst üste dizilmiş evrişimlerin bir evrişimli nöral ağın (CNN) alıcı alanını genişletmesi gibi, her katmanda yaklaşık w − 1 konum daha ilerleyebilir. PyTorch içinde pencere, Boole türünde bir dikkat maskesidir ve bu maskeyi kendisiyle çarpmak bilginin ne kadar ilerlediğini gösterir:
import torch
seq_len, window = 16, 4
pos = torch.arange(seq_len)
offset = pos[:, None] - pos[None, :]
# Causal sliding window: each token attends to itself and the window - 1 tokens before it
mask = (offset >= 0) & (offset < window)
print(f"Scores per layer: {mask.sum().item()} with the window, {(offset >= 0).sum().item()} with full causal attention")
# Stacking layers widens the reach: each layer adds window - 1 more tokens of history
reach = mask
for layer in range(1, 5):
print(f"Layer {layer}: last token draws on {reach[-1].sum().item()} tokens")
reach = (mask.int() @ reach.int()) > 0Pencere, 16 belirteç için katman başına 136 yerine 58 puan hesaplar; son belirtecin erişim mesafesi katman başına 3 belirteç artarak 4'ten 7'ye, 10'a ve 13'e çıkar. Aynı maske, PyTorch'un scaled_dot_product_attention işlevine attn_mask olarak aktarılabilir. Mistral 7B için 4.096 belirteçlik pencereye sahip 32 katman, teorik olarak yaklaşık 131K belirteçlik bir dikkat aralığı sağlar; ancak çok gerideki bilginin ulaşması için birçok adımdan geçmesi gerekir.
Mistral 7B ayrıca anahtarlarını ve değerlerini w yuvalı döngüsel bir arabellekte saklar; i konumunu i mod w yuvasına yazar ve en eski girdinin üzerine yazar. 32K belirteçlik bir dizide bu yöntem, kaliteyi düşürmeden önbellek belleğini sekiz kat azalttı; sabit önbellek boyutu da üretim ne kadar uzun sürerse sürsün bellek kullanımının sabit kalmasını sağlar.
Yerel ve Küresel Katmanları Dönüşümlü Kullanma#
Yalnızca pencereler, çok gerideki bir olguyu tek adımda kopyalayamaz; bu yüzden yeni modeller, SWA katmanlarını tam küresel katmanlarla birlikte kullanır. Google'ın Gemma 2 modeli, 4.096 tokenlık pencereyle bunları bire bir dönüşümlü kullanırken Gemma 3, bağlam penceresi boyunca KV önbelleğini küçük tutmak için 128K tokene kadar uzanan bir pencerede her küresel katmana karşılık beş yerel katman kullanır. Yalnızca küresel katmanlar tüm bağlamın anahtar ve değerlerini saklar; dolayısıyla altı katmandan beşi yalnızca 1.024 token tutar.
Görsel Transformer'lar, her parçanın bir token olduğu yüksek çözünürlüklü görüntüler için de aynı karışımı kullanır. Ultralytics paketinde görüntü segmentasyonu için çalışan Meta'nın SAM 3 modeli, görüntü kodlayıcısının 32 bloğunun 28'inde örtüşmeyen 24 × 24 parçalık pencereler içinde dikkat uygular; 7, 15, 23 ve 31. bloklarda ise 1.008 piksel çözünürlüklü görüntünün 72 × 72 parçalık tüm ızgarası boyunca küresel dikkat uygular.
SWA ve İlgili Terimler#
- Swin Transformer: Görüntüyü, penceredeki her tokenın paylaştığı sabit ve örtüşmeyen pencerelere böler; komşu pencerelerin bilgi alışverişi yapması için katmanlar arasında ızgarayı kaydırır.
- Seyrek dikkat: Sabit örüntülerden oluşan daha geniş aile. SWA bu ailenin en basit üyesidir; diğer yöntemler genişletilmiş pencereler, küresel tokenlar veya rastgele bağlantılar ekler.
- Dikkat havuzları: Bir dizinin fazla dikkat ağırlığını soğuran ilk tokenları. Tam dikkatle eğitilmiş bir modele çıkarım sırasında pencere uygulandığında bunları bellekten çıkarmak üretimi bozar; StreamingLLM ise bunları pencerenin yanındaki önbellekte tutar.
- Deforme edilebilir dikkat: Her sorgu, ofsetlerini öğrendiği birkaç örnekleme noktasına dikkat verir; böylece komşuluk içeriğe bağlı olur.
- Flash attention: Tam dikkat için bir GPU çekirdeği. Uygulamaları pencere boyutunu kabul ettiğinden, SWA modelleri pencerenin dışındaki blokları tamamen atlar.










