1 poin oleh GN⁺ 2023-12-08 | 1 komentar | Bagikan ke WhatsApp
  • Menggunakan pemilihan kartu draft di Magic: The Gathering sebagai tugas untuk menguji seberapa jauh fine-tuning dapat meningkatkan kemampuan penalaran pada lingkungan kartu terbaru yang mungkin tidak ada di korpus pelatihan LLM
  • Mengubah catatan draft dari 17lands menjadi prompt, lalu memakai pilihan dari pemain dengan win rate tinggi sebagai sinyal jawaban benar agar model memilih kartu berdasarkan pack saat ini dan kumpulan kartu yang sudah dimiliki
  • Model 7B parameter yang telah di-fine-tune secara jelas mengungguli GPT-4 pada tugas ini, menunjukkan performa yang mendekati manusia atau peneliti eksperimen; fine-tuned GPT-3.5 mungkin bisa lebih baik, tetapi biayanya jauh lebih besar
  • Format data dan bentuk prompt sulit divalidasi dengan cepat karena loop pelatihan yang panjang, dan bahkan setelah sekitar 40 jam eksperimen masih belum ada kepastian soal format prompt yang optimal
  • Secara praktis, lebih baik membuat set evaluasi terlebih dahulu dan memakai alat seperti axolotl daripada menulis skrip pelatihan sendiri; bahkan OSS LLM kecil pun tetap cukup berat dari sisi memori GPU dan ruang penyimpanan

Tugas eksperimen: draft Magic

  • Eksperimen ini memakai draft Magic: The Gathering untuk melihat sejauh mana LLM bisa melakukan penalaran pada data di luar distribusi
  • Magic: The Gathering adalah permainan kartu strategi trading card game di mana pemain bertarung memakai kartu makhluk dan mantra, sedangkan draft adalah format membangun dek dengan bergiliran memilih kartu dari kumpulan kartu acak
  • Draft cocok untuk eksperimen ini dalam dua hal
    • Penalaran: untuk memilih dengan baik, model harus memahami kartu yang sudah dipilih sejauh ini dan kartu dalam pack saat ini secara bersamaan
    • Data di luar distribusi: kartu Magic baru dirilis 4–6 kali per tahun, dan kartu terbaru mungkin tidak ada di korpus pelatihan LLM
  • Data yang digunakan berasal dari catatan pelacakan draft milik 17lands
    • 17lands adalah layanan yang melacak data draft dari klien Magic digital
    • Dari pilihan para pemain papan atas berdasarkan win rate, bisa dibuat sinyal yang mendekati “jawaban benar”
    • Di kalangan pemain Magic sendiri masih banyak perdebatan tentang pilihan yang benar, jadi sinyal ini tidak sepenuhnya pasti, tetapi cukup memadai untuk menguji apakah model mempelajari tugas baru

Penyusunan dataset dan format prompt

  • Data draft 17lands adalah file CSV besar yang kira-kira memuat informasi berikut
    • Kartu yang dapat dipilih dari pack saat ini
    • Kartu yang sudah dipilih drafter sejauh ini
    • Kartu yang benar-benar dipilih dari pack tersebut
  • Agar cocok untuk fine-tuning model bahasa, data ini diubah ke format percakapan teks
    • Pesan system menetapkan model sebagai “DraftGPT” dan menginstruksikannya untuk menjawab nama kartu terlebih dahulu saat diminta melakukan draft pick
    • Pesan user mencakup nomor pack dan nomor pick saat ini, kumpulan kartu sejauh ini, jumlah kartu per warna yang terlihat dalam 5 pack terakhir, serta deskripsi kartu dalam pack saat ini
    • Pesan assistant hanya mengeluarkan nama kartu yang dipilih
  • Contoh transformasi data disediakan di contoh mengubah data 17lands menjadi prompt LLM dan prompt draft penuh dalam format ChatML
  • Bagian tersulit adalah memformat data agar menghasilkan keluaran yang diinginkan
    • Dalam fine-tuning, untuk menguji perubahan prompt biasanya perlu menjalankan pekerjaan pelatihan selama berjam-jam
    • Karena itu, loop eksperimennya terasa 100 kali lebih lambat dibanding prompt engineering biasa
  • Hal-hal yang diuji meliputi sekitar 5 format prompt, jumlah detail per kartu, penambahan konteks dari beberapa pick terakhir, serta baris pelatihan “pengetahuan kartu” untuk membantu model mengingat informasi kartu baru
  • Bahkan setelah sekitar 40 jam eksperimen, masih belum bisa dipastikan format prompt mana yang terbaik untuk tugas ini

