İçeriğe geç
edumintsBlog
Yazılım3 dk okuma

DOOM'u Bir Transformer'a Dönüştürdüm: Oyun Haritaları İçinde Sinir Ağları Çalıştırmak

Kaynak: Hacker News

Paylaş
YazılımEdumints Blog
İç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/doomformer komutuyla paketi kurun.
  • doomformer hello komutuyla 2 saniye içinde küçük bir MLP ağını çalıştırıp tüm değerleri doğrulayın.
  • doomformer draw --digit 7 ile oyun içindeki askerin 7 rakamını çizmesini ve bölümün bunu okumasını (15 saniye) izleyin.
  • doomformer doctor komutuyla 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). --digit parametresiyle 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