Yapay ZekaMatematikGPU1 dk okuma

Yapay Zeka Neden Çoğunlukla Matris Çarpımıdır

Dil modelleri yazı yazar, görüntü modelleri resim çizer ve ikisi de sihir gibi gelebilir. Ama bilgisayarın gerçekte ne yaptığına bakarsanız, hesaplarının çoğunun tekrar tekrar yapılan tek bir basit iş olduğunu görürsünüz: sayıları çarp, sonra topla. Sayılar tablolar halinde dizildiğinde buna matris çarpımı denir. Nedenini en küçük parçadan başlayarak görelim.

Bir yapay sinir ağının en küçük parçası nörondur. Nöron girdi olarak birkaç sayı alır, her birini kendine ait bir ağırlık ile çarpar ve sonuçları toplar. Ortaya çıkan toplama çıktı denir. Ağırlık, bir girdinin ne kadar önemli olduğunu söyler: Pozitif bir ağırlık çıktıyı yukarı iter, negatif bir ağırlık aşağı çeker. İşte bir günün piknik için ne kadar iyi olduğunu puanlayan bir nöron. Girdileri değiştirin.

Etkileşimli
0.9 × 2 = 1.8
0.4 × 1 = 0.4
0.7 × −2 = −1.4
Çıktı: toplam0.8
Piknik için kötü günİyi gün

Ağırlıkları elle seçilmiş bir oyuncak örnek. Gerçek bir ağda ağırlıklar eğitim sırasında öğrenilir ve girdilerin nadiren böyle adları olur. Gerçek nöronlar ayrıca bias adı verilen, yine öğrenilen bir sayı daha ekler.

Bir nöronun hesapladığı şey bundan ibarettir: çarp, sonra topla. Buna ağırlıklı toplam denir. Gerçek bir ağda ağırlıkları kimse elle seçmez. Eğitim sırasında ağ, çıktıları işe yarar hale gelene kadar onları azar azar ayarlar. Bir modelin parametreleri, yani sözü edilen o milyarlarca sayı, büyük ölçüde bu ağırlıklardır.

Tek bir nöron kendi başına pek bir şey yapamaz. Bir katmanda birçok nöron vardır ve hepsi aynı girdilere bakar. Her nöronun ağırlıklarını bir satır olarak yazıp satırları alt alta dizerseniz bir sayı tablosu elde edersiniz: bir matris. Bütün katmanı çalıştırmak, her satır için bir ağırlıklı toplam hesaplamak demektir. Bu da bir matrisin bir sayı listesiyle çarpılmasıdır. Adım adım ilerleyin.

Etkileşimli
AğırlıklarGirdilerÇıktılar
2
1
−2
0.9Güneşli
Piknik
1
2
−1
×
0.4Sıcak
=
Plaj
1
0
3
0.7Rüzgarlı
Uçurtma
Her satır bir nöronun ağırlıklarını tutar. İlkini çalıştırmak için Sonraki adım'a basın.

Elle seçilmiş oyuncak ağırlıklar. İlk satır, yukarıdaki demodaki piknik nöronudur.

Her çıktı aynı tarifle bulundu: Bir satır boyunca ilerle, her ağırlığı kendi girdisiyle çarp, hepsini topla. Gerçek katmanlar yalnızca çok daha büyüktür. Embedding yazısında gördüğümüz gibi, bir dil modeli her tokenı yüzlerce ya da binlerce sayıdan oluşan bir listeye çevirir. Bu yüzden bir katmandaki tek bir matris milyonlarca ağırlık tutabilir.

Bir model aynı anda birçok token üzerinde de çalışır. Bu tokenların listelerini yan yana koyduğunuzda onlar da bir matris oluşturur ve iş, iki matrisin çarpımına dönüşür. Önceki yazıdaki attention bile matris çarpımlarından oluşur: Query'ler, key'ler ve value'lar ağırlık matrisleriyle çarpılarak üretilir; her query'yi her key ile karşılaştırmak ve value'ları harmanlamak da birer matris çarpımıdır.