Lingkungan eksekusi fine-tuning

  • GPU disewa per jam dari Runpod
    • GPU yang dipakai adalah RTX 4090 dengan VRAM 24GB
    • Biayanya sekitar $0.7/jam
  • Awalnya, peneliti ingin menulis skrip pelatihan sendiri dengan HuggingFace transformers dan PEFT, lalu memilih QLoRA karena keterbatasan GPU
  • Pendekatan menulis skrip sendiri melibatkan banyak trial and error
    • Mulai dari optimisasi yang sederhana jika tahu caranya seperti FlashAttention, hingga pilihan yang sulit dipahami tanpa membaca paper seperti parameter LoRA
    • Semuanya memang bisa diatasi satu per satu, tetapi butuh banyak waktu untuk memahaminya secara mandiri
  • Pada akhirnya digunakan axolotl
    • Alat ini sudah menerapkan berbagai optimisasi secara default sehingga lebih mudah dijalankan
    • Dokumentasinya juga cukup baik, dan dinilai sebagai titik awal yang tepat bagi kebanyakan orang yang ingin mulai fine-tuning LLM

Ukuran model dan biaya

  • Bahkan OSS LLM yang “kecil” pun sangat besar menurut standar masa lalu
    • BERT yang sering dilatih sekitar 2019 memiliki sekitar 110 juta parameter
    • Model 7B sekitar 70 kali lebih besar dari itu
  • Model 7B juga cukup membebani dari sisi operasional nyata
    • Bobot model sekitar 16GB, sehingga ruang penyimpanan menjadi masalah
    • Bahkan dengan metode seperti QLoRA, memori GPU tetap menjadi kendala
  • Fine-tuning GPT-3.5 tampak berpotensi memberi hasil lebih baik, tetapi biayanya besar
    • Sekitar 100 kali lebih mahal daripada fine-tuning Mistral di bare metal
    • Inferensinya juga dikenai harga premium
    • Fine-tuning GPT-3.5 yang setara dengan proses pelatihan terbesar untuk Mistral-7B diperkirakan akan menelan biaya sekitar $500

Metode evaluasi dan hasil

  • Penting untuk lebih dulu membuat set evaluasi yang baik sebelum eksperimen
    • Dalam tugas ini, sebagian draft utuh dari data pelatihan di-holdout untuk memeriksa apakah model memilih kartu yang sama seperti manusia
    • Karena ada set evaluasi, hasil fine-tuning jadi lebih mudah dinilai
  • Akurasi pemilihan kartu relatif mudah didefinisikan, tetapi kriteria berikut lebih ambigu
    • Saat model membuat pilihan berbeda, pilihan itu harus bisa dibenarkan
    • Akan lebih baik jika model dapat menjelaskan secara masuk akal mengapa kartu itu dipilih
  • Kriteria yang ambigu diperiksa lewat evaluasi visual/manual dengan melihat banyak contoh secara langsung, dan proses ini lambat
  • GPT-4 membuat pilihan yang kurang aneh dibanding model kecil yang di-fine-tune, dan lebih baik dalam membenarkan pilihannya
  • Model 7B yang telah di-fine-tune dengan mudah mengungguli GPT-4 dan pembelajaran in-context pada tugas pemilihan kartu ini, baik dari sisi akurasi maupun biaya
  • Dalam satu eksperimen, model di-fine-tune pada satu set kartu lalu dievaluasi pada set kartu yang belum pernah dilihat
    • Model tampaknya tidak sekadar menghafal kartu yang bagus, melainkan sampai tingkat tertentu menggeneralisasi konsep draft

Magic Copilot dan draft bot

  • Model draft pick yang telah di-fine-tune dihubungkan ke log Magic Arena dan dipakai untuk membuat aplikasi Electron cepat bernama “Magic Copilot”, lalu digunakan dalam beberapa sesi draft
  • Pemilihan kartu dihasilkan oleh model hasil fine-tuning, sedangkan penjelasannya ditangani GPT-4
    • Sebagian besar berjalan baik, tetapi sesekali GPT-4 tidak setuju dengan pilihan model fine-tuned dan langsung membantahnya
  • Delapan AI draft juga dihubungkan untuk menjalankan simulasi draft antarbots
    • Saat hanya bot yang saling meneruskan kartu, mereka cenderung memilih dek satu warna
    • Saat pilihan manusia ikut dicampurkan, hasilnya cenderung menuju bentuk dek yang jauh lebih normal
  • Secara keseluruhan, AI draft ini tampak mendekati draft AI yang lebih kuat dan lebih manusiawi dibanding yang ada saat ini
  • Dibanding bot quick draft di Magic Arena, pilihannya lebih mirip drafter manusia berkualitas tinggi daripada bot berbasis heuristik

