Bölüm 8 · Büyük dil modellerinin parçaları · Ders 34
Dikkat mekanizması
"o" kimi kastediyor? Sorgu, anahtar, değer ve softmax
Veri. Robota sesli bir rapor geliyor: "robot kutuyu aldı çünkü o hafifti". Burada "o" kutu; "o güçlüydü" deseydik robot olurdu. Dil modeli bunu dikkat ile çözer. Altı kelimenin her birine 5 sayılık elle kurulmuş bir vektör verdik (ajan, nesne, eylem, hafif, güçlü) ve dil modellerindeki hesabı birebir yapıyoruz; yalnız boyutlar küçük.
import numpy as npwords = ["robot", "box", "picked", "because", "it", "light"]X = np.array([[1, 0, 0, 0, 0], # robot: ajan[0, 1, 0, 0, 0], # kutu: nesne[0, 0, 1, 0, 0], # aldı: eylem[0, 0, .5, 0, 0], # çünkü[.5, .5, 0, 0, 0], # o: ajan mı nesne mi?[0, 0, 0, 1, 0]], float) # hafifti (güçlüydü: 0,0,0,0,1)X[4] += X[5] # önceki katman: "o" cümle sonunu görmüşWQ = 2.5 * np.array([[0, 0, 1], [0, 0, 1], [1, 1, 0], # sütunlar: ajan, nesne, eylem arar[0, 2, 0], [2, 0, 0]]) # hafif → nesne, güçlü → ajanWK = WV = np.eye(5, 3) # anahtar = değer = ilk 3 özellikQ, K, V = X @ WQ, X @ WK, X @ WVd, tau = K.shape[1], 1.0 # d = 3, sıcaklıkS = Q @ K.T # benzerlik: her sorgu · her anahtarS = S / (np.sqrt(d) * tau) # ölçekleA = np.exp(S - S.max(1, keepdims=True)) # softmax: üs alA = A / A.sum(1, keepdims=True) # satır toplamı 1out = A @ V # değerlerin ağırlıklı karışımıprint(A[4].round(2), words[A[4].argmax()]) # "o" kime bakıyor?print(out[4].round(2)) # "o"nun yeni vektörü
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Veri seti
Tüm veri setleri →Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- Her kelime üç vektör üretir: sorgu (Q, "ne arıyorum"), anahtar (K, "ben neyim"), değer (V, "ne taşıyorum"). Bunlar kelime vektörünün üç ayrı matrisle çarpımıdır.
- Benzerlik: sorgunun her anahtarla nokta çarpımı. Ölçekleme: √d’ye (burada √3) bölünür ki boyut büyüdükçe sayılar patlamasın; τ sıcaklığıyla da bölüyoruz.
- Softmax: her sayının üssü alınır ve toplama bölünür; satırın toplamı 1 olur, yani ağırlıklar bir olasılık dağılımıdır.
- Karışım: kelimenin yeni vektörü, değerlerin bu ağırlıklarla ortalamasıdır. "o"nun yeni vektörü çoğunlukla "kutu"nun değerini taşır.
- Şunu dene: son kelimeyi "güçlüydü" yap; dikkat robota kayar. τ’yu 3 yap; dağılım düzleşir ve karar bulanıklaşır.
Neden önemli
Dikkat, transformer’ın kalbidir: ChatGPT gibi modeller her katmanda, her kelime için bu hesabı binlerce boyutta ve onlarca "kafa" ile yapar; sunuculardaki GPU’ların işinin büyük kısmı bu matris çarpımlarıdır. Robotikte aynı mekanizma sesli komutları anlamada, kamera görüntüsünün parçaları arasında ilişki kurmada ve görme-dil-eylem modellerinde kullanılır.
ESOF 323, 11. hafta: robotlarda derin öğrenme →