Araştırma
OsuGAI’ın Yapımı: Yapay Zekâyla Üretilen osu! standard Beatmap’leri
OsuGAI v1 nasıl osu! standard map’i yapıyor: oynanış temsili, osu!lazer Auto replay’li 118.000 eğitim map’i, dört eğitim turu, sonuçlar ve betanın dürüst sınırları.
OsuGAI, DanceGAI’ın osu!’nun orijinal modu osu! standard için ilk modeli: oyun alanına yayılmış hit circle’lar, slider’lar ve spinner’lar. Bugün osu! mania için ManiaGAI’ın yanında beta olarak yayına girdi. Bu rapor bir map’i nasıl temsil ettiğini, neyden öğrendiğini, nasıl eğitildiğini, neler ölçtüğümüzü — ve aynı açıklıkla, hâlâ neleri yanlış yaptığını anlatıyor.
osu! standard neden osu! mania’dan daha zor?
Bir osu! mania chart’ı sütunlardaki notalardan oluşur: oluşturucu bir notanın ne zaman geleceğine ve 4 ila 9 sütunun hangisine düşeceğine karar verir. osu! standard’da ise her nesnenin 512 × 384’lük bir oyun alanında bir de yeri vardır ve oyuncunun oraya hareket etmesi gerekir. Bu, mania’da olmayan üç problem ekler:
- İki boyutlu hareket. Nesneler arasındaki aralıklar, jump açıları ve flow, bir standard map’ini iyi ya da kötü hissettiren şeylerin çoğunu oluşturur — ve bunlar birkaç sütun arasında bir seçim değil, süreklidir.
- Slider geometrisi. Bir slider; uzunluğu, hızı ve bazen tekrarları olan bir eğridir; müziğe ve etrafındaki nesnelere uymak zorundadır.
- Okunabilirlik. Nesneler sen onlara vurmadan önce belirir, üst üste biner ve stack olur. Bir map kusursuz şekilde zamanlanmış olup yine de okunması imkânsız olabilir.
Temsil: önce oynanış, sonra editör nesneleri
Bir modele osu! standard’ı öğretmenin bariz yolu, ona editörün nesnelerini vermektir — “(x, y)’de bir daire”, “şu kontrol noktalarına sahip bir slider”. Önce bu yaklaşım ailesini denedik. OsuGAI v1 ise bir map’i oynandığı şekliyle tarif eder ve bunu sonradan yeniden nesnelere dönüştürür. Her vuruş (beat) beş token’dır:
- Bir etkileşim token’ı: vuruş boyunca tuşun durumu, vuruş başına 48 hücrede örneklenir — basılı ya da bırakılmış, başka bir şey değil. Bir tap kısa bir basıştır; bir slider ya da spinner uzun bir basıştır. Token, eğitim chart’larındaki en sık görülen 4.096 adet 48 hücrelik pattern’den biridir; bunlar eğitim vuruşlarının %99,87’sini ve ayrılmış (held-out) vuruşların %99,69’unu kapsar.
- Dört uzamsal token: imlecin vuruş içindeki en fazla dört andaki konumu — her basış, her bırakış ve ardından eşit bölünen en uzun basılı tutmalar. Konumlar 4 piksellik bir ızgara üzerindedir (128 × 96 hücre); dolayısıyla en büyük yuvarlama hatası 2,83 pikseldir; kullanılmayan bir slot boş kalır.
Bu, vuruş başına beş slot ve 16.385 token’lık tek bir kelime dağarcığı demek (4.096 tuş pattern’i artı 12.289 konum). Uzamsal token’ların tarif ettiği anlar yalnızca tuş pattern’inden türetilir; yani model nesne türlerini hiç öğrenmek zorunda kalmaz.
Amaçlanan oynanışı neden editörün temsilinden ayırıyoruz? İki nedeni var ve ikisi de herhangi bir şeyi eğitmeden önce insan replay’leri üzerinde ölçüldü. Birincisi, editörün seçimleri oyunda büyük ölçüde görünmez: yalnızca imleçten bakıldığında kısa bir slider bir daireden ancak %43–45 oranında ayırt edilebiliyordu — yani nesne düzeyindeki ayrıntılar modelin tahmin etmesi gereken bir şey değil, decoder’ın verebileceği kararlardır. İkincisi, oynanış tarifi önemli olan neredeyse hiçbir şeyi kaybetmez: idealleştirilmiş bir tuş durumu artı bir insan imleç yolundan yeniden kurulan map’ler, başka oyuncuların replay’leri tarafından, nesneleri bilen bir tariften yeniden kurulan map’ler kadar sık vuruldu (%97,9’a karşı %98,0). Bunun yerine oyuncuların gerçek tuş durumlarını kullanmak bu oranı %78,5’e düşürdü — gerçek basışlar öğrenmek için fazla gürültülü; tuş token’ının idealleştirilmiş olmasının nedeni bu.
Eğitim verisi
| Değer | |
|---|---|
| İşlenen chart’lar | 117.918 |
| Şarkılar | 25.928 |
| Eğitim pencereleri | 11.85 milyon |
| Eğitim / doğrulama / ayrılmış chart’lar | 117.474 / 362 / 82 |
| Star rating, 10. / 50. / 90. yüzdelik | 1,98 / 3,69 / 5,86 |
Korpus, ranked, approved ve loved osu! standard map’lerinden oluşuyor — 117.920 chart’ın 117.918’i başarıyla dönüştürüldü. Doğrulama ve ayrılmış kümeler şarkı bazında ayrık: içlerindeki hiçbir şarkı eğitimde yer almıyor. ManiaGAI’da olduğu gibi her chart’ın timing’i önce kendi timing algılayıcımızın ızgarasına taşındı; böylece model, üretim yaparken alacağı türden bir ızgara üzerinde eğitiliyor. Hiçbir chart zor olduğu için elenmedi.
İmleç konumları nereden geliyor: osu!lazer’ın Auto replay’i
Bir map dosyası nesnelerin nerede olduğunu söyler, imlecin aralarında nasıl hareket ettiğini değil. Uzamsal token’ları osu!lazer’ın yerleşik kusursuz oyuncusu Auto’nun replay’inden türetiyoruz. Onun imleç mantığını Python’a taşıdık ve 20 map üzerinde gerçek oyunla karşılaştırdık: 264.716 kare, aynı kare sayıları, sıfır tuş ya da stacking uyuşmazlığı, ortalama 0,014 piksel fark. Auto imleç yollarından geri çözülen map’ler, 91 map’lik bir benchmark’ta başka oyuncuların insan replay’leri tarafından %99,7 oranında vuruldu.
Dürüst bir uyarı: Auto bir insan değil. Her slider’ın yolunu birebir takip eder; bu yüzden imleci “konum olarak yazılmış orijinal slider geometrisine” yakındır — orijinal slider yollarının %72’si Auto’dan 4 piksel içinde geri okunabiliyor, tek bir insan replay’inden ise %1’i. Dolayısıyla OsuGAI v1, insanların gerçekte nasıl hareket ettiğini değil, bir mapper’ın nesneleri nereye koyduğunu öğreniyor.
Mimari
- Müzik
- Timing ızgarası
- Planner
- Noter
- Decoder
- .osu / .osz
OsuGAI, ManiaGAI ile aynı motorda çalışıyor (Planner ve Noter yazısında anlatıldığı gibi); moda özgü parçalar değiştirildi:
- Planner (yeniden kullanıldı). Önceki osu! standard çalışmamızdan değiştirilmeden alınan küçük bir difüzyon modeli, henüz hiçbir nesne yokken şarkının her bölümünü planlar: yıldız seviyesini ve bir stil tarifini — slider payı, açı karakteri, aralık düzensizliği, stream aralığı ve ritim.
- Noter (yeni). Yaklaşık 64,1 milyon parametreli MaskGIT tarzı bir transformer, planı, sesi ve zorluk ayarlarını (circle size, approach rate, overall difficulty ve slider velocity) izleyerek her vuruşun beş token’ını doldurur. Eğitimi, birebir konum doğruluğunun yanı sıra hedefe 16 piksel içinde düşen bir konuma da kısmi puan verir.
- Decoder (kural tabanlı, tekrarları tanıyan). Oynanışı yeniden nesnelere dönüştürür: bir basış hit circle olur; uzun bir basış, imleç en az 1,5 vuruş boyunca merkezin etrafında dönüyorsa spinner, aksi hâlde slider olur — slider topunu tahmin edilen yola yakın tutan en basit çizgi, yay ya da eğri. Net ve eşit zamanlanmış geri dönüşler bir repeat slider olur. New combo’lar sabit bir kurala göre konur.
Eğitim: dört tur
Noter, önceki osu! standard modelimizden warm-start edildi ve süre sınırlı dört epoch’luk (her biri yaklaşık 46 dakika) dört turda eğitildi — tek bir RTX 4070 Ti SUPER (16 GB) üzerinde toplam yaklaşık 14 saat, en fazla yaklaşık 6 GB GPU belleğiyle. Her turdan sonra bir değerlendirme kümesi ürettik: 8 ayrılmış şarkı × 22 ayar = 176 map.
| Tur | Doğrulama kaybı | Geçerli map’ler | 2 / 4 / 6 hedefleri için ölçülen ★ |
|---|---|---|---|
| 1 | 3,1389 | 176/176 | 2,39 / 4,76 / 7,38 |
| 2 | 3,0175 | 176/176 | 2,24 / 4,64 / 7,28 |
| 3 | 2,9842 | 176/176 | 2,32 / 4,64 / 7,04 |
| 4 (yayınlanan) | 2,9570 | 176/176 | 2,40 / 4,62 / 7,22 |
- Doğrulama kaybı dört tur boyunca 3,1389’dan 2,9570’e düştü.
- Yapısal geçerlilik: her turda 176 değerlendirme map’inin tamamı geçerli osu! standard map’leriydi — kurallara uygun nesneler, hiç slot ihlali yok.
- Zorluk ve stil tepki veriyor: ölçülen star rating 8 şarkının 8’inde hedefle birlikte yükseldi ve dört stil ekseninin her biri map’i 8 şarkının 8’inde doğru yönde değiştirdi — ancak planı bölüm bölüm takip etmek hâlâ zayıf.
- Deterministik: aynı şarkı aynı seed ile bayt bayt aynı .osu dosyalarını verir.
Hız. O geliştirme GPU’sunda Flower Dance’in (4:22) sekiz zorluğu, süresi ölçülen aşamalardan yaklaşık 16–18 saniyede geçti — ses hazırlığı, timing, ses özellikleri, planlama ve yaklaşık 11–12 saniyelik nota üretimi; çözümleme ve dosyaların yazılması CPU’da map başına ortalama yaklaşık 0,6 saniye ekliyor. Bu yerel bir benchmark: canlı ortam farklı bir bulut GPU’sunda çalışıyor ve OsuGAI’ın canlı ortamdaki gecikmesini henüz ölçmedik.
Sınırlamalar
Geçerli bir map, eğlenceli bir map ile aynı şey değil ve yukarıdaki sayıların hiçbiri OsuGAI’ın map’lerinin rekabetçi oynamak için iyi olduğunu söylemiyor. Yanlış olduğunu bildiklerimiz:
- Zorluk aşımı. Map’ler hedeften daha zor çıkıyor, üst uçta ise çok daha zor: Flower Dance’te 7,43, 8,71 ve 10 hedefleri sırasıyla 9,28, 13,49 ve 13,99 yıldız ölçüldü. Bu yüzden site yalnızca ★1–★6 hedefleri sunuyor ve her zaman ölçülen dereceyi gösteriyor.
- Kendi üzerinden geçen slider’lar. Son turda üretilen slider’ların %3,3’ü kendisiyle kesişiyor (ilk turdan sonra %2,4), orijinal map’lerde ise bu oran %0,1.
- Slider geometrisi kusurları. Bazı slider’lar hız sınırına takılıyor (son turda %2,8) ve repeat slider’lar insan map’lerine göre daha seyrek (slider’ların %6,1’i, insan map’lerinde %21).
- Auto denetimi. İmleç yolları insanların değil Auto’nun: model insan hareketini değil, nesne yerleşimini öğreniyor.
- Taşma ve kelime dağarcığı yedeği. Eğitim vuruşlarının %0,58’i dörtten fazla konum gerektiriyor; yalnızca ilk dördü tutuluyor. Vuruşların %0,13’ü 4.096 tuş pattern’inin dışında kalıyor ve en yakın olanı kullanıyor. En çok çok yoğun map’ler etkileniyor.
- Henüz geniş çaplı insan playtest’i yok. Şimdiye kadarki her kontrol otomatik ya da kaydedilmiş replay’lere dayalı. Bu iş betayla başlıyor.
Sırada ne var?
- Daha iyi zorluk kalibrasyonu — güvenebileceğin hedefler ve tam yıldız aralığının geri dönüşü.
- Daha temiz slider geometrisi — daha az kendi üzerinden geçme ve sınırlanmış hız, daha doğal tekrarlar.
- İnsan oynanış verisi — yalnızca nesnelerin nerede olduğunu değil, insanların nasıl hareket ettiğini öğrenmek.
- Daha güçlü stil kontrolü — map’in yalnızca ortalamada değil, bölüm bölüm takip ettiği çubuklar.
- Daha fazla osu! modu — yol haritasında sırada osu! taiko ve osu! catch var.
Bu modda yeni misin? osu! standard nedir? oyunun kendisini anlatıyor; teknoloji sayfası ise OsuGAI’ın ManiaGAI ile paylaştığı motoru ele alıyor.