Maksim Sekretov, Node.js üzerinde çalışan ve eğitim sırasında her bir skaler, ağırlık ve gradyanı gösteren, saf JavaScript ile yazılmış minik bir transformer yayınladı. tiny-language-model-neuro-js deposu, herkesin rastgele bir modelle başlamasına, "can human read ?" gibi bir istem (prompt) vermesine, modelin başarısız oluşunu izlemesine ve ardından tek bir komutla eğitimi başlatıp cevabın nasıl doğru hale geldiğini görmesine olanak tanıyor.

Çoğu LLM demosunun matematiği gizleme sebebi

Tipik dil modeli eğitimleri TensorFlow veya PyTorch'a dayanır. Bu çerçeveler (frameworks), hesaplama grafiklerini otomatik olarak oluşturur ve gradyanları arka planda hesaplar; bu nedenle öğrenenler yalnızca üst düzey kodları ve kayıp (loss) eğrilerini görürler. Temel işlemler —her bir token'ın nasıl bir embedding'e dönüştüğü, dikkat (attention) skorlarının nasıl hesaplandığı, gradyanların her bir matris boyunca nasıl geri aktığı— görünmez kalır.

JavaScript modelinin farkı ne

Sekretov'un uygulaması, her şeyi tek bir bağımlılığı olmayan (dependency-free) Node.js betiğine indirger. Eğitim hattı (pipeline) şu basit sırayı takip eder:

  • Tokenlaştırma (Tokenization)
  • Embedding'ler
  • Nedensel (causal) transformer blokları
  • Çok kafalı öz-dikkat (multi-head self-attention)
  • İleri beslemeli ağlar (FFN)
  • Dil modeli başlığı ve softmax
  • Çapraz entropi kaybı (cross-entropy loss)
  • Geri yayılım (backpropagation)

node src/train.js --generalize --adaptive-teach komutunu çalıştırmak tüm eğitim döngüsünü başlatır. Kod saf JavaScript olduğu için her bir tensor basit bir dizidir (array), her matris çarpımı açık bir döngüdür (loop) ve her gradyan, kaynağı olan ağırlığın hemen yanında yer alır.

Rastgele tahminlerden doğru cevaplara

Model başladığında tüm parametreler rastgeledir. Ona “can human read ?” diye sorulduğunda anlamsız sonuçlar (gibberish) verir. Kısa bir ön eğitim (pre-training) aşamasından ve bir tur denetimli ince ayar (SFT) sürecinden sonra, aynı istem mantıklı bir cevap döndürür. Öğretmen sinyali —kayıp fonksiyonu aracılığıyla beslenen doğru token dizileri— embedding'ler, dikkat kafaları ve FFN katmanları üzerinden geri yayılır ve sırasıyla her bir skaler değeri günceller.

Felaket unutkanlığı (catastrophic forgetting) ile mücadele

İlk denemeler klasik bir sorunu ortaya koydu: yeni bir bilgi öğrenmek, önceden öğrenilenleri siliyordu. Sekretov bunu "tekrar etme" (rehearsal) yöntemiyle çözdü; yani yeni verileri tanıtırken eski örnekleri de tekrar sundu. Eğitim, ancak her bir hedef token en az %95 olasılığa ulaştığında ve on ardışık kontrolü geçtiğinde durur. Bu basit döngü, herhangi bir harici kütüphane kullanmadan temel bir araştırma zorluğunu gözler önüne serer.

Kimler faydalanabilir ve kimler dışarıda kalabilir

Proje, milyarlarca parametre ve GPU kümeleri üzerinde çalışan ticari LLM'lerle rekabet etmiyor. Bu performans farkı, projeyi üretim (production) iş yükleri için uygunsuz kılsa da modeli şeffaf bir öğretim aracına dönüştürüyor. Bir "kara kutu" (black-box) çerçevesinin içini görmekte zorlanan öğrenciler, hobi sahipleri ve araştırmacılar artık matematiğin doğrudan kod olduğu bir kum havuzuna (sandbox) sahip.

Eksikler neler ve proje nereye gidebilir

Uygulama kasıtlı olarak minimal tutulduğu için kodun okunabilirliğini koruyor ancak ölçeklenebilirliği sınırlıyor.

Sırada ne var

Depo halihazırda GitHub üzerinde herkese açık.

Özet: Sekretov, bir transformer'ı saf JavaScript'e indirgeyerek, meşhur derecede karmaşık bir teknolojiyi okunabilir ve düzenlenebilir bir betiğe dönüştürdü. Bunun bedeli hız, ancak kazancı ise içgörü; artık herkes bir dil modelinin skaler skaler öğrenmesini, unutmasını ve yeniden öğrenmesini izleyebilir.