2 puan yazan GN⁺ 2025-03-06 | Henüz yorum yok. | WhatsApp'ta paylaş
  • GPT tarzı yalnızca decoder Transformer’da eğitilebilir self-attention, her token’ın önceki girdideki hangi token’lara odaklanması gerektiğini hesaplayarak bağlam vektörü oluşturur
  • Temel nokta scaled dot product attentiondır; giriş embedding’lerini query, key, value uzaylarına gönderen üç eğitilebilir matris Wq, Wk, Wv kullanır
  • Giriş matrisi X, Q=XWq, K=XWk, V=XWv olarak dönüştürülür; Ω=QKᵀ, √c’ye bölündükten sonra satır bazında softmax ile attention ağırlıkları A elde edilir
  • Bağlam vektörleri C=AV şeklinde tek bir matris çarpımıyla oluşturulur; tüm hesaplama 5 matris çarpımı ve bir transpozla tüm token’lara uygulanabilir
  • Bu adım, giriş embedding’leri arasında doğrudan dot product yapan oyuncak örneklerin ötesine geçerek PyTorch nn.Module ve nn.Linear ile uygulanabilen eğitilebilir attentiona uzanır

LLM işleme akışında self-attention’ın konumu

  • GPT tarzı yalnızca decoder Transformer tabanlı LLM, o ana kadarki token’lara bakarak bir sonraki token’ı tahmin eden bir yapıdır
  • İşleme akışı, dizgiyi token’lara ayırmak, her token’ı token embedding’ine dönüştürmek ve ardından konum bilgisini temsil eden positional embedding’i ekleyerek giriş embedding’ini oluşturmak şeklindedir
  • Self-attention, her giriş embedding’i için diğer token’lara ne kadar odaklanılacağını gösteren bir attention skorları listesi üretir
    • Örnek cümle "the fat cat sat on the mat" içinde "cat" ele alınırken "fat" önemli olabilir
    • "mat" ele alınırken ise "fat"ın önemi görece düşük olabilir
  • Attention skorları softmax’ten geçerek toplamı 1 olan attention ağırlıklarına dönüşür; bu ağırlıklarla giriş embedding’lerinin ağırlıklı toplamı alınarak bağlam vektörü oluşturulur
  • Bağlam vektörü, her token’ın anlamını tüm girdinin bağlamı içinde ifade eden bir vektör olarak ele alınır

Eğitilebilir self-attention’ın hedefi

  • Önceki aşamalara kadar giriş embedding’leri arasında doğrudan dot product hesaplayan oyuncak self-attention kullanılmıştı
  • Bu aşamanın hedefi, giriş vektörlerinden attention skorları üretebilen eğitilebilir bir attention mekanizması kurmaktır
  • Sebastian Raschka’nın Build a Large Language Model (from Scratch) kitabının 3.4 bölümü bunu scaled dot product attention ile uygular
  • Odak, bu yapının neden etkili olduğundan çok hangi hesaplamalarla çalıştığı üzerindedir

Query, Key, Value matrisleri ve uzay projeksiyonu

  • Giriş dizisinin uzunluğu n, giriş embedding boyutu d, bağlam vektörü boyutu c olarak alınır
  • Giriş embedding dizisi x1, x2, x3, ... xn şeklinde ifade edilir ve her giriş embedding’i d boyutlu bir vektördür
  • Üç eğitilebilir ağırlık matrisi tanımlanır
    • query weights matrix: Wq
    • key weights matrix: Wk
    • value weights matrix: Wv
  • Her matris d×c boyutundadır ve d boyutlu giriş vektörünü c boyutlu bir uzaya projekte eder
  • Giriş vektörü xm’yi query uzayına gönderen hesaplama qm=xmWq şeklindedir
  • Key uzayı ve value uzayı da aynı yöntemle giriş embedding’lerini ayrı ayrı farklı c boyutlu uzaylara projekte eder

Matrisi projeksiyon olarak görme

  • Matrisler, noktaları döndürmek gibi geometrik dönüşümler için kullanılabilir
  • Kare matrisler aynı boyut içinde dönüşüm yapar; kare olmayan matrisler ise vektörleri farklı boyutlu bir uzaya gönderebilir
  • Örneğin 3×2 boyutlu bir matris, 3 boyutlu vektörleri 2 boyutlu vektörlere dönüştürebilir
  • 3D grafiklerde 3D noktaları 2D ekrandaki noktalara dönüştüren frustum matrisi de bu tür bir projeksiyon örneği olarak kullanılır
  • Self-attention, giriş embedding’lerini query, key, value adı verilen üç farklı projeksiyon uzayına gönderdikten sonra projekte edilmiş vektörlerle hesaplamayı sürdürür
  • Bu projeksiyon matrisleri eğitim sırasında öğrenildiği için, basit dot product attention’da olmayan bir dolaylılık ortaya çıkar

