1 puan yazan GN⁺ 2023-12-08 | 1 yorum | WhatsApp'ta paylaş
  • Magic: The Gathering’de draft kart seçimini görev olarak alıp, LLM eğitim korpusunda bulunmayabilecek güncel kart ortamında fine-tuning’in muhakeme performansını ne kadar artırdığını test ediyor
  • 17lands’in draft kayıtlarını prompt’a dönüştürüp, kazanma oranı yüksek oyuncuların seçimlerini doğru sinyali olarak kullanarak modelin mevcut pakete ve önceki kart havuzuna bakıp kart seçmesini sağlıyor
  • Fine-tuning uygulanmış 7B parametreli model, bu görevde GPT-4’ü açık biçimde geride bıraktı ve insan ya da deney yapan kişi seviyesine yakın performans gösterdi; fine-tuned GPT-3.5 daha iyi olabilir ama maliyet yükü çok daha yüksek
  • Veri formatı ve prompt biçimini, uzun eğitim döngüleri nedeniyle hızlıca doğrulamak zordu; yaklaşık 40 saatlik deneyden sonra bile en iyi prompt biçimi konusunda kesin bir sonuca varılamadı
  • Pratikte önce bir değerlendirme seti oluşturmak, eğitim script’ini sıfırdan yazmak yerine axolotl gibi araçlar kullanmak daha iyi; küçük OSS LLM’ler bile GPU belleği ve depolama açısından hafife alınacak gibi değil

Deney görevi: Magic draft

  • Deney, LLM’in dağılım dışı veride ne ölçüde muhakeme yapabildiğini görmek için Magic: The Gathering draft’ını kullanıyor
  • Magic: The Gathering, yaratık ve büyü kartlarıyla rakibe karşı oynanan stratejik bir koleksiyon kart oyunudur; draft ise rastgele kart paketlerinden sırayla kart seçip deste oluşturma yöntemidir
  • Draft, iki açıdan deney için uygundu
    • Muhakeme: İyi bir seçim için o ana kadar seçilen kartlarla mevcut paketteki kartları birlikte anlamak gerekiyor
    • Dağılım dışı veri: Yeni Magic kartları yılda 4 ila 6 kez çıkıyor ve en yeni kartlar LLM eğitim korpusunda yer almıyor olabilir
  • Veri olarak 17lands draft izleme kayıtları kullanıldı
    • 17lands, dijital Magic istemcisindeki draft verilerini izleyen bir hizmettir
    • Kazanma oranına göre üst düzey oyuncuların seçimlerinden “doğruya” yakın bir sinyal üretilebiliyor
    • Magic oyuncuları arasında bile doğru seçim konusunda çok tartışma olduğundan bu sinyal tamamen net değil, ama yeni bir görevin öğrenilip öğrenilmediğini test etmek için yeterli

Veri kümesi yapısı ve prompt formatı

  • 17lands draft verisi kabaca şu bilgileri içeren büyük bir CSV dosyasıdır
    • Mevcut pakette seçilebilecek kartlar
    • Draft yapan kişinin o ana kadar seçtiği kartlar
    • O paketten gerçekte seçilen kart
  • Bunu dil modeli fine-tuning’ine uygun hale getirmek için veri metinsel diyalog formatına dönüştürüldü
    • system mesajı modeli “DraftGPT” olarak tanımlıyor ve draft pick istendiğinde önce kart adını yanıtlamasını söylüyor
    • user mesajı mevcut paket numarası ve pick numarası, o ana kadarki kart havuzu, son 5 pakette görülen renklere göre kart sayısı ve mevcut paketteki kart açıklamalarını içeriyor
    • assistant mesajı yalnızca seçilen kart adını veriyor
  • Veri dönüşümü örnekleri 17lands verisini LLM prompt’una dönüştüren örnek ve ChatML biçimindeki tam draft prompt’u olarak sunuluyor
  • En zor kısım, istenen sonucu üretecek şekilde veriyi formatlamaktı
    • Fine-tuning’de prompt değişikliklerini denemek için genelde saatler süren eğitim işleri çalıştırmak gerekiyor
    • Bu yüzden deney döngüsü, tipik prompt engineering’e kıyasla 100 kat daha yavaş hissettirdi
  • Yaklaşık 5 farklı prompt biçimi, kart başına ayrıntı miktarı, son birkaç pick’in bağlam olarak eklenmesi ve yeni kart bilgisini ezberletmeye yönelik “kart bilgisi” eğitim satırlarının eklenmesi gibi seçenekler denendi
  • Yaklaşık 40 saatlik deneyin ardından bile bu görev için en iyi prompt biçiminin ne olduğu kesinleşmedi