Çarpımların arasında birkaç adım daha vardır: softmax, sayıları büken küçük fonksiyonlar (yaygın bir tanesi her negatif sayıyı sıfıra çevirir) ve sayıları sağlıklı bir aralıkta tutan bir adım. Bunlar önemlidir: Bu tür adımlar olmasaydı, üst üste dizilmiş birçok matris çarpımı katmanı tek bir katmandan daha güçlü olmazdı. Ama çok az hesap gerektirirler. Modelin genişliğini değiştirin ve karşılaştırın.

Etkileşimli
Hesapların matris çarpımı olan kısmı%95,3
Matris çarpımı
354.300
Geri kalan her şey
17.500

GPT tarzı bir transformer'ın tek bir katmanı için, önünde 1.000 tokenlık metin bulunan yeni bir token üzerinden yapılmış kaba bir işlem sayımı. Her çarpma ve her toplama bir işlem sayılır. "Geri kalan her şey" softmax, aktivasyon fonksiyonları, normalizasyon ve birkaç toplamadır; bunlar cömertçe sayılmıştır. Bu sayım zamanı değil, hesap miktarını ölçer.

Matrisler genişliğin karesiyle büyürken diğer adımlar çok daha yavaş büyür. Bu yüzden model büyüdükçe matris çarpımının payı da artar. Genişliği binlerle ölçülen bugünün büyük modellerinde, bu sayıma göre hesapların %99'undan fazlası matris çarpımıdır. Bu, zaman değil hesap miktarıdır: Bütün o ağırlıkları bellek ile işlemci arasında taşımak da zaman alır.

Yapay zekanın GPU'larda çalışmasının nedeni de budur. Bir matris çarpımında her çıktı kendi ağırlıklı toplamıdır ve hiçbiri bir diğerini beklemek zorunda değildir. Bu yüzden iş, hepsi aynı anda hesap yapan binlerce küçük çekirdeğe bölünebilir; GPU da tam olarak bunun için yapılmıştır. Birçok yapay zeka çipi bir adım daha ileri gider ve yalnızca matris çarpımı için yapılmış parçalar içerir.

Peki toplamda ne kadar hesap yapılıyor? Kullanışlı bir kaba kural: Bir dil modeli tek bir token üretmek için her parametre başına yaklaşık iki işlem yapar, bir çarpma ve bir toplama. Bir model boyutu seçin ve sayın.

Etkileşimli
Model boyutu (parametre)
Çarpma ve toplama
14 milyar
Elle, saniyede bir, hiç ara vermeden
444 yıl
Saniyede 100 trilyon işlem yapan bir çip
140 mikrosaniye

Bu bir ölçüm değil, kaba bir kural: Her token için parametre başına yaklaşık iki işlem. Metin uzadıkça büyüyen attention kısmını hesaba katmaz. Modern yapay zeka çipleri saniyede 100 trilyon veya daha fazla işlem yapabilir, ama gerçek hız çoğu zaman ağırlıkların bellekten ne kadar hızlı okunabildiğiyle sınırlıdır; bu yüzden gerçek süreler daha uzundur.

Yani perde arkasında yapay zekanın büyük bir kısmı, inanılmaz sayıda tekrarlanan tek bir basit işlemdir: çarp, topla, tekrarla. Bir modeli işe yarar kılan özel bir matematik değildir. Ağırlıklarının değerleridir, yani eğitimin bulduğu milyarlarca sayı.

Ama bu, yapay zekanın basit olduğu anlamına gelmez. Bazen sanki her şeyi açıklıyormuş gibi "sadece matris çarpımı" denir. İşlem basittir ama milyarlarca öğrenilmiş ağırlığın birlikte ne yapacağını kestirmek zordur; bu modelleri yapanlar için bile.


Bu içerik size yardımcı olduysa bana bir kahve ısmarlayabilirsiniz.
İlgili yazıCUDA’ya Giriş

yazılım, tasarım ve yapay zeka üzerine etkileşimli yazı ve kurslardan haberdar olmak için bültene katılabilirsiniz. Ayda en fazla birkaç e-posta alırsınız.


Destekçiler arasına katılın