LLM geliştirme süreci bölüm 8 - Eğitilebilir self-attention tekniği
(gilesthomas.com)- 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,Wvkullanır - Giriş matrisi
X,Q=XWq,K=XWk,V=XWvolarak dönüştürülür;Ω=QKᵀ,√c’ye bölündükten sonra satır bazında softmax ile attention ağırlıklarıAelde 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.Modulevenn.Linearile 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
- Örnek cümle
- 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 boyutud, bağlam vektörü boyutucolarak alınır - Giriş embedding dizisi
x1, x2, x3, ... xnşeklinde ifade edilir ve her giriş embedding’idboyutlu 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
- query weights matrix:
- Her matris
d×cboyutundadır vedboyutlu giriş vektörünücboyutlu bir uzaya projekte eder - Giriş vektörü
xm’yi query uzayına gönderen hesaplamaqm=xmWqşeklindedir - Key uzayı ve value uzayı da aynı yöntemle giriş embedding’lerini ayrı ayrı farklı
cboyutlu 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×2boyutlu 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ş
xmele alınırken, başka bir girişxpiçin attention skoru query projeksiyonu ile key projeksiyonunun dot product’ı olarak tanımlanır - Hesaplama şu şekildedir
qm=xmWqkp=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
Xolarak alınırsa,Xboyutun×dolur - Key matrisi
K=XWkile tek seferde hesaplanır- Sonuç
K,n×cboyutundadır - Her satır, ilgili giriş embedding’inin key uzayına projekte edilmiş vektörüdür
- Sonuç
- Query matrisi de aynı şekilde
Q=XWqolarak hesaplanır - Tüm query’ler ile tüm key’ler arasındaki dot product’lar
QKᵀile elde edilirQ,n×cboyutundadırKᵀ,c×nboyutundadır- Sonuç
Ω,n×nboyutundadır
Ωm,p,xmiçin bağlam vektörü oluşturulurkenxp’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
dvecbinler 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=XWvolarak hesaplanır A,n×nboyutunda bir attention ağırlıkları matrisidirAm,p,xmiçin bağlam vektörü oluşturulurken girişpye uygulanacak attention ağırlığıdır
V,n×cboyutundadır ve her satır giriş embedding’inin value uzayına projekte edilmiş vektörüdür- Bağlam vektörleri matrisi
C=AVolarak hesaplanır- Sonuç
C,n×cboyutundadır C’ninminci satırı, girişxmiçin bağlam vektörüdür
- Sonuç
- 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 boyutun×ddir - Üç eğitilebilir matrisle giriş sırasıyla query, key, value uzaylarına projekte edilir
Q=XWqK=XWkV=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.Modulealt sınıfı oluşturur - İlk sürüm, üç ağırlık matrisi için normal
nn.Parameternesneleri kullanır - İkinci sürüm, daha etkili eğitim için
nn.Linearkullanı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.