Fine-tuning çalışma ortamı

  • GPU, Runpod üzerinden saatlik kiralandı
    • Kullanılan GPU, RTX 4090, 24GB VRAM modeliydi
    • Maliyet yaklaşık $0.7/saat idi
  • Başta HuggingFace transformers ve PEFT ile eğitim script’ini doğrudan yazmak istendi; sınırlı GPU koşulları nedeniyle QLoRA seçildi
  • Script’i doğrudan yazma yaklaşımı bol deneme-yanılma gerektirdi
    • FlashAttention gibi bilince kolay olan optimizasyonlardan, LoRA parametreleri gibi makale okumadan anlaşılması zor seçeneklere kadar pek çok nokta vardı
    • Bunların hepsi tek tek çözülebilir ama doğrudan kendin çözmeye çalışmak çok zaman alıyor
  • Sonunda axolotl kullanıldı
    • Pek çok optimizasyonu varsayılan olarak içerdiği için çalıştırmak daha kolaydı
    • Dokümantasyonu da iyiydi ve LLM fine-tuning’e başlayan çoğu kişi için uygun bir başlangıç noktası olarak değerlendirildi

Model boyutu ve maliyet

  • “Küçük” OSS LLM’ler bile geçmiş ölçütlere göre çok büyük
    • 2019 civarında sık eğitilen BERT yaklaşık 110 milyon parametreydi
    • 7B model bunun yaklaşık 70 katı büyüklüğünde
  • 7B model pratik işletim açısından da yük getiriyor
    • Ağırlıklar yaklaşık 16GB olduğundan depolama alanı sorun olabiliyor
    • QLoRA gibi yöntemler kullanılsa bile GPU belleği hâlâ zorlayıcı
  • GPT-3.5 fine-tuning daha iyi sonuç verebilir gibi görünse de maliyeti yüksekti
    • Mistral’ı bare metal üzerinde fine-tuning yapmaktan yaklaşık 100 kat daha pahalı
    • Çıkarım tarafında da premium fiyatlandırma var
    • Mistral-7B’nin en büyük eğitim çalışmasına benzer bir GPT-3.5 fine-tuning işinin yaklaşık $500 tutacağı hesaplandı

Değerlendirme yöntemi ve sonuçlar

  • Deneyden önce iyi bir değerlendirme seti hazırlamak önemli
    • Bu görevde eğitim verisinden bazı tam draft’lar holdout olarak ayrıldı ve modelin insanlarla aynı kartları seçip seçmediğine bakıldı
    • Değerlendirme seti olduğu için fine-tuning sonuçlarını yorumlamak daha kolay oldu
  • Kart seçim doğruluğunu tanımlamak görece kolaydı, ama şu ölçütler daha belirsizdi
    • Model farklı bir seçim yaptığında bu seçimin gerekçelendirilebilir olması gerekiyor
    • Modelin neden o kartı seçtiğini makul biçimde açıklayabilmesi tercih edilir
  • Bu belirsiz ölçütler, çeşitli örnekleri tek tek inceleyen gözle değerlendirme ile kontrol edildi ve süreç yavaştı
  • GPT-4, fine-tuning uygulanmış küçük modele kıyasla daha az tuhaf seçim yapıyor ve seçimlerini gerekçelendirmede daha iyi
  • Fine-tuning uygulanmış 7B model, bu kart seçme görevinde doğruluk ve maliyet açısından GPT-4 ile in-context learning’i rahatça geçti
  • Bir deneyde model bir kart seti üzerinde fine-tuning edildikten sonra görmediği başka bir kart setinde değerlendirildi
    • Modelin yalnızca iyi kartları ezberlemediği, draft kavramını bir ölçüde genelleştirdiği görüldü

