Attention'ı Sıfırdan Anlamak
23 Haz 2026 · 3 dk okuma
Attention, bugün konuştuğumuz neredeyse tüm büyük dil modellerinin içindeki motordur. Transformer mimarisini transformer yapan da bu mekanizmadır. İlk bakışta matematiği gözünüzü korkutabilir; ama altındaki fikir tek bir sezgisel soruya dayanır: bir cümledeki kelimeyi işlerken, onun anlamını doğru kurmak için diğer kelimelerin hangilerine dikkat etmeliyim? Önce bu soruyu netleştirelim, sonra query–key–value üçlüsünü kuralım; attention'ın neden bütün bir mimariyi değiştirdiğini de yol boyunca göreceğiz.
Problemi doğru koymak
"Banka kenarında oturdu" cümlesindeki "banka" ile "Bankadan para çekti" cümlesindeki "banka" aynı kelime olsa da bambaşka şeyler kasteder. Modelin bu farkı yakalayabilmesi için her kelimeyi tek başına değil, bağlamındaki öbür kelimelerle ilişkisi içinde temsil etmesi gerekir. Attention tam da bu ilişkiyi kurar: her kelimenin temsiline, cümledeki ilgili kelimelerden "toplanan" bilgiyi ekler.
Query, key ve value
Bu toplama işlemini düzenli hâle getirmek için model, her token (kelime parçası) için üç ayrı vektör üretir. Bunu kafanızda canlandırmak için bir kütüphanede kitap aramayı düşünün. Query (), o token'ın "ne arıyorum?" sorusudur. Key (), her token'ın "bende şu var" diyen etiketi. Value () ise o token'ın asıl taşıdığı içerik. Bir token'ın query'sini bütün token'ların key'leriyle karşılaştırıp her birinin ne kadar alakalı olduğunu ölçersiniz; sonra bu skorları ağırlığa çevirip value'ları bu ağırlıklarla harmanlayarak ortalamasını alırsınız. Çıkan sonuç, o token'ın bağlamla zenginleşmiş yeni temsilidir.
Bütün bu süreç tek bir denkleme sığar:
Gelin denklemi parça parça okuyalım. çarpımı, her query ile her key arasındaki benzerliği bir iç çarpımla, yani yine lineer cebirle hesaplar; böylece her token çiftine bir skor düşer. Paydadaki terimi, vektör boyutu büyüdükçe şişen bu skorları ölçekleyip sayısal kararlılığı korur. Softmax ham skorları, toplamı bire eşit ağırlıklara çevirir; böylece "şu kelimeye yüzde altmış, buna yüzde kırk dikkat et" diyen bir dağılım elde ederiz. Son adımda bu ağırlıklarla value'ları çarpıp toplarız.
Birkaç satır kodla
Denklem biraz soyut geldiyse, birkaç satır kod onu hemen yere indirir:
import torch
import torch.nn.functional as F
def attention(Q, K, V):
d_k = Q.size(-1)
scores = Q @ K.transpose(-2, -1) / d_k**0.5 # her token çifti için benzerlik
weights = F.softmax(scores, dim=-1) # kim kime ne kadar dikkat ediyor
return weights @ V # value'ların ağırlıklı toplamı
# oyuncak örnek: 5 token, her biri 16 boyutlu
Q = K = V = torch.randn(5, 16)
print(attention(Q, K, V).shape) # torch.Size([5, 16])Buradaki scores matrisinin her satırı, bir token'ın öbür token'lara verdiği
dikkati tutar; softmax'tan sonra weights ise bunun olasılık dağılımına dönmüş
hâlidir. weights @ V çarpımıyla her token, kendisi için en alakalı token'ların
içeriğini ağırlıklı biçimde devralır.
Neden bir devrim
Attention'dan önceki nesil modeller metni katı bir biçimde, soldan sağa, kelime kelime işliyordu. Böyle bir modelde cümlenin başındaki özneyle sonundaki zamiri bağlamak için bilgi uzun bir zincir boyunca elden ele taşınmak zorundaydı; zincir uzadıkça da o bilgi sönükleşiyordu. Attention bu kısıtı baştan kaldırır: her token, tek adımda diğer bütün token'lara doğrudan bakabilir. "O" zamiri, on kelime önce geçen ismine zincire takılmadan anında bağlanır. Üstelik bu işlemler birbirinden bağımsız olduğu için modern donanımda paralel çalıştırılabilir; transformer'ların hem daha isabetli hem de devasa ölçeklerde eğitilebilir olmasının asıl sebebi de budur.
Buradan sonrası
Burada attention'ı tek başlı (single-head) ve en sade hâliyle gördük. Gerçek transformer'lar, modelin farklı türden ilişkileri aynı anda yakalayabilmesi için bu mekanizmayı paralel "kafalar" hâlinde çalıştırır (multi-head attention) ve kelime sırasını modele bildirmek için ayrıca positional encoding ekler. İlerideki yazılarda bu iki parçayı da aynı titizlikle açacağız.
Yeni makale yayınlandığında haberiniz olsun ister misiniz?
Yeni bir yazı yayınlandığında size e-posta gelsin. Dilediğiniz an iptal edebilirsiniz.
Yorumlar
Benzer makaleler
GPT'yi Sıfırdan Yazalım: nano-gpt
27 Haz 2026 · 13 dk okuma
BPE(Byte Pair Encoding) nedir ve LLM'ler için neden önemli
1 Tem 2026 · 8 dk okuma
Gradient Descent Gerçekte Nasıl Çalışır
22 Haz 2026 · 4 dk okuma
Kimlik-Farkında Negatif Örnekleme Neden Önemli
20 Haz 2026 · 3 dk okuma
Claude Code ile Verimli Çalışmak — Bölüm 2: Ajanlar, Alt Ajanlar ve Çoklu Ajan Kurulumları
15 Tem 2026 · 10 dk okuma
Claude Code ile Verimli Çalışmak — Bölüm 1: Bağlam (Context), Beceriler ve Prompt Yazımı
1 Tem 2026 · 6 dk okuma
Bu Blog Ne Hakkında?
26 Haz 2026 · 2 dk okuma
Tensor Nedir? Derin Öğrenme için Lineer Cebir
24 Haz 2026 · 4 dk okuma