English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

konuk
1 / ?
derslere geri dön

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


Variantd_modeln_headhead_dim
ANDREA-12M3841232
ANDREA-120M7681264
ANDREA-480M15362464

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

Diyelim ki hipotetik bir ANDREA-240M varyantı `d_model=1024` & `n_head=16` kullanıyor. `head_dim`'i hesaplayın. Sonra bir cümleyle, bir meslektaşınızın `d_model=1024` & `n_head=15` önermesi durumunda yapılandırma doğrulaması sırasında ne olacağını açıklayın.

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

ANDREA-120M'de `d_model=768` & `n_head=12` vardır. Bir transformer bloğunun dikkat alt katmanındaki dört projeksiyon matrisinin adlarını verin & her birinin şeklini (satırlar × sütunlar) belirtin. Sonra dördünden hangisinin giriş X'i kullandığı & hangisinin birleştirilmiş kafa çıktılarını kullandığı belirtin.

On İki Vektör Bir Olur

Multi-Head Attention Flow


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

Bir alternatif hayal edin: her biri 64 dim olan 12 başı, 768 dim olan 1 baş ile değiştirin. Projeksiyonlardaki toplam parametreler aynı kalır. Dil modelleme görevlerinde 12 başlı konfigürasyonun 1 başlı konfigürasyondan neden daha iyi performans gösterdiğini iki farklı nedenden bahsedin. Cevabınızda dikkat desenlerine veya eğitim dinamiklerine atıfta bulunun.

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. ProjeQ = X · W_Q (benzer şekilde K, V)[batch, seq, d_model]
2. Yeniden şekillendir & transpozd_model'i böl → (n_head, head_dim)[batch, n_head, seq, head_dim]
3. Başına dikkather 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ış projeksiyonuoutput = 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.

Boruyu Okuma

ANDREA-120M'deki bir multi-head attention alt katmanından tek bir token'ın temsili X[i]'nin (768-boyutlu vektör) nasıl aktığını adım adım anlatın. Bahsedin: geçirdiği projeksiyonlar, nasıl bölündüğü, attention'ın ona ne yaptığı ve nasıl 768-boyutlu vektöre döndüğü. Her adımda boyutları gösterin.