Magic Copilot ve draft botları

  • Fine-tuning uygulanmış draft pick modeli, Magic Arena log’larına bağlandı ve hızlı bir Electron uygulamasıyla “Magic Copilot” yapılarak birkaç draft’ta kullanıldı
  • Kart seçimlerini fine-tuned model üretiyor, açıklamaları ise GPT-4 sağlıyordu
    • Çoğunlukla iyi çalıştı ama bazen GPT-4, fine-tuned modelin seçimine katılmayıp anında itiraz ediyordu
  • 8 draft AI birbirine bağlanarak botların kendi aralarında simülasyon draft’ı yapması da denendi
    • Botlar yalnızca kendi aralarında kart paslaştığında tek renkli destelere güçlü bir eğilim gösterdi
    • İnsanlar farklı seçimler kattığında çok daha normal destelere yakınsama eğilimi görüldü
  • Genel olarak bu draft AI, şu anda var olanlar arasında daha güçlü ve daha insansı bir draft AI’ya yakın görünüyordu
  • Magic Arena’nın quick draft botlarıyla karşılaştırıldığında, heuristik botlardan ziyade yüksek kaliteli insan draftçılara daha yakın seçimler yapıyordu

1 yorum

 
GN⁺ 2023-12-08
Hacker News görüşleri
  • Bu yazının, kavramsal olarak basit görünen fikirleri bile LLM fine-tuning ile hayata geçirmenin ne kadar zor olduğunu iyi göstermesi hoşuma gitti
    Oldukça iyi bir başlangıç veri seti ve temel model olsa bile kolay bir iş olmamış gibi görünüyor. Bu tür modeller, doğal ve kesin bir doğru cevabı olmayan işler için uygun görünüyor. Örneğin verilen seçim listesinde kusursuz kartı bulmak kombinatoryal olarak zor olabilir, ama iyi bir kartı seçmek mümkün ve LLM'ler de insan seviyesine yakın performansa ulaşabilir. Şu anda LLM'leri fine-tuning ile çözebildiğimiz problem sınıfı burada ortaya çıkıyor gibi

    • Bu, benim deneyimimle de örtüşüyor. Yüksek riskli kararlar söz konusu olduğunda neredeyse hiç harika yanıt vermiyorlar, ama düşük riskli kararlarda yeterince iyi cevapları gayet iyi veriyorlar
      Mesela bu ay arkadaşlarım ve çocuklar için hediye bulmama yardım alıyorum. Sorunu çözmek için en iyi seçeneğe ihtiyacım yok; iyi bir seçenek yeterli
    • Doğru, ama bunun tek bir kişinin yaptığı bir çalışma olduğunu da göz ardı etmemek gerekir
    • LLM'lerin iyi olduğu problemleri belirli bir karmaşıklık katmanı ile tanımlayıp tanımlayamayacağımızı merak ediyorum
  • Bu günlük hayatta en devrimsel değişim olmayabilir ama Magic: The Gathering gibi oyunlarda ilginç oyun tarzlarına sahip bot rakiplere karşı oynamayı gerçekten dört gözle bekliyorum
    Araştırma-geliştirme ekibinin, farklı oyun seviyelerinde yeni mekanikler üretme ve test etme becerisini ciddi biçimde geliştirebileceği net bir kullanım alanı gibi görünüyor

    • OpenAI'nin Dota 2 deneyi çok sayıda ilginç davranış ortaya çıkarmıştı ve profesyoneller de etkilenmişti
  • “Bu verilerle hizmet içindeki en iyi oyuncuların yaptığı draft pick'lere bakıp doğru cevabı çıkarıyor” kısmında, https://www.17lands.com/leaderboard üzerindeki draft pick'lere bakıp galibiyet oranına göre sıralama yapıldığı mı kastediliyor?
    Normalde Match Wins ya da Trophies seçilmesi gerekmez miydi diye düşünüyorum. Aksi halde hizmet içindeki en iyi oyuncuları ölçmüyor, seçimlerinin çoğu çok iyi olan draft'ları, yani şanslı oyuncuları öğrenmiş oluyorsunuz. Bunun etkisi doğrulama ve testte de aynı şekilde görünür.
    LLM baseline'ı yerine, 17lands verisinden kart bazında diğer kartlara karşı “Elo” benzeri bir puan hesaplayan bir baseline ile karşılaştırmak gerekmez mi? İki renk belirlenmeden önce puanı en yüksek kartı önersin, renkler belirlendikten sonra da o renklerde ya da araziler arasında puanı en yüksek kartı seçsin.
    LLM'nin kural bilgisini bir ölçüde edinmesi mümkün olabilir, ama daha önce görmediği kartlarda kart nadirliği, maliyet ve “büyüklük” gibi sinyalleri daha fazla yakalıyor gibi görünüyor. Draft “doğruluğu” da düşük görünüyor ve bunun kastedilen anlam olup olmadığından emin değilim. Yüksek galibiyet oranlı seçimlerde olduğu gibi hepsinin genel olarak iyi seçimler olduğu bir durumda, sadece ham verideki oyuncudan farklı bir seçim yapmış olması kastediliyorsa, aslında iyi seçimler arasından seçmek daha zor görünüyor

    • Yazıda net ifade edilmemiş sadece; 17lands'te %62'nin üzerinde maç kazanma oranına sahip ve yüksek derecelerde draft yapan oyuncular filtreleniyor
      Eşik Diamond ve üzeri. Ancak bu oyuncuların kötü sonuçlanan draft'ları da dahil hepsine bakılıyor.
      Burada doğruluk, verilen pakette iyi oyunculardan biriyle aynı seçimi yapıp yapmadığı anlamına geliyor. Elbette öznel, yani kusursuz bir metrik değil, ama üst seviye drafters'ı taklit etme becerisini görmek için fena değil
  • Prompt kaybını 0 yapmak yerine Axolotl'da ağırlıklı kayıp kullanmayı da denediniz mi diye merak ediyorum
    Bir ara Microsoft'un GPT-3 belgelerinde, yanıtın kısa olduğu durumlarda, buradaki “Cut in.” örneğinde olduğu gibi, bu yaklaşımın avantajlı olduğundan bahsediliyordu sanırım. Fine-tuning öncesinde subreddit ya da forumlarla domain adaptation yapmak da yardımcı olabilir

    • Bu gerçekten çok iyi bir fikir ve aklıma gelmemişti. Denenecekler listesine ekleyeceğim
      Domain adaptation'ı da düşünüyordum; ayrıca draft YouTube videolarını yazıya dökmeyi de değerlendiriyorum. Ne kadar yardımcı olacağını gerçekten merak ediyorum
  • Yazarı doğru anladıysam, her seçim anında ajana verilen prompt'ta şu ana kadarki kart havuzundan yalnızca kart adları yer alıyor, teslim alınan paketteki kartlar içinse tam metin bulunuyor gibi görünüyor
    Muhtemelen bağlam penceresi boyutu nedeniyle seçimler arasında bağlam korunamıyor.
    Eğer durum buysa ve bu setlerin botun eğitim cutoff tarihinden sonraya ait olduğu varsayımı doğruysa, iyi bir drafter olması tamamen şans değil mi? Botun önceki pick'lerle hangi kartların iyi gittiğini, şimdiye kadar hangi sinyalleri gönderip aldığını vb. bilmesinin kelimenin tam anlamıyla bir yolu yok. En iyi insan oyuncu bile, örnek prompt'taki “Gadwick's First Duel -- {1}{U} (uncommon)” ifadesini gördüğünde, kartı daha önce hiç görmediyse onun neyle iyi çalıştığını bilemez.
    Sonuçta önceki pick'lerle renk çakışan genel olarak iyi draft kartlarını seçecek; bu da mevcut pick-order tabanlı sezgisellerin zaten hep yaptığı şey

    • Tam olarak öyle değil. Modelin kartların tam metnini öğrenmesinin birkaç yolu var
      Model, kartın tam metnini, türünü ve CMC gibi bilgileri tamamladığı kart quiz tamamlama verisiyle de eğitiliyor. Ayrıca paketteki kartlar için de next-token completion öğrenmesi gerektiğinden, draft pick üretirken kartların tam metnini tahmin etmeyi de öğreniyor. Bir araya gelince bot yeni kartların metnini oldukça kapsamlı biçimde öğreniyor
  • Görmediyseniz https://news.ycombinator.com/item?id=38525978 de bu kitle için ilginç olabilir
    “I hacked Magic the Gathering: Arena for a 100% win rate” yazısı; sırf araştırmacının, MTGA'nın karar verici yapay zekası Sparky'nin dışarıdan şüphelenildiği kadar aptalca karmaşık görünmediğini keşfetmiş olması bile okumaya değer kılıyor

    • Sparky, Arena AI ama hiçbir zaman iyi bir Arena AI olarak görülmedi
      Daha çok oyuna yeni başlayan ve kuralları bilmeyen oyuncuların aptal bir bilgisayara karşı oynama deneyimi yaşaması ya da kurdukları destenin nasıl çekildiğini ve nasıl kombo yaptığını görmek için “goldfish'e karşı oynama”nın bilgisayar versiyonu gibi. Satrançtaki CPU gibi bir şey değil
  • Draft’ın LLM ile temsil edilebilmesi çok ilginç
    Benim gördüğüm en iyi performanslı draft yapay zekaları bir şekilde temsil öğrenmesini kullanıyordu. Referans: https://arxiv.org/pdf/2107.04438.pdf

    • Yanlış okumadıysam, bağlantı verilen makale her kartı temsil etmek için öğrenilmiş embedding’ler yerine one-hot encoding kullanıyor gibi görünüyor
      “Temsil öğrenmesi” derken başka bir şeyi kastettiysen ben yanlış anlamış olabilirim
    • Bunu görmemiştim, gerçekten çok iyi. Veri miktarını düşününce böyle bir yaklaşımın LLM’den daha iyi olabileceği bile düşünülebilir, ama sonuçlar ilginç
      Yine de LLM temsilinde ilginç taraflar var. Örneğin sistem prompt’u ile bota tercihler veya kişilik verebilmek oldukça eğlenceli
    • Alan o kadar hızlı ilerliyor ki takip etmek gerçekten zor
  • Her kartı bir token olarak ele alıp, draft durumunu girdi olarak vererek tahmin edilen token’ın seçilecek kart olmasını sağlasak daha küçük bir model kullanmak veya daha iyi sonuçlar almak mümkün olur mu diye merak ediyorum
    Muhtemelen özel bir tokenizer ile sıfırdan eğitmek gerekirdi

    • Daha önce Reddit tarzı bir veri kümesine özel token’lar eklemeyi denemiştim. Biçim <|post_author|>username<|post_title|>title here... şeklindeydi
      Ortaya çıkan model, her şeyi düz metin olarak biçimlendirdiğim duruma göre çok daha kötüydü. MPT-30B, 15 özel token, 300 milyon eğitim token’ı ve full fine-tuning koşulları vardı.
      Ben hata yapmış olabilirim ama açık kaynak fine-tuning tarafında da çok sayıda token’ın başarıyla eklendiği pek bir örnek görmedim
    • Benim de oldukça benzer bir düşüncem vardı. Böyle bir yaklaşımla temel bir sinir ağı mimarisiyle bile oldukça iyi iş çıkarılabilir ve LLM gerekmeyebilir
      “Daha önce hiç görülmemiş kartlar” için çalışmayacaktır ve hata yaptığında tamamen saçma seçimler yapabilir, ama doğruluğun %90’a kadar çıkabileceğini düşünüyorum
  • Mistral başlangıç noktası olmadan, draft için bir sinir ağı eğitmekle karşılaştırmak ilginç olurdu. Hem epoch hem de maliyet açısından görmek isterdim
    LLM unsurunun neden ilgili olduğu net değil. İnternette yeterince deck listesi veya mock draft bulunması etkili olmuş olabilir ya da belki de “LLM fine-tuning” tarafındaki altyapı “sinir ağı kurma”ya göre daha iyi durumdadır. Bunu kolaylaştıracak nnfiddle gibi bir şeye ihtiyaç olabilir

    • LLM’nin avantajı, checkpoint’in zaten temelde pek çok şeyi “anlıyor” olması
      Fine-tuning görece ucuz ve sadece veriyi içeri vererek bunun gibi işleri oldukça iyi yapar hale getirebilirsiniz. Temel checkpoint’i üretmek çok fazla hesaplama gerektirir ama “bilginin” büyük kısmı zaten onun içindedir.
      Sıfırdan bir sinir ağı kuracaksanız önce kartları girdiye nasıl eşleyeceğinizi çözmeniz gerekir. MTG hakkında çok bilgim yok ama çoğu takas kartı oyununda metin açıklamaları ve karmaşık etkiler var. Metni mantığa eşlemek, LLM’lerin gerçekten iyi yaptığı bir iş; aksi halde sıfırdan başlarken makul davranışlar ortaya çıkana kadar yine epey hesaplama gerekir.
      Çoğu yazılım geliştirici için de bu taraf daha kolay. Fine-tuning genelde metinleri toplayıp bir fine-tuning script’ine vermekten ibaret. Lineer cebirin ya da “convolution”ın ne olduğunu bilmeden de yapılabilir
    • Mistral olmadan model ilk kez gördüğü kartlara nasıl genelleme yapacak?
      “Mistral olmadan draft için sinir ağı eğitmek” derken giriş katmanının paketteki kartların bitmap vektörleri olduğu bir yapıyı kastettiğini varsayıyorum. Bu deneyin temel özelliği, modelin daha önce hiç görmediği ve eğitim verisinin sıfır olduğu setlerde bile yalnızca kart metniyle çalışabilmesi. LLM olmadan bunun zor olacağını düşünüyorum
  • Bu yazı çok iyiydi. Aslında bu hafta Magic: The Gathering için LLM fine-tuning konusuna bakıyordum
    Kartların anlamsal embedding’leriyle işlev veya atmosfer olarak benzer kartları bulmaya yarayan küçük bir kart benzerlik tarayıcısı yapıyorum.
    Şu anda sadece InstructorXL kullanıyorum ama Instructor’ın oyuna dair doğuştan bilgisi yetersiz olduğu için mi böyle, yoksa daha iyi prompt yazmam mı gerekiyor emin değilim. Şimdiye kadar 9 prompt denedim ama embedding üretim performansı pek iyi görünmedi: https://github.com/HanClinto/MtgMatrix/blob/main/data/create...
    Sıradaki adımım benzer kart veri kümesini indirmekti; bununla büyük bir embedding modelinde triplet loss eğitimi gibi bir şey deneyebilir miyim diye bakacaktım. Bunu pratikte nasıl bağlayacağımı hâlâ çözemedim ama bu yazı gerçekten çok ilham verici