Genişlik Başlıklar Arasında Bölünür
Tek Bir Başlık Bir Deseni Görür
Etkinlik 67 ölçekli nokta-çarpım dikkatini kapsadı: bir sorgu vektörü Q, bir anahtar vektörü K, bir değer vektörü V; Q·Kᵀ/√d_k hesapla, maskele, softmax uygula, V'yi ağırlıkla. Bir başlık bir ilişki desenini öğrenir: belki özne-fiil uyumu, belki noktalama eşleştirmesi, belki de faydasız bir şey.
Çok başlı dikkat, aynı işlemi paralel olarak, bir token'ın temsilinin farklı dilimlerinde birkaç kez çalıştırır. On iki paralel başlık. On iki olası ilişki deseni. Başlıklar yalnızca eğitim baskısıyla uzmanlaşır; hiçbir mimar baş 4'e fiil zamanına bakmasını söylemez.
Bölme İlişkisi
ANDREA-120M, d_model = 768 ve n_head = 12 olarak ayarlar. Çok başlı dikkat mekanizması 768'i her biri 64 olan 12 parçaya böler:
head_dim = d_model / n_head
64 = 768 / 12
Her baş 64 boyutlu vektörler üzerinde çalışır. Bölme temiz bir şekilde uygulanır: d_model n_head'e tam bölünmelidir, kalan sıfır olmalıdır. Bu kuralı ihlal eden konfigürasyonlar çalışma zamanında değil, konfigürasyon doğrulamada başarısız olur.
Üç Model, Üç Bölme
| Variant | d_model | n_head | head_dim |
|---|---|---|---|
| ANDREA-12M | 384 | 12 | 32 |
| ANDREA-120M | 768 | 12 | 64 |
| ANDREA-480M | 1536 | 24 | 64 |
Dikkat: ANDREA-12M & ANDREA-120M n_head=12 değerini sabit tutar; sadece d_model & dolayısıyla head_dim ölçeklenir. ANDREA-480M baş sayısını 24'e ikiye katlar, head_dim=64 değerini ANDREA-120M ile eşleştirerek korur.
head_dim Hesaplama
Baş Başına Üç Matris, Ya Da Bir Büyük Matris
Baş Başına Görünüm
Her başın kendi sorgu projeksiyonu, anahtar projeksiyonu ve değer projeksiyonu olmalıdır. Baş h için:
Q_h = X · W_Q^h burada W_Q^h şekli [d_model, head_dim] olan
K_h = X · W_K^h burada W_K^h şekli [d_model, head_dim] olan
V_h = X · W_V^h burada W_V^h şekli [d_model, head_dim] olan
X, giriş şekli [batch, seq_len, d_model] taşır. Projeksiyondan sonra Q_h, K_h, V_h her biri [batch, seq_len, head_dim] şeklini taşır.
Birleştirilmiş Görünüm
Baş başına matrisler bellekte yan yana durur. [d_model, d_model] şekline sahip tek bir birleştirilmiş matris W_Q, tüm başları bir kerede üretir:
Q_fused = X · W_Q # [batch, seq_len, d_model]
Q_per_head = reshape(Q_fused) # [batch, n_head, seq_len, head_dim]
Birleşik matmul, 12 yerine tek bir BLAS çağrısı gönderir. CUDA tensor çekirdekleri bu boyuttaki matmul'larda tepe verimliliğine ulaşır; kafa başına matmul'lar donanımı yetersiz kullanır.
Parametre Sayısı
Üç birleşik matris W_Q, W_K, W_V, her biri d_model × d_model. Artı çıktı projeksiyonu W_O, ayrıca d_model × d_model. ANDREA-120M için:
katman başına dikkat parametreleri = 4 × 768² = 2,359,296 ≈ 2.36M
12 katman boyunca parametreler = 12 × 2.36M ≈ 28.3M
ANDREA-120M'nin toplam parametrelerinin yaklaşık dörtte biri dikkat projeksiyonlarında yer alır. Kalan dörtte üçü MLP alt katmanında & gömülere aittir.
Projeksiyonları Adlandırma
On İki Vektör Bir Olur
Her Baş Hesapladıktan Sonra
Her baş, [batch, seq_len, head_dim] şeklinde bir çıktı tensörü üretir. On iki baş, on iki böyle tensör üretir. Özellik boyutunda birleştirme, bunları tekrar bir araya yığar:
concat_output = concat(head_1, head_2, ..., head_12)
shape = [batch, seq_len, n_head × head_dim]
= [batch, seq_len, 768] # for ANDREA-120M
Concat, bölmeyi tersine çevirir. Toplam özellik boyutu d_model'e geri döner. Boyutlarda bilgi kaybı yok; fark, her parçanın içerdiği şeydedir: head 1'in parçası, head 1'in öğrenilmiş dikkat desenini yansıtır.
Çıkış Projeksiyonu W_O
Sadece birleştirme, head'leri izole bırakır: head 4'ün çıkışı head 7'nin çıkışının yanında durur, ikisi de birbirinden habersizdir. [d_model, d_model] şeklinde olan çıkış projeksiyonu W_O onları karıştırır:
attention_output = concat_output · W_O
shape = [batch, seq_len, d_model]
W_O sonrasında, her çıktı boyutu on iki başın tümünün öğrenilmiş doğrusal bir kombinasyonunu taşır. Bilgi, bu tek matris çarpımı aracılığıyla başlar arasında özgürce akar.
Neden Başlar Uzmanlaşır
```Mimari hiçbir şey, baş 4'ün fiil zamanını öğrenmesini veya baş 9'un eşleşen noktalama işaretlerini öğrenmesini zorlamaz. Uzmanlaşma, gradyan baskısından ortaya çıkar: eğitim sırasında gereksiz katkıda bulunan başlar, benzersiz katkıda bulunan başlara göre daha küçük gradyanlar alır. Binlerce adımda, her baş toplam kaybı en etkili şekilde azaltan bir nişe yerleşir.
Deneysel olarak, eğitilmiş transformer'lar şu işleri yapan başlar gösterir: konumsal desenler (baş bir önceki tokene bakar), sentaktik desenler (baş eşleşen kapanış parantezine bakar), semantik desenler (baş en son adlandırılmış varlığa bakar). Hiçbir etiket bu uzmanlaşmayı eğitmez. Yalnızca eğitim sinyali, W_O üzerinden yayılır ve başları sıralar.
Neden On İki Baş, Tek Bir Geniş Baş Değil
CUDA Başları Nasıl Saklar
Tek Bir Tensor, Yeniden Şekillendirilmiş
ANDREA'nın eğitim motoru microgpt_cuda.cu on iki baş için on iki ayrı tampon ayırmaz. Tek bir birleştirilmiş tensor ayırır ve baş boyutunu bir stride deseni olarak işler:
// Q = X · W_Q sonrası (bir matmul, başlar arasında birleştirilmiş)
// Q'nun şekli [batch, seq_len, d_model]
// yeniden şekillendir: [batch, seq_len, n_head, head_dim]
// transpoz et: [batch, n_head, seq_len, head_dim]
// her head artık iç iki boyutta bitişik
Transpoz işlemi n_head'i seq_len'in önüne taşır. Neden? Çünkü bir sonraki işlem (Q_h · K_h^T) her head'in seq_len × head_dim diliminin bellekte bitişik olmasını gerektirir. CUDA matmulları bitişik tensörlerde daha hızlı çalışır.
Tek Kernel, Çoklu Head'ler
Tek bir dikkat CUDA çekirdeği, tüm başları paralel olarak çalıştırır. Her thread bloğu bir (batch, head) çifti işler; blok içindeki thread'ler seq_len × head_dim karosu üzerinde işbirliği yapar. Çekirdek, birden fazla baş işlediğini asla bilmez; başlatma ızgarası paralelliği yönetir.
Yapılandırma Donanımı Yansıtır
ANDREA-120M'nin n_head=12, head_dim=64 seçimi, RTX 4090 tensor çekirdekleriyle uyumludur; bunlar 16'nın katları şeklinde matmul karolarını tercih eder. head_dim=64 = 4 × 16 karo şekline tam olarak uyar. head_dim=32 (ANDREA-12M) de uyar ancak karoyu yeterince kullanmaz. head_dim=72 uymaz ve yedek çekirdekleri zorlar.
Son Resim
| Adım | İşlem | Çıktı şekli |
|---|---|---|
| 1. Proje | Q = X · W_Q (benzer şekilde K, V) | [batch, seq, d_model] |
| 2. Yeniden şekillendir & transpoz | d_model'i böl → (n_head, head_dim) | [batch, n_head, seq, head_dim] |
| 3. Başına dikkat | her baş için ölçekli nokta-çarpım | [batch, n_head, seq, head_dim] |
| 4. Transpoz & yeniden şekillendir | (n_head, head_dim)'i birleştir → d_model | [batch, seq, d_model] |
| 5. Çıkış projeksiyonu | output = concat · W_O | [batch, seq, d_model] |
Beş adım. Üç matmul girdiye dokunur (Q, K, V projeksiyonları). Bir matmul birleştirilmiş başlıklara dokunur (W_O). Bir dikkat çekirdeği tüm başlıkları paralel olarak işler. ANDREA-120M her katmanda bu beş adımı bir kez çalıştırır, on iki katman derinliğinde, her ileri geçişte.