Trend Olan Konular
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
/karpathy/autoresearch deposunu satır satır birkaç saat boyunca inceledim.
"Yapay zeka ajanları araştırma yapıyor" açısı tüm dikkati çekiyor ama bence daha ilginç olan, eğitim senaryosunda ne olduğunu ve arama döngüsünü sıkılaştıran mühendislik kararları. Okuduğum en yoğun tek dosyalı eğitim kurulumlarından biri.
Projeyi mümkün kılan şeyle başlayayım: zaman bütçesi 300 saniyelik duvar saatiyle sabitlenmiş. sabit adımlar değil, sabit jetonlar değil, sabit floplar değil. Duvar saati saniyeler. Bu küçük bir detay gibi kulağa geliyor ama otonom döngünün çalışmasının tüm sebebi bu. Ajan, modeli 3 kat büyütebilir, parti boyutunu yarıya indirebilir, tamamen farklı bir mimariyle değiştirebilir ve sonuç yine de diğer tüm deneylerle doğrudan karşılaştırılabilir çünkü hepsi aynı GPU'da tam olarak 5 dakikalık eğitim aldı. Eğer adımları düzeltirseniz, daha büyük bir model saniyede daha az gradyan güncellemesi alır ve haksız yere ceza verirsiniz. Tokenları düzeltseydiniz, aynı sorunu yaşarsınız. Duvar zamanını düzeltmek, doğru soruyu sorduğunuz anlamına gelir: Bu donanım ve bu kadar zaman göz önüne alındığında, üretebileceğiniz en iyi model hangisi? Geri kalan her şey serbest değişkendir. Ajan, model boyutu, veri verimliliği ve yakınsama hızı arasındaki tüm Pareto yüzeyini değerlendirme protokolü tarafından karıştırmadan keşfedebilir.
Metrik de dikkatle seçilir. Bayt başına bit, çapraz entropi kaybı değil. Çapraz entropi kelime büyüklüğüne bağlıdır. 32k token içeren bir model ile 8k jeton içeren bir model, verileri eşit derecede sıkıştırsalar bile çok farklı kayıp değerlerine sahip olur. BPB, NAT'larda her token çapraz entropisini toplayarak, hedef tokenların UTF-8 bayt uzunluklarını toplayarak ve bayt başına NAT'ı bayt başına bitlere dönüştürerek bunu normalleştirir. Yani ajan etkili token dağıtımını etkileyen bir şeyi değiştirse bile, karşılaştırma adil kalır. Bu iki seçenek, sabit duvar süresi ve kelime açısından değişmez bir metrik, karmaşık ve benzersiz bir aramayı temiz bir optimizasyon problemine dönüştürüyor.
şimdi modelin kendisi. Bu bir GPT ama anlamaya değer birçok modern püf noktası var. öncelikle, her yerde RMSnorm. blok girişlerinde (norm öncesi) ve ayrıca dikkat noktası ürününden hemen önceki sorgular ve anahtarlarda da bulunur. Bu QK-norm özelliği önemlidir çünkü bu olmadan Q ve K normları eğitim sırasında sınırsız şekilde büyüyebilir, bu da dikkat loglarının keskinleşmesine ve softmax'in doygunluğuna neden olur. Q ve K'yı normalleştirmek, ağın ne kadar derin olduğundan veya eğitim dinamiklerinin nasıl evrilmesinden bağımsız olarak nokta çarpımlarını istikrarlı bir aralıkta tutar. Dikkatin kendisi çekirdek kütüphanesi üzerinden yüklenen FA 3'tür. Hopper (sm_90) üzerindeki Varunneal uygulamasını kullanıyor ve eski GPU'lar üzerine topluluk yapımı kullanıyor. dikkat deseni "SSSL"dir; bu da üç katman kaydırma pencere dikkati (pencere = dizi uzunluğunun yarısı) ve ardından bir katman tam nedensel dikkat demektir, tekrarlanır. Bu, Mistral ve Gemma2'de gördüğünüz seyrekten yoğuna kadar olan desen.
Yerel dikkat katmanları hesaplama açısından ucuzdur çünkü dikkat matrisi bantlıdır ve periyodik küresel katman bilginin tam bağlam boyunca akışını sağlar. 8 katman ve 4 karakterli desen ile 0,1,2 yerel, 3. katman küresel, 4,5,6. katman yerel, 7. katman genel elde edersiniz. Son katman, desen ne olursa olsun zorunlu olarak globaldir.
Değer gömme meselesi ince ve bence yeterince takdir edilmiyor. Diğer her katman, ana token gömütmesinden tamamen ayrı bir göme tablosuna sahiptir ve token ID'leri doğrudan değer-boyut vektörlerine eşler. Bunlar öğrenilen bir kapı aracılığıyla dikkat değerlerine karışır: V = V + 2 * Sigmoid(W_gate @ x:32) * ve. Kapı ağırlığı sıfır başlatılır, yani Sigmoid(0) = 0.5, 2'ye çarpma 1.0 verir, bu da nötr bir başlangıç noktasıdır. Aşırı eğitim durumunda, model gizli durumun ilk 32 boyutuna göre başbaşı başına değer gömülmesini güçlendirmeyi veya bastırmayı öğrenebilir. bu ResFormer çalışma çizgisinden ve sezgi, belirti kimliğine doğrudan bir kestirme yol verdiği yönündedir. Değer vektörleri, "bu konumda hangi token'ın olduğuna" dair bilgi taşıyabilir, bu bilginin önceki katmanlardan kalan akış dönüşümlerinden sağ çıkmasına gerek kalmaz. Temelde girdiden doğrudan dikkat değerlerine atlama bağlantısıdır, bu yüzden model ne zaman işe yarayacağına karar verebilir.
Kalıntı akışta katman başına öğrenilebilir skalarlar da vardır: x = lambda_residi * x + lambda_x0i * x0, burada x0, katman 0'dan normalize gömülmedir. Her katman, çalışan kalıntıyı ne kadar dinlediğini orijinal girişe karşı bağımsız olarak kontrol edebilir. Kalan lambdalar 1.0'dan, x0 lambda'lar ise 0.1'den başlar. Bu, "çözülmüş kalıntı" fikrinin yumuşak bir versiyonudur. Standart bir transformatorda kalıntı akış, önceki tüm katman çıkışlarının toplamıdır ve derinlere indikçe giderek daha fazla kirlenir. Her katmana temiz orijinal gömüme erişimi verilmesi, düşük seviyeli bilgileri geri kazanmak için önceki katmanları "geri almayı öğrenmeye" gerek kalmadığı anlamına gelir. Logitler, TANH(Logits/15)*15 ile 15 olarak yumuşak sınırlandırılır; bu da modelin temsiller hâlâ gürültülü olduğu bir dönemde eğitimin başında aşırı özgüvenli olmasını engeller.
Ama dürüst olmak gerekirse dosyanın en ilginç kısmı optimizator. MuonAdamW, parametre grubuna göre farklı güncelleme kuralları gönderen birleşik bir optimizatordur. gömülme (token gömme, değer gömme, gömülü başlıktan çıkarma) ve katman başına skalerler her grup için farklı öğrenme oranlarıyla standart AdamW alır. Dağılım çok çılgın. Gömülü LR 0.6, unembedding LR 0.004, bu 150 kat fark ve kasıtlı. Gömüleme matrisi her bir tokenı görür ve agresif şekilde güncellenmesi gerekir. Gömülenmeden çıkarma matrisi, nihai temsilde doğrusal bir probdur ve kararlılıktan faydalanır. gömü, değer gömme ve gömülenme öğrenme hızları (d_model / 768)^(-0.5) ile ölçeklendirilir; bu da muP'tan ilham alan bir düzeltmedir. Model genişliği değiştikçe, bu öğrenme oranları özellik öğrenme dinamiklerinin ölçekli değişmez kalması için ayarlanır. Katman başına Lambda'lar için skaler öğrenme hızları ayrı ele alınıyor ve bu ölçeklendirmeyi görmüyor.
Transformer'daki 2D ağırlık matrisleri, dikkat projeksiyonları ve MLP ağırlıkları Muon'u alıyor ve işte gerçekten ilginç bir nokta geliyor. Muon gradyanı alır, Nesterov momentumunu uygular, ardından gradyan matrisinin kutup ayrışmasını yaklaşık olarak ölçmek için Newton-Schulz yinelemesi yapar. polar ayrıştırma, bir matris G'yi G = U * S'ye katlar; burada U ortogonal, S ise simetrik pozitif yarı-belirlidir. Muon, gradyana en yakın ortogonal matris olan U'yu hesaplar ve bunu güncelleme yönü olarak kullanır. Newton-Schulz iterasyonu 5 adımdan oluşur. uzun matrisler için (sütunlardan fazla satır var), A = X^T @ X sonra X -> aX + X @ (bA + cA^2). geniş matrisler için, A = X @ X^T sonra X -> aX + (bA + cA^2) @ X. katsayılar ön hesaplamadan sabit kodlanmıştır. Buna "Polar Express" diyorlar. Tüm sistem torch.compile üzerinden tek bir birleşmiş çekirdeğe derlenir.
Bu neden önemli? Çünkü ağırlık matrisleri için Frobenius norm gradyanı (Adam ve SGD'nin kullandığı) geometrik olarak yanlıştır. Bir ağırlık matrisi için "doğru" en dik iniş yönü, güncellemenin birim spektral norma sahip olması kısıtlaması tabi olarak kaybı en aza indiren yöndür, birim Frobenius normu değil. Ortogonal kutup faktörü tam olarak bunu verir. Pratikte bu, Muon'un çok daha büyük ve etkili güncellemeler yapması anlamına gelir çünkü tekil değerleri ölçeklendirmek için adım boyutunu boşa harcamaz. sadece onları döndürüyor. Bu yüzden müon, transformatör ağırlık matrislerinde Adam'dan çok daha hızlı yakınsar. Muon, eleman başına momentum tamponlarını (parametrelerle aynı şekilde, her şekil grubunda üst üste yığılmış) korur, ancak Adam'ın aksine, eleman başına saniye anlarını takip etmez. İkinci an tahminleri, ortogonalizasyondan sonra satır veya sütun başına yapılır, eleman başına değil. İşte burada NorMuon devreye giriyor.
Temel muonun üstünde NorMuon varyans azaltma sistemi var. Ortogonalizasyondan sonra, satır başına (veya en-boy oranına bağlı olarak sütun başı) ikinci moment tahminlerini hesaplar, bunların üstel hareketli ortalamasını korur ve güncellemeyi yeniden ölçeklendirerek her çıktı boyutu kendi uyarlanabilir adım boyutuna sahip olur. Temelde Adam adaptivliği fikri ama ham parametre uzayı yerine ortogonalize koordinat sisteminde uygulanıyor. Ağırlık kaybı da standart değildir. "Temkinli" yani sadece müon güncelleme yönü parametre işaretiyle örtüştüğü parametreleri bozur: mask = (g * parametre) >= 0. Bu, ağırlık düşüşünün güncellemelerin isteklerine karşı parametreleri sıfıra doğru ittiği bilinen arıza modunu önler; bu da eğitimi istikrarsızlaştırabilir.
Takdir ettiğim küçük bir detay: İlk eğitim adımından sonra kod gc.collect(), gc.freeze(), gc.disable() çağırarak Python'un çöp toplayıcısını tamamen kapatıyor. Python'un GC sistemi periyodik olarak çalışıyor ve ~500ms duraklamalara neden oluyor. Toplam bütçeniz 300 saniye ve her adım belki 300ms olduğunda, rastgele bir GC duraklaması neredeyse 2 eğitim adımı kaybettiriyor. Her 5000 adımda bir gc.collect() ile manuel tetiklenirler, bu bir uzlaşma olarak gerçekleşir. Bu, gerçek antrenman koşularını profil olarak profil edip gizemli veri düşüşlerini fark ederek öğrenildiği türden bir şeydir.
İlk 11 adım (0'dan 10'a kadar) da zaman bütçesine dahil edilmiyor. işte torch.compile'in işini yaptığı ve CUDA çekirdeklerinin JIT'lendiği ısınma sürecidir. Bu istisna olmadan, farklı deneyler, o model konfigürasyonu için derlemenin ne kadar sürdüğüne bağlı olarak farklı miktarda "gerçek" eğitim alır. Yine, küçük görünen ama deneylerin karşılaştırılabilir olması için kritik bir tasarım seçimi.
Şimdi uzaklaştır. Gerçek otomatik araştırma döngüsü şudur: Ajan program.md'yi (işini tanımlayan bir markdown dosyası) okur, Train .py'yi değiştirir, commit yapar, 5 dakika çalışır, val_bpb geliştirilip geliştirilmediğini kontrol eder, saklar veya geri alır, tekrar eder. program.md açıkça "ASLA DURMA" der. Ajan insan onu öldürene kadar süresiz koşar. ~Saatte 12 deney, ~100 gece uyurken.
...
En İyiler
Sıralama
Takip Listesi