1 komentar

 
GN⁺ 2023-12-08
Komentar Hacker News
  • Saya suka tulisan ini karena menunjukkan dengan baik betapa sulitnya mengimplementasikan ide yang secara konseptual terlihat sederhana lewat fine-tuning LLM
    Sepertinya ini tetap menjadi tugas yang tidak mudah meski sudah ada dataset awal yang cukup bagus dan model awal. Model seperti ini tampak cocok untuk pekerjaan yang alami dan tidak punya jawaban benar yang pasti. Misalnya, memilih kartu yang sempurna dari daftar pilihan tertentu mungkin sulit diselesaikan secara kombinatorial, tetapi memilih kartu yang bagus itu mungkin, dan LLM juga bisa mendekati performa setara manusia. Rasanya kelompok masalah yang bisa diselesaikan dengan fine-tuning LLM saat ini terlihat dari sini

    • Ini juga sesuai dengan pengalaman saya. Untuk keputusan berisiko tinggi, hampir tidak pernah memberi jawaban yang luar biasa, tetapi untuk keputusan berisiko rendah, jawabannya sudah cukup baik
      Misalnya bulan ini saya dibantu mencari hadiah untuk teman dan anak-anak. Untuk menyelesaikan masalahnya, saya tidak butuh pilihan terbaik; pilihan yang bagus saja sudah cukup
    • Benar, tetapi kita juga tidak boleh melewatkan fakta bahwa ini adalah pekerjaan yang dilakukan satu orang
    • Saya penasaran apakah masalah-masalah yang dikuasai LLM bisa didefinisikan sebagai kelas kompleksitas tertentu
  • Mungkin bukan perubahan paling revolusioner dalam kehidupan sehari-hari, tetapi saya sangat menantikan pertandingan melawan bot dengan gaya bermain menarik di game seperti Magic: The Gathering
    Ini tampak seperti contoh jelas yang bisa sangat meningkatkan kemampuan tim riset dan pengembangan untuk membuat dan menguji mekanisme baru di berbagai tingkat permainan

    • Eksperimen Dota 2 dari OpenAI menghasilkan banyak perilaku menarik, dan para pemain profesional pun terkesan
  • Pada bagian “dengan data itu, mengekstrak jawaban benar dengan melihat pilihan draft yang dibuat para pemain terbaik di layanan”, apakah maksudnya mereka melihat pilihan draft di https://www.17lands.com/leaderboard dan mengurutkannya berdasarkan win rate?
    Saya rasa seharusnya yang dipilih adalah Match Wins atau Trophies. Kalau tidak, yang dipelajari bukan ukuran pemain terbaik di layanan, melainkan pilihan draft yang sebagian besar pilihannya sangat bagus—dengan kata lain pemain yang beruntung. Dampaknya juga akan muncul apa adanya pada validasi atau pengujian.
    Rasanya pembandingnya bukan baseline LLM, melainkan baseline yang menghitung skor gaya “Elo” untuk tiap kartu relatif terhadap kartu lain dari data 17lands. Sebelum dua warna ditetapkan, rekomendasikan kartu dengan skor tertinggi; setelah warna ditetapkan, rekomendasikan kartu dengan skor tertinggi di dalam warna itu atau di antara land.
    LLM mungkin bisa memiliki sebagian pengetahuan aturan, tetapi untuk kartu yang baru dilihat, sepertinya ia lebih banyak menangkap sinyal seperti kelangkaan kartu, biaya, dan “besar”. “Akurasi” draft-nya juga tampak rendah, dan saya tidak yakin apakah itu makna yang dimaksud. Dalam situasi ketika semua pilihan umumnya bagus seperti pilihan dengan win rate tinggi, jika artinya model memilih berbeda dari pemain pada data asli, justru memilih di antara pilihan-pilihan bagus tampak lebih sulit

    • Tulisan itu hanya kurang jelas; mereka memfilter pemain di 17lands yang memiliki match win rate di atas 62% dan melakukan draft di rank tinggi
      Kriterianya adalah Diamond ke atas. Namun draft dari para pemain itu dilihat semuanya, termasuk yang hasilnya buruk.
      Di sini akurasi berarti apakah model memilih pilihan yang sama dengan salah satu pemain bagus dari pack tertentu. Tentu ini subjektif dan bukan metrik sempurna, tetapi cukup baik untuk memeriksa kemampuan meniru drafter tingkat tinggi
  • Saya penasaran apakah mereka juga mencoba weighted loss di Axolotl, alih-alih membuat loss pada prompt menjadi 0
    Dulu, dokumen GPT-3 dari Microsoft sepertinya mengatakan pendekatan ini menguntungkan saat responsnya pendek, seperti “Cut in.” di sini. Melakukan adaptasi domain dengan subreddit atau forum sebelum fine-tuning juga bisa membantu

    • Ini ide yang sangat bagus dan tidak terpikir oleh saya. Akan saya tambahkan ke daftar hal yang ingin dicoba
      Saya juga sedang memikirkan adaptasi domain, dan sekaligus mempertimbangkan transkripsi video YouTube tentang draft. Saya cukup penasaran seberapa besar itu akan membantu
  • Kalau saya membaca tulisan penulisnya dengan benar, prompt yang diberikan kepada agen pada tiap titik pilihan tampaknya hanya berisi nama kartu untuk kumpulan kartu sejauh ini, sementara hanya kartu-kartu dalam pack yang diterima yang berisi teks lengkap
    Mungkin konteks antar-pilihan tidak dipertahankan karena ukuran context window.
    Kalau begitu, dan jika asumsi bahwa set-set ini muncul setelah cutoff pelatihan bot benar, bukankah menjadi drafter yang bagus itu murni kebetulan? Bot secara harfiah tidak punya cara untuk tahu kartu mana yang cocok dengan pick sebelumnya, sinyal apa yang telah dikirim dan diterima sejauh ini, dan sebagainya. Bahkan pemain manusia terbaik pun, jika hanya melihat “Gadwick's First Duel -- {1}{U} (uncommon)” dalam contoh prompt dan belum pernah melihat kartu itu, tidak bisa tahu kartu itu cocok dengan apa.
    Pada akhirnya ia akan memilih kartu draft yang secara umum bagus dan warnanya tumpang tindih dengan pick sebelumnya, dan itu adalah hal yang selalu dilakukan heuristik berbasis urutan pick yang sudah ada

    • Tidak persis begitu. Ada beberapa jalur bagi model untuk mempelajari teks lengkap kartu
      Model juga dilatih dengan data penyelesaian kuis kartu; di sini model diminta melengkapi teks lengkap kartu serta informasi seperti tipe dan CMC. Selain itu, untuk kartu-kartu di dalam pack, model juga harus mempelajari penyelesaian token berikutnya, sehingga selama membuat pick draft, ia juga belajar cara memprediksi teks lengkap kartu. Secara keseluruhan, bot mempelajari teks kartu baru dengan cukup menyeluruh
  • Kalau belum melihatnya, https://news.ycombinator.com/item?id=38525978 mungkin juga menarik bagi pembaca ini
    Itu adalah tulisan “I hacked Magic the Gathering: Arena for a 100% win rate”, dan layak dibaca setidaknya karena penelitinya menemukan bahwa Sparky, pseudo-AI MTGA, tampaknya tidak sebodoh dan serumit yang diduga dari luar

    • Sparky adalah AI Arena, tetapi tidak pernah dianggap sebagai AI Arena yang bagus
      Fungsinya lebih dekat ke pengalaman bagi pemain baru yang pertama kali mencoba game dan belum tahu aturan untuk bermain melawan komputer bodoh, atau versi komputer dari “bermain melawan goldfish” untuk melihat bagaimana deck yang dibuat akan menarik kartu dan menjalankan combo. Itu bukan seperti CPU catur
  • Fakta bahwa draft bisa direpresentasikan dengan LLM sangat menarik
    AI draft dengan performa terbaik yang pernah saya lihat semuanya memanfaatkan representation learning dalam satu bentuk atau lainnya. Referensi: https://arxiv.org/pdf/2107.04438.pdf

    • Kalau saya tidak salah membaca, makalah yang ditautkan tampaknya memakai one-hot encoding, bukan embedding yang dipelajari, untuk merepresentasikan tiap kartu
      Kalau yang dimaksud dengan “representation learning” adalah hal lain, mungkin saya yang salah paham
    • Saya belum melihat yang ini, tapi benar-benar bagus. Melihat jumlah datanya, rasanya pendekatan seperti ini mungkin akan lebih baik daripada LLM, tetapi hasilnya menarik
      Meski begitu, representasi LLM punya sisi yang menyenangkan. Misalnya, dengan system prompt kita bisa memberi bot preferensi atau kepribadian, jadi cukup seru
    • Bidang ini bergerak terlalu cepat, benar-benar sulit untuk diikuti
  • Saya penasaran apakah memperlakukan tiap kartu sebagai satu token, memberi status draft sebagai input, dan menjadikan token prediksi sebagai kartu yang akan dipilih dapat memungkinkan model yang lebih kecil atau hasil yang lebih baik
    Mungkin harus dilatih dari awal dengan tokenizer kustom

    • Dulu saya pernah menambahkan token khusus ke dataset bergaya Reddit. Formatnya adalah <|post_author|>username<|post_title|>title here...
      Model yang dihasilkan jauh lebih buruk dibanding saat semuanya diformat sebagai teks biasa. Kondisinya MPT-30B, 15 token khusus, 300 juta token pelatihan, dan full fine-tuning.
      Bisa saja saya melakukan kesalahan, tetapi saya juga belum melihat contoh penambahan token dalam jumlah banyak yang berhasil pada fine-tuning open source
    • Saya juga sempat punya pemikiran yang cukup mirip. Dengan cara seperti ini, konfigurasi neural network dasar pun bisa bekerja cukup baik, dan mungkin tidak perlu LLM
      Ini tidak akan bekerja untuk “kartu yang belum pernah dilihat sama sekali”, dan saat salah kemungkinan akan memilih sesuatu yang tidak masuk akal, tetapi rasanya bisa mencapai akurasi 90%
  • Akan menarik jika dibandingkan dengan melatih neural network khusus draft tanpa titik awal Mistral. Saya ingin melihatnya baik berdasarkan epoch maupun berdasarkan biaya
    Tidak jelas mengapa unsur LLM relevan. Mungkin ada cukup banyak daftar deck atau mock draft di internet sehingga berpengaruh, atau mungkin infrastruktur untuk “fine-tuning LLM” memang lebih matang daripada “membuat neural network”. Mungkin kita butuh sesuatu seperti nnfiddle yang membuat ini mudah

    • Keunggulan LLM adalah checkpoint dasarnya sudah “memahami” banyak hal
      Fine-tuning relatif murah, dan hanya dengan memasukkan data, model bisa dibuat menjalankan tugas seperti ini dengan cukup baik. Membuat checkpoint dasar membutuhkan banyak komputasi, tetapi sebagian besar “pengetahuan” ada di dalamnya.
      Kalau membuat neural network dari nol, kita harus mulai dari cara memetakan kartu sebagai input. Saya tidak terlalu paham MTG, tetapi kebanyakan trading card game punya deskripsi teks dan efek yang kompleks. Memetakan teks ke logika adalah hal yang sangat dikuasai LLM; tanpa itu, kita mulai dari nol dan juga butuh komputasi yang relatif banyak sampai perilaku yang layak mulai muncul.
      Bagi kebanyakan developer software, jalur ini juga lebih mudah. Fine-tuning pada dasarnya adalah mengumpulkan teks lalu memasukkannya ke skrip fine-tuning. Ini bisa dilakukan tanpa tahu aljabar linear atau apa itu “konvolusi”
    • Tanpa Mistral, bagaimana model bisa menggeneralisasi ke kartu yang baru pertama kali dilihat?
      Saya berasumsi “melatih neural network khusus draft tanpa Mistral” berarti input layer-nya berupa vektor bitmap dari kartu-kartu dalam pack. Fitur utama eksperimen ini adalah model dapat bekerja hanya dari teks kartu, bahkan pada set yang belum pernah dilihat sama sekali dan memiliki 0 data pelatihan. Tanpa LLM, menurut saya itu sulit
  • Saya sangat menyukai tulisan ini. Sebenarnya minggu ini saya sedang melihat-lihat fine-tuning LLM untuk Magic: The Gathering
    Saya sedang membuat browser kecil untuk kemiripan kartu yang mencari kartu yang mirip secara fungsional maupun nuansa lewat embedding makna kartu.
    Saat ini saya hanya memakai InstructorXL, tetapi saya belum tahu apakah Instructor kurang punya pengetahuan bawaan tentang game ini, atau apakah saya perlu membuat prompt yang lebih baik. Sejauh ini saya sudah mencoba 9 prompt, tetapi performa pembuatan embedding tampaknya kurang bagus: https://github.com/HanClinto/MtgMatrix/blob/main/data/create...
    Langkah berikutnya adalah mengunduh dataset kartu-kartu yang mirip, lalu mencoba melihat apakah dengan itu saya bisa melakukan semacam pelatihan triplet loss pada model embedding besar. Saya belum benar-benar tahu cara menyambungkannya, tetapi tulisan ini sangat menginspirasi