DOOM'u Bir Transformer'a Dönüştürdüm: Oyun Haritaları İçinde Sinir Ağları Çalıştırmak
Kaynak: Hacker News
İçindekiler 3 başlık
Klasik video oyunu DOOM'un neredeyse her cihazda çalışabildiğini biliyoruz; ancak doomformer projesi, bu durumu tersine çevirerek tam sayı tabanlı bir sinir ağını doğrudan bir DOOM haritasına derliyor. Harita içerisindeki "voodoo bebekleri" (voodoo dolls) aritmetik işlemleri gerçekleştirirken, ışık seviyeleri ve düzlem yükseklikleri sayısal değerleri tutuyor. Üstelik hesaplanan her bir değer, sıfır toleransla (tolerance 0) NumPy referansıyla karşılaştırılarak doğrulanıyor.
Yazılım geliştirme ve mühendislik öğrenimi açısından bu proje, derin öğrenme modellerinin aslında temel aritmetik ve durum makinelerinden (state machines) ibaret olduğunu gösteren harika bir soyutlama örneğidir. Projede öne çıkan temel metrikler şunlardır:
- 10.000 / 10.000: MNIST test rakamlarının tamamında NumPy ile birebir (exact) aynı tam sayı sonuçları.
- 1.355: Tek bir MNIST haritasında hesaplama yapan voodoo bebeği sayısı.
- 0: 20.000 rastgele (fuzzed) sinir ağı testinde ortaya çıkan uyuşmazlık sayısı.
- 4: Müze haritasını hatasız çalıştırabilen diğer DOOM motoru sayısı.
Hızlı Başlangıç (Quick start)#
Projeyi deneyimlemek için Python 3.11+ üzerinde Linux veya macOS ortamında hızlıca kurulum yapabilirsiniz:
pip install git+https://github.com/mottopanikeiku/doomformerkomutuyla paketi kurun.doomformer hellokomutuyla 2 saniye içinde küçük bir MLP ağını çalıştırıp tüm değerleri doğrulayın.doomformer draw --digit 7ile oyun içindeki askerin 7 rakamını çizmesini ve bölümün bunu okumasını (15 saniye) izleyin.doomformer doctorkomutuyla kurulumunuzu kontrol edin (eksikse git, cmake ve C derleyicisi kullanarak ACS derleyicisi olan ACC'yi derler).
Pratik Çıkarım: Herhangi bir kurulum yapmadan doğrudan tarayıcı üzerinden Colab not defterini kullanarak bir rakam çizebilir ve DOOM'un bunu okumasını sağlayabilirsiniz. Bu yaklaşım, karmaşık derleme süreçlerini son kullanıcıdan soyutlamanın önemini gösterir.
Bir Rakam Çizin, DOOM Okusun (Walk a digit, DOOM reads it)#
Oyun içindeki karakter ateş (FIRE) tuşuna basılı tutarak zemini boyar ve ardından READ tuşuna basar. Haritadaki 1.355 voodoo bebeği MNIST ağını çalıştırır ve kazanan rakamın bebeği bir çizgiyi geçerek 7 segmentli ekranda sonucu yakar.
- Birebir Doğrulama (EXACT): DOOM tarafından hesaplanan 248 değerin tamamı Python tarafından geri okunur ve NumPy tam sayı referansıyla sıfır toleransla eşleşir (273 oyun tiki, gerçek zamanlı 8 saniye sürer).
--digitparametresiyle tuşlara Python basar, parametresiz ise çizimi kendiniz yürüyerek yaparsınız. - Doğruluk ve Kesinlik Farkı: Burada "EXACT" ifadesi, DOOM'un tam sayı ağıyla tamamen aynı sayıları ürettiği anlamına gelir; tahminin her zaman doğru olduğu anlamına gelmez.
- Test Sonuçları: İlk 100 MNIST test rakamında 99 doğru (100 exact), 1.000 örneklemde 966 doğru (1.000 exact) ve tüm 10.000 test rakamında %97,16 (9.716 doğru, 10.000 exact) başarı elde edilmiştir (kayan noktalı modelin skoru %97,58'dir).
Pratik Çıkarım: Model kuantalama (quantization) ve deterministik test süreçlerinde, referans model (NumPy) ile hedef çalışma ortamı (DOOM motoru) arasında sıfır toleranslı doğrulama yapmak, sistem güvenilirliğini kanıtlamanın en sağlam yoludur.
Müze: Tek Bir Bağlantıyı Yeniden Kablolamak (The museum: rewire one connection)#
doomformer museum build komutu, Python'a ihtiyaç duymadan doğrudan GZDoom içinde oynayabileceğiniz bir harita üretir:
- Bir rakamı yakmak için zemindeki yedi pedin üzerine basın ve READ tuşuna dokunun; 136 voodoo bebeği küçük bir ağı çalıştırarak cevabı aydınlatır.
- MUTATE tuşuna bastığınızda, bölüm çalışırken tek bir sinir ağı bağlantısını yeniden kablolar (rewire).
- Aynı "7" rakamı artık "1" olarak okunur ve bir bebeğin kendi kapısında durmasını izleyerek ağırlık değişiminin (weight mutation) ağ çıktısını nasıl değiştirdiğini görsel olarak gözlemleyebilirsiniz (
doomformer museum verify).
Pratik Çıkarım: Yapay zeka modellerini "kara kutu" olmaktan çıkarıp, tek bir bağlantının veya ağırlığın sistem davranışını nasıl değiştirdiğini interaktif bir ortamda görselleştirmek, sinir ağlarının iç işleyişini anlamak için eşsiz bir hata ayıklama (debugging) ve eğitim yöntemidir.
Kaynak ve atıf
Bu yazı, Hacker News üzerinde yayımlanan içerikten yararlanılarak Edumints tarafından yapay zekâ desteğiyle Türkçe hazırlandı. Ayrıntılar ve yazarların kendi anlatımı için orijinaline bakabilirsin:
- github.com/mottopanikeiku/doomformer