microgpt
(karpathy.github.io)- GPT modelinin eğitim ve çıkarım sürecinin tamamını saf Python tek dosyada 200 satırla gerçekleştiren minimal bir dil modeli yapısı
- Veri kümesi, tokenizer, otomatik türev motoru, GPT-2 benzeri sinir ağı, Adam optimizatörü, eğitim ve çıkarım döngüsü dahil her şeyi içerir
- İsim veri kümesini eğiterek yeni isimler üretir; kendi yazılmış autograd ve Transformer yapısı üzerinden GPT’nin temel ilkelerini görünür kılar
- Büyük ölçekli LLM’lerin aksine bağımlılık olmadan saf Python ile çalışır; yalnızca algoritmik özü bırakılmış bir yapıdır
- microgpt’yi anlamak, ChatGPT gibi büyük modellerin temel algoritmik yapısını anlamayı sağlar
microgpt genel bakış
- microgpt, 200 satırlık Python koduyla yazılmış minimal bir GPT uygulamasıdır ve harici kütüphane bağımlılığı yoktur
- Veri kümesi, tokenizer, otomatik türev, GPT-2 benzeri yapı, Adam optimizatörü, eğitim ve çıkarım döngüsünün tamamını içerir
- Karpathy’nin LLM’leri öz seviyesine kadar basitleştirmek için yaptığı sanatsal bir projedir; micrograd, makemore, nanogpt gibi çalışmaların devamı niteliğindedir
- Tüm kod GitHub Gist, web sayfası ve Google Colab üzerinde sunulmaktadır
Veri kümesi
- Her satırda bir isim bulunan yaklaşık 32.000 isimlik bir metin dosyası kullanılır
- Her isim bir belge olarak kabul edilir ve model bu örüntüyü öğrenerek yeni isimler üretir
- Eğitim sonrası üretim örnekleri: kamon, ann, karai, jaire, vialan vb.
Tokenizer
- Her benzersiz karaktere bir tam sayı kimliği atayan basit, karakter tabanlı bir tokenizer
- a–z alfabesi ile BOS(beginning of sequence) token’ı dahil toplam 27 token
- Her belge eğitimde
[BOS, e, m, m, a, BOS]biçiminde sarılır
Otomatik türev (Autograd)
Valuesınıfı skaler değerleri ve gradyanları izler ve işlem grafiğini oluşturur- Toplama, çarpma, üs alma, log, üstel, ReLU gibi temel işlemlerin yerel türevlerini (local gradient) saklar
backward()metodu zincir kuralını uygulayarak geri yayılım yapar- PyTorch’taki
.backward()ile aynı algoritma skaler düzeyde doğrudan uygulanır
Parametre başlatma
- Model yaklaşık 4.192 parametreye sahiptir
- Embedding tablosu, attention ağırlıkları, MLP ağırlıkları, çıktı projeksiyonu gibi bileşenlerden oluşur
- Her parametre Gaussian dağılımından rastgele değerlerle başlatılır
Model mimarisi
- GPT-2 yapısının sadeleştirilmiş bir biçimidir; RMSNorm, ReLU, residual connection kullanır
- Temel bileşenler:
- Embedding aşaması: token ve konum embedding’leri toplanır
- Multi-head attention: Q, K, V vektörleri hesaplanır ve geçmiş token bilgisinden yararlanmak için KV cache kullanılır
- MLP bloğu: iki katmanlı feedforward ağ ile yerel hesaplama yapılır
- Çıktı aşaması: sözlük boyutu (27) için logit üretir
- KV cache eğitim sırasında da aktiftir; geri yayılım cache üzerinden akar
Eğitim döngüsü
- Her adımda bir belge seçilir ve
[BOS, ... , BOS]olarak tokenize edilir - Model sonraki token olasılığını tahmin eder ve çapraz entropi kaybı hesaplanır
loss.backward()ile gradyanlar hesaplandıktan sonra parametreler Adam optimizatörü ile güncellenir- Öğrenme oranı lineer azalma (linear decay) ile uygulanır
- 1.000 adım boyunca kayıp yaklaşık 3.3 → 2.37 seviyesine düşer
Çıkarım (Inference)
- Eğitim tamamlandıktan sonra BOS token’ı ile başlayarak yeni isimler üretilir
- Her adımda softmax olasılıklarına göre bir sonraki token örneklenir
- temperature değeri yaratıcılığı ayarlar (düşükse daha tutucu, yüksekse daha çeşitli)
- Örnek çıktı: kamon, ann, karai, jaire, vialan, karia, yeran, anna vb.
Çalıştırma yöntemi
- Yalnızca Python varsa çalıştırılabilir (
python train.py) - Eğitim yaklaşık 1 dakika içinde tamamlanır ve kayıp değerleri adım adım yazdırılır
- Colab not defterinde de aynı şekilde çalıştırılabilir
Kodun gelişim aşamaları
train0.pyiletrain5.pyarasında adım adım genişler- Bigram → MLP → Autograd → Attention → Multi-head → Adam
- Her aşama Gist içindeki build_microgpt.py revizyonlarında görülebilir
Gerçek LLM’lerle farkı
- Veri: microgpt 32K isim kullanır, gerçek LLM’ler trilyonlarca token kullanır
- Tokenizer: karakter düzeyi vs. BPE tabanlı subword
- Autograd: skaler tabanlı Python vs. GPU tensor işlemleri
- Mimari: 4K parametre vs. yüz milyarlarca parametre
- Eğitim: tek belgeyi yineleme vs. büyük ölçekli batch ve mixed-precision eğitim
- Optimizasyon: basit Adam vs. ince ayarlanmış hiperparametreler ve scheduling
- Sonraki işlemler: SFT ve RL aşamalarından geçerek ChatGPT benzeri biçime evrilir
- Çıkarım altyapısı: GPU dağıtımı, KV cache yönetimi, quantization, speculative decoding vb.
SSS özeti
- Model, giriş token’larını sonraki token olasılığına dönüştüren matematiksel bir fonksiyondur
- “Anlama” yoktur; tahmin istatistiksel kuralların öğrenilmesiyle yapılır
- ChatGPT ile aynı token tahmin döngüsünü küçültülmüş biçimde uygular
- “Halüsinasyon (hallucination)” olasılıksal örneklemenin doğal sonucudur
- Yavaş olsa da LLM’lerin temel algoritmasını eksiksiz biçimde yeniden üretir
- Daha iyi sonuçlar için eğitim adımı, model boyutu ve veri kümesi ayarlanabilir
- Veri kümesi değiştirilirse şehir adları, Pokémon isimleri, şiirler vb. farklı örüntüler öğrenilebilir
microgpt, LLM’lerin tüm temel algoritmalarını en küçük ölçekte uygulayan eğitsel ve deneysel bir modeldir; büyük dil modellerinin çalışma prensibini tamamen görünür kılan bir örnektir.
1 yorum
Hacker News görüşleri
Birisi microgpt’yi değiştirerek Korece isim üreten küçük bir GPT yapmış
Tüm süreci görselleştiren bir web sayfası da var — tokenization’dan inference’a kadar tüm pipeline’ı keşfedebiliyorsunuz
English GPT lab üzerinden doğrudan deneyebilirsiniz
PyTorch char_rnn eğitimi buna referans olabilir
Tokenization, embedding, attention, loss·gradient, eğitim, inference, gerçek GPT ile karşılaştırma gibi konuları iyi açıklıyor
Sitenin kendisi, orijinal blog yazısını temel alan bir yapay zeka üretimi görselleştirmeye daha yakın
Ben de microgpt’yi C++’a port ettim
Kod bağlantısı
Kod satırı sayısı 2 kat ama hız 10 kat daha yüksek
En zor kısım Value sınıfını C++ içinde ifade etmekti ve sonunda shared_ptr kullandım
“Halüsinasyon (hallucination)” denen şeyin ne olduğunu merak etmiştim
Model sadece olasılık dağılımından token örnekliyor; bir hakikat kavramı yok
Bu yüzden LLM’nin kendi cevabına dair bir güven skoru taşıyıp taşıyamayacağını düşündüm
Ön eğitimli modeller kalibreli olsa da instruction following (post-training) sonrasında bu bozuluyor
İlgili araştırmalar: makale1, makale2
İstatistikte anakütlesi bilinmeyen güven aralıkları gibi, LLM olasılıklarının da gerçek dünyayla doğrudan bir bağlantısı yok
Sonuçta LLM, dünyayı hiç deneyimlememiş ama sadece kitap okumuş birine benziyor
Ama bu olasılık “doğru olma olasılığı” değil, “bu durumda bu token’ı üretme olasılığı”dır
Öğrenmek için microgpt’yi Rust’a çevirdim
microgpt-rs
Autograd grafik yapısını Rust tipleriyle ifade etmek en zor kısımdı
Şu anda WebAssembly ile tarayıcıda çalışacak şekilde düzenliyorum ve bloga koymayı planlıyorum
Karpathy’nin kodu gerçekten şiirsel ve özlü bir tasarım
Kod güzel ve okunması kolay ama backbone.js gibi satır satır açıklamalı yorumlar olsaydı iyi olurdu
Backbone dokümantasyonu örnek alınabilir
Docco projesi da aynı geliştiricinin yaptığı harika bir araç
HTML sürümü kodu da var
microgpt blogu
Karpathy’nin videoları ve kodu sayesinde gradient descent, backpropagation, chain rule kavramlarını ilk kez gerçekten anladığımı hissediyorum
Sadece matematiğe bakınca kafam karışıyordu ama kodla birlikte görünce netleşti
Kişisel olarak adeta hayatta başarı hissi gibi bir deneyimdi
Karpathy’nin dediği gibi, gerçekten anlamak istiyorsan başkasına öğretmeyi denemek önemli
Bu projenin HN’e ancak şimdi düşmesine şaşırdım
Ben PicoGPT adlı 35 satırlık bir JS sürümü ve bir Python sürümü yaptım,
web üzerinde doğrudan çalıştırılabiliyor
Hatta QR kodla bile çalıştırılabilen ultra küçük bir LLM
İlgili başlıklar: bağlantı1, bağlantı2
Ben de microgpt kodunu görselleştirmeli bir blog yazısına dönüştürdüm
Blog bağlantısı
Kod akışını takip ederek etkileşimli biçimde gösteriyor
aslında bu dördünün hepsi de veri setinde zaten var
Son zamanlarda yapay zekada ‘micro’ trendi ilginç geliyor
Sadece modeli büyütmektense, küçük ve odaklı modellerde verimlilik daha fazla artıyor
Gerçekte Gemini Flash’i alan analizi için kullanıyorum ve hız/maliyet oranı çok daha iyi
Sadece latency farkı bile yapılabilecek ürünlerin türünü değiştiriyor
Buna microgpt demek yerine, nanogpt’den de küçük olduğu için picogpt daha uygun olurdu diye düşünüyorum
Yine de harika bir proje