Attention skorlarının hesaplanması

  • Belirli bir giriş xm ele alınırken, başka bir giriş xp için attention skoru query projeksiyonu ile key projeksiyonunun dot product’ı olarak tanımlanır
  • Hesaplama şu şekildedir
    • qm=xmWq
    • kp=xpWk
    • ωm,p=qm·kp
  • Bu hesaplama tüm girdiler için döngüyle yapılabilir; ancak matris çarpımı kullanılırsa tek seferde hesaplanabilir
  • Tüm giriş embedding’leri matris X olarak alınırsa, X boyutu n×d olur
  • Key matrisi K=XWk ile tek seferde hesaplanır
    • Sonuç K, n×c boyutundadır
    • Her satır, ilgili giriş embedding’inin key uzayına projekte edilmiş vektörüdür
  • Query matrisi de aynı şekilde Q=XWq olarak hesaplanır
  • Tüm query’ler ile tüm key’ler arasındaki dot product’lar QKᵀ ile elde edilir
    • Q, n×c boyutundadır
    • Kᵀ, c×n boyutundadır
    • Sonuç Ω, n×n boyutundadır
  • Ωm,p, xm için bağlam vektörü oluşturulurken xp’ye ne kadar odaklanılacağını gösteren attention skorudur

Ölçekleme ve softmax normalizasyonu

  • Attention skorları, önceki örnekte olduğu gibi softmax’ten geçirilerek toplamı 1 olan ağırlıklara dönüştürülür
  • Softmax, büyük değerleri daha da büyütüp küçük değerleri düşürürken listenin tamamının toplamını 1 olacak şekilde ayarlar
  • Gerçek LLM’lerde d ve c binler mertebesinde olabilir; yalnızca saf softmax kullanılırsa küçük gradient’ler oluşabilir
  • Bu durumda softmax “step function gibi” davranabilir
    • Bu, en büyük değerin baskın hale geldiği ve diğer değerlerin çok küçüldüğü bir durum olarak yorumlanır
  • Bunu hafifletmek için attention skorları projeksiyon uzayının boyutu c’nin kareköküne bölündükten sonra softmax uygulanır
  • Matris gösterimi şöyledir
    • A=softmax(Ω/√c, axis=1)
  • axis=1, PyTorch tarzı gösterimle softmax’in satır bazında uygulandığı anlamına gelir
  • Sonuç A, normalize edilmiş attention skorları, yani attention ağırlıkları matrisidir

Bağlam vektörü oluşturma

  • Value uzayı projeksiyonu V=XWv olarak hesaplanır
  • A, n×n boyutunda bir attention ağırlıkları matrisidir
    • Am,p, xm için bağlam vektörü oluşturulurken giriş pye uygulanacak attention ağırlığıdır
  • V, n×c boyutundadır ve her satır giriş embedding’inin value uzayına projekte edilmiş vektörüdür
  • Bağlam vektörleri matrisi C=AV olarak hesaplanır
    • Sonuç C, n×c boyutundadır
    • C’nin minci satırı, giriş xm için bağlam vektörüdür
  • Bu hesaplama, her token için value vektörlerini attention ağırlıklarıyla çarpıp toplama işlemini tek bir matris çarpımıyla gerçekleştirir

Tüm hesaplamanın özeti

  • Giriş matrisi X, token dizisinin giriş embedding’lerini içerir ve boyutu n×ddir
  • Üç eğitilebilir matrisle giriş sırasıyla query, key, value uzaylarına projekte edilir
    • Q=XWq
    • K=XWk
    • V=XWv
  • Query ve key’in dot product’ı ile attention skorları hesaplanır
    • Ω=QKᵀ
  • Skorlar ölçeklendikten sonra satır bazında softmax uygulanarak attention ağırlıkları oluşturulur
    • A=softmax(Ω/√c, axis=1)
  • Value projeksiyonu ile attention ağırlıkları çarpılarak bağlam vektörleri üretilir
    • C=AV
  • Tüm self-attention mekanizması, tüm giriş token’larının bağlam vektörlerini 5 matris çarpımı ve bir transpozla oluşturabilir

PyTorch uygulaması ve sonraki adım

  • Kitabın 3.4 bölümü yukarıdaki hesaplamayı PyTorch koduyla uygular ve aynı matris işlemlerini yapan basit bir nn.Module alt sınıfı oluşturur
  • İlk sürüm, üç ağırlık matrisi için normal nn.Parameter nesneleri kullanır
  • İkinci sürüm, daha etkili eğitim için nn.Linear kullanır
  • Sonrasında ele alınacak konular ikidir
    • causal self-attention: Belirli bir token ele alınırken sonraki token’lara odaklanmayan yöntem
    • multi-head attention: İlk düşünüldüğü kadar karmaşık olmayan bir konu olarak duyurulur
  • Batch işleme ayrı bir mesele olarak kalır
    • Tek bir giriş dizisinde bile attention skorları matrisi kullanılır
    • Birden fazla giriş dizisini paralel işlemek için matristen daha yüksek boyutlu tensörler gerekebilir
  • Sonraki yazı Writing an LLM from scratch, part 9 -- causal attention ile devam eder

Henüz yorum yok.

Henüz yorum yok.