Self-Attention
Öz dikkat, bir dizideki her belirtecin aynı girdiden elde edilen sorguları, anahtarları ve değerleri kullanarak diğer tüm belirteçleri ağırlıklandırmasını sağlar. Transformer'ların temelidir.
Öz-dikkat, sorguların, anahtarların ve değerlerin tümünün aynı diziden geldiği dikkat biçimidir; bu nedenle her token, yeni temsilini o dizideki diğer tüm tokenlardan oluşturur. Tek bir öz-dikkat katmanı, bir paragrafın ilk ve son sözcüklerini ya da bir görüntünün karşıt köşelerini tek adımda ilişkilendirebilir; oysa bir yinelemeli sinir ağı (RNN) her konum için bir adım, bir evrişimli sinir ağı (CNN) ise görüş alanını genişletmek için üst üste birçok katman gerektirir. İleri beslemeli katmanlarla üst üste dizildiğinde, 2017 tarihli Attention Is All You Need makalesinde tanıtılan Transformer'ı oluşturur; bu mimari büyük dil modellerinin (LLM), Görüntü Transformer'larının (ViT) ve Transformer tabanlı dedektörlerin temelini oluşturur.
Öz Dikkat Nasıl Çalışır#
Gömme olarak temsil edilen her giriş tokenı, bir sorgu, bir anahtar ve bir değer elde etmek için öğrenilen üç matrisle çarpılır. i tokenının çıktısı, her tokenın değer vektörünün ağırlıklı ortalamasıdır; ağırlıklar, dikkat mekanizması sayfasında açıklanan ölçeklenmiş noktasal çarpım dikkatinde, i tokenının sorgusunun tüm anahtarlarla yaptığı ölçeklenmiş noktasal çarpımların softmax işlemiyle elde edilir. Sorgular, anahtarlar ve değerler aynı tokenların izdüşümleri olduğundan, n tokenlık bir dizi n × n ağırlık matrisi üretir. “Hayvan, çok yorgun olduğu için sokağı geçmedi.” cümlesinde “o” için olan satır, ağırlığının çoğunu “hayvan”a verebilir ve bu sözcüğün anlamını kendi temsiline aktarabilir.
Çok başlıklı öz-dikkat, bu hesaplamalardan birkaçını daha küçük izdüşümler üzerinde paralel olarak yürütür ve sonuçları birleştirir; böylece farklı başlıklar, bir başlıkta sözdizimi ve diğerinde gönderimsel bağ gibi farklı ilişkileri izleyebilir. İlk Transformer, 512 boyutlu bir modelde 64 boyutlu 8 başlık kullanıyordu.
Sıra Körlüğü ve Nedensel Maskeleme#
Öz-dikkat, girdisini bir küme olarak ele alır. Tokenları karıştırmak, çıktıları da aynı şekilde karıştırır ve başka hiçbir şeyi değiştirmez; bu nedenle modeller, ilk Transformer'daki sinüzoidal gömmeler veya günümüzdeki çoğu LLM'de kullanılan döner konum gömmesi (RoPE) gibi konum bilgileri ekler. BERT gibi kodlayıcılar, her tokenın her iki yönde de dikkat uygulamasına izin verir. Yalnızca kod çözücü kullanan LLM'ler, her tokenın yalnızca kendisine ve önceki tokenlara dikkat etmesi için nedensel bir maske uygular; bu sayede model soldan sağa metin üretebilir ve önceki tokenların anahtarlarıyla değerlerini bir KV önbelleğinden yeniden kullanabilir. Aynı tensör sorgu, anahtar ve değer olarak verildiğinde PyTorch'un MultiheadAttention modülü bu iki özelliği gösterir:
import torch
torch.manual_seed(0)
tokens = torch.randn(1, 5, 16) # Her biri 16 özellik içeren 5 tokenlık tek bir dizi
attn = torch.nn.MultiheadAttention(embed_dim=16, num_heads=2, batch_first=True)
# Öz-dikkat: sorgular, anahtarlar ve değerler aynı tokenların izdüşümleridir
out, weights = attn(tokens, tokens, tokens)
print("Attention weights shape:", tuple(weights.shape))
# Tokenları karıştırmak yalnızca çıktıları karıştırır; bu nedenle konum bilgisi olmadan sözcük sırası görünmezdir
perm = torch.tensor([3, 0, 4, 1, 2])
out_shuffled, _ = attn(tokens[:, perm], tokens[:, perm], tokens[:, perm])
print("Same outputs after shuffling:", torch.allclose(out_shuffled, out[:, perm], atol=1e-6))
# Nedensel maske, yalnızca kod çözücü kullanan bir LLM'de olduğu gibi sonraki tokenlara dikkati engeller
mask = torch.triu(torch.ones(5, 5, dtype=torch.bool), diagonal=1)
_, causal_weights = attn(tokens, tokens, tokens, attn_mask=mask)
print(causal_weights[0].detach().round(decimals=2))(1, 5, 5) ağırlık şekli, karıştırma testi için True ve alt üçgensel bir matris yazdırır: ilk token kendisine 1.00 ağırlık verir, ikinci token ilk iki token arasında 0.31 ve 0.69 ağırlık dağıtır ve köşegenin üstündeki her giriş 0.00'dır.
Öz-Dikkat ve İlgili Terimler#
- Dikkat mekanizması: Değerleri, sorgu-anahtar benzerliğine göre ağırlıklandıran genel işlem. Öz-dikkat, üçünün de tek bir diziden geldiği durumdur.
- Çapraz dikkat: Sorgular bir diziden, anahtarlar ve değerler başka bir diziden gelir. Bir çeviri kod çözücüsü kodlanmış kaynak cümleye, bir DETR kod çözücüsünün nesne sorguları görüntü özelliklerine, metinden görüntüye bir difüzyon modeli ise isteme dikkat eder.
- Evrişim: Her konumda aynı küçük filtreyi uygular; böylece her çıktı, ağırlıkları içeriğe bağlı olmayan sabit bir yerel pencereyi görür. Öz-dikkat, ağırlıklarını içerikten hesaplar ve tüm girdiyi kapsar.
Özgün kodlayıcı-kod çözücü Transformer; çift yönlü öz-dikkati, nedensel öz-dikkati ve çapraz dikkati bir araya getirir:
Maliyet ve Verimli Varyantlar#
Her token çiftini puanlamak, zaman ve bellek gereksinimini dizi uzunluğunun karesiyle artırır: 1.000 token, her başlık için bir milyon puan; 100.000 token ise on milyar puan üretir. FlashAttention, tüm matrisi bellekte tutmadan döşemeler üzerinde tam öz-dikkat hesaplar; gruplu sorgu dikkati (GQA), KV önbelleğini küçültmek için anahtarları ve değerleri başlıklar arasında paylaşır; kayan pencere, seyrek ve doğrusal dikkat ise çift sayısını azaltır. Bilgisayarlı görüde token sayısı görüntü çözünürlüğüne bağlıdır; bu nedenle birçok dedektör öz-dikkati yalnızca özellik haritalarının en küçük olduğu yerlerde uygular. YOLO26, çok başlıklı öz-dikkati yalnızca omurgasının sonundaki C2PSA bloğunda ve boyun kısmındaki dikkat etkin bir C3k2 bloğunda çalıştırır; her ikisi de 640 piksel boyutlu bir görüntünün 20×20 stride-32 özellik haritasında, yani 400 token üzerinde çalışır. Dikkat modülü, bu harita üzerinde tek bir 1×1 evrişimle sorguları, anahtarları ve değerleri hesaplar; değerlere uygulanan 3×3 derinlik ayrılabilir evrişimle de konum bilgisi ekler.










