การทดลอง fine-tune Mistral 7B ด้วยดราฟต์ Magic: The Gathering
(substack.com/generallyintelligent)- ทดลองใช้ การเลือกการ์ดในดราฟต์ ของ Magic: The Gathering เป็นโจทย์ เพื่อดูว่าการ fine-tune จะยกระดับประสิทธิภาพการให้เหตุผลได้มากแค่ไหนในสภาพแวดล้อมการ์ดใหม่ ๆ ที่อาจไม่มีอยู่ในคลังข้อมูลฝึกของ LLM
- แปลงบันทึกดราฟต์จาก 17lands ให้เป็นพรอมป์ และใช้การเลือกของผู้เล่นที่มีอัตราชนะสูงเป็น สัญญาณคำตอบที่ถูกต้อง เพื่อให้โมเดลดูแพ็กปัจจุบันและพูลการ์ดเดิมแล้วเลือกการ์ด
- โมเดล 7B พารามิเตอร์ ที่ fine-tune แล้วทำผลงานเหนือกว่า GPT-4 อย่างชัดเจนในโจทย์นี้ และมีประสิทธิภาพใกล้เคียงระดับมนุษย์หรือผู้ทดลอง ส่วน fine-tuned GPT-3.5 อาจทำได้ดีกว่า แต่มีต้นทุนสูงกว่ามาก
- รูปแบบข้อมูลและรูปแบบพรอมป์ตรวจสอบได้ยากอย่างรวดเร็วเพราะลูปการฝึกใช้เวลานาน และแม้หลังจากทดลองไปประมาณ 40 ชั่วโมง ก็ยังไม่มั่นใจว่ารูปแบบพรอมป์ที่เหมาะสมที่สุดคืออะไร
- ในเชิงปฏิบัติ ควรสร้างชุดประเมินก่อน และใช้เครื่องมืออย่าง axolotl แทนการเขียนสคริปต์ฝึกเอง อีกทั้ง LLM แบบ OSS ขนาดเล็กก็ไม่ใช่เรื่องง่ายในแง่หน่วยความจำ GPU และพื้นที่จัดเก็บ
โจทย์การทดลอง: ดราฟต์ Magic
- การทดลองนี้ใช้ดราฟต์ของ Magic: The Gathering เพื่อดูว่า LLM สามารถให้เหตุผลกับ ข้อมูลนอกการกระจาย ได้มากแค่ไหน
- Magic: The Gathering เป็นเกมการ์ดสะสมเชิงกลยุทธ์ที่ใช้การ์ดสิ่งมีชีวิตและคาถาต่อสู้กับคู่แข่ง ส่วนดราฟต์คือรูปแบบที่ผู้เล่นผลัดกันเลือกการ์ดจากชุดการ์ดสุ่มเพื่อนำไปสร้างเด็ค
- ดราฟต์เหมาะกับการทดลองด้วยเหตุผล 2 ประการ
- การให้เหตุผล: ต้องเข้าใจทั้งการ์ดที่เลือกมาแล้วจนถึงปัจจุบันและการ์ดในแพ็กปัจจุบัน จึงจะตัดสินใจได้ดี
- ข้อมูลนอกการกระจาย: การ์ด Magic ใหม่ออกปีละ 4–6 ครั้ง และการ์ดล่าสุดอาจไม่มีอยู่ในคลังข้อมูลฝึกของ LLM
- ข้อมูลใช้บันทึกการติดตามดราฟต์จาก 17lands
- 17lands เป็นบริการที่ติดตามข้อมูลดราฟต์ของไคลเอนต์ดิจิทัล Magic
- สามารถดูการเลือกของผู้เล่นระดับบนตามอัตราชนะ แล้วสร้างสัญญาณที่ใกล้เคียง “คำตอบที่ถูกต้อง” ได้
- แม้ในหมู่ผู้เล่น Magic เองก็มีการถกเถียงกันมากว่าอะไรคือการเลือกที่ถูกต้อง สัญญาณนี้จึงไม่ได้ชัดเจนสมบูรณ์ แต่เพียงพอสำหรับทดสอบว่าโมเดลเรียนรู้งานใหม่ได้หรือไม่
การจัดชุดข้อมูลและรูปแบบพรอมป์
- ข้อมูลดราฟต์ของ 17lands เป็นไฟล์ CSV ขนาดใหญ่ที่มีข้อมูลคร่าว ๆ ดังนี้
- การ์ดที่เลือกได้ในแพ็กปัจจุบัน
- การ์ดที่ผู้ดราฟต์เลือกมาแล้วจนถึงตอนนี้
- การ์ดที่เลือกจริงจากแพ็กนั้น
- เพื่อให้เหมาะกับการ fine-tune โมเดลภาษา จึงแปลงข้อมูลนี้เป็น รูปแบบบทสนทนาแบบข้อความ
- ข้อความ system ตั้งให้โมเดลเป็น “DraftGPT” และสั่งว่าเมื่อถูกขอให้เลือกดราฟต์ ให้ตอบชื่อการ์ดก่อน
- ข้อความ user มีหมายเลขแพ็กและหมายเลข pick ปัจจุบัน พูลการ์ดจนถึงตอนนี้ จำนวนการ์ดแยกตามสีที่เห็นใน 5 แพ็กล่าสุด และคำอธิบายการ์ดในแพ็กปัจจุบัน
- ข้อความ assistant ส่งออกเฉพาะชื่อการ์ดที่เลือก
- ตัวอย่างการแปลงข้อมูลมีให้ใน ตัวอย่างการแปลงข้อมูล 17lands เป็นพรอมป์ LLM และ พรอมป์ดราฟต์ฉบับเต็มในรูปแบบ ChatML
- ส่วนที่ยากที่สุดคือการจัดรูปแบบข้อมูลให้ได้ผลลัพธ์ตามต้องการ
- ในการ fine-tune หากต้องการทดสอบการเปลี่ยนพรอมป์ โดยทั่วไปต้องรันงานฝึกที่ใช้เวลาหลายชั่วโมง
- ด้วยเหตุนี้ ลูปการทดลองจึงรู้สึกว่า ช้ากว่า 100 เท่า เมื่อเทียบกับ prompt engineering ทั่วไป
- สิ่งที่ทดลองมีประมาณ 5 รูปแบบพรอมป์ ปริมาณรายละเอียดของการ์ดแต่ละใบ การเพิ่มบริบทจาก pick ล่าสุดหลายครั้ง และการใส่บรรทัดฝึก “ความรู้พื้นฐานเรื่องการ์ด” เพื่อให้จำข้อมูลการ์ดใหม่
- แม้หลังจากทดลองไปประมาณ 40 ชั่วโมง ก็ยังไม่สามารถฟันธงได้ว่ารูปแบบพรอมป์ใดดีที่สุดสำหรับโจทย์นี้
สภาพแวดล้อมการรัน fine-tune
- เช่า GPU เป็นรายชั่วโมงจาก Runpod
- GPU ที่ใช้คือ RTX 4090 รุ่น VRAM 24GB
- ค่าใช้จ่ายประมาณ $0.7/ชั่วโมง
- ตอนแรกพยายามเขียนสคริปต์ฝึกเองด้วย HuggingFace transformers และ PEFT และเนื่องจากข้อจำกัดด้าน GPU จึงเลือกใช้ QLoRA
- วิธีเขียนสคริปต์เองมีการลองผิดลองถูกมาก
- มีตัวเลือกจำนวนมาก ตั้งแต่การปรับแต่งที่ง่ายถ้ารู้จักอย่าง FlashAttention ไปจนถึงตัวเลือกที่เข้าใจยากหากไม่ได้อ่าน论文 เช่น พารามิเตอร์ LoRA
- แม้จะแก้ได้ทีละเรื่อง แต่ต้องใช้เวลามากในการทำความเข้าใจเอง
- สุดท้ายใช้ axolotl
- มีการติดตั้ง optimization หลายอย่างมาเป็นค่าเริ่มต้น ทำให้รันได้ง่ายขึ้น
- เอกสารก็ใช้ได้ และถือเป็นจุดเริ่มต้นที่เหมาะสำหรับคนส่วนใหญ่ที่เริ่ม fine-tune LLM
ขนาดโมเดลและต้นทุน
- แม้แต่ LLM แบบ OSS ที่ “เล็ก” ก็ถือว่าใหญ่มากเมื่อเทียบกับมาตรฐานในอดีต
- BERT ที่มักใช้ฝึกกันราวปี 2019 มีประมาณ 110 ล้านพารามิเตอร์
- โมเดล 7B ใหญ่กว่านั้นประมาณ 70 เท่า
- โมเดล 7B ยังเป็นภาระมากในแง่การใช้งานจริง
- น้ำหนักโมเดลประมาณ 16GB ทำให้พื้นที่จัดเก็บเป็นปัญหา
- แม้ใช้วิธีอย่าง QLoRA หน่วยความจำ GPU ก็ยังจัดการยาก
- การ fine-tune GPT-3.5 ดูมีโอกาสให้ผลลัพธ์ที่ดีกว่า แต่มีค่าใช้จ่ายสูง
- แพงกว่าการ fine-tune Mistral บน bare metal ประมาณ 100 เท่า
- การ inference ก็มีราคาพรีเมียม
- คำนวณว่า fine-tune GPT-3.5 ในขนาดใกล้เคียงกับการรันฝึกครั้งใหญ่ที่สุดของ Mistral-7B จะมีค่าใช้จ่ายประมาณ $500
วิธีประเมินและผลลัพธ์
- การสร้างชุดประเมินที่ดีก่อนเริ่มทดลองเป็นเรื่องสำคัญ
- สำหรับโจทย์นี้ มีการ holdout ดราฟต์เต็มบางส่วนจากข้อมูลฝึก แล้วตรวจว่าโมเดลเลือกการ์ดเดียวกับมนุษย์หรือไม่
- เมื่อมีชุดประเมินแล้ว การตัดสินผลการ fine-tune ก็ง่ายขึ้น
- ความแม่นยำในการเลือกการ์ดนิยามได้ค่อนข้างง่าย แต่เกณฑ์ถัดไปคลุมเครือกว่า
- เมื่อโมเดลเลือกต่างออกไป การเลือกนั้นควรต้องมีเหตุผลรองรับได้
- ถ้าโมเดลอธิบายได้อย่างสมเหตุสมผลว่าทำไมเลือกการ์ดใบนั้นก็จะดี
- เกณฑ์ที่คลุมเครือตรวจสอบด้วย การประเมินด้วยสายตา โดยดูตัวอย่างหลายรายการด้วยตัวเอง ซึ่งเป็นกระบวนการที่ช้า
- GPT-4 เลือกสิ่งที่แปลกน้อยกว่าโมเดลขนาดเล็กที่ fine-tune แล้ว และมีความสามารถในการให้เหตุผลรองรับการเลือกได้ดีกว่า
- โมเดล 7B ที่ fine-tune แล้วเอาชนะ GPT-4 และการเรียนรู้แบบ in-context ได้อย่างง่ายดายในโจทย์เลือกการ์ดนี้ ทั้งด้านความแม่นยำและต้นทุน
- ในการทดลองหนึ่ง มีการ fine-tune โมเดลด้วยการ์ดชุดหนึ่ง แล้วประเมินกับชุดการ์ดที่ไม่เคยเห็น
- โมเดลดูเหมือนไม่ได้แค่จดจำการ์ดที่ดี แต่สามารถ generalize แนวคิดของดราฟต์ ได้ในระดับหนึ่ง
Magic Copilot และบอตดราฟต์
- เชื่อมโมเดลเลือก pick สำหรับดราฟต์ที่ fine-tune แล้วเข้ากับล็อกของ Magic Arena และสร้าง “Magic Copilot” เป็นแอป Electron แบบเร็ว ๆ เพื่อนำไปใช้ดราฟต์อยู่หลายครั้ง
- การเลือกการ์ดสร้างโดยโมเดล fine-tune ส่วนคำบรรยายให้ GPT-4 รับผิดชอบ
- ส่วนใหญ่ทำงานได้ดี แต่บางครั้ง GPT-4 ไม่เห็นด้วยกับการเลือกของโมเดล fine-tune และโต้แย้งทันที
- เชื่อม AI ดราฟต์ 8 ตัวเพื่อทำดราฟต์จำลองระหว่างบอตด้วยกันด้วย
- เมื่อบอตส่งการ์ดต่อกันเอง มีแนวโน้มสูงที่จะเลือกเด็คสีเดียว
- เมื่อมีมนุษย์ผสมการเลือกแบบอื่นเข้าไป เด็คมีแนวโน้มจะลู่เข้าเป็นรูปแบบที่ปกติมากขึ้นมาก
- โดยรวมแล้ว AI ดราฟต์นี้ดูใกล้เคียงกับ AI ดราฟต์ที่ทรงพลังและเหมือนมนุษย์มากกว่าที่มีอยู่ในปัจจุบัน
- เมื่อเทียบกับบอต quick draft ของ Magic Arena จะเลือกได้ใกล้เคียงผู้ดราฟต์มนุษย์คุณภาพสูงมากกว่าบอตแบบ heuristic
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
บทความนี้ดีตรงที่แสดงให้เห็นชัดเจนว่า แม้แนวคิดที่ดูเรียบง่ายในเชิงคอนเซปต์ ก็ยากแค่ไหนเมื่อนำมาทำจริงด้วย การ fine-tune LLM
ดูเหมือนจะเป็นโจทย์ที่ไม่ง่ายเลย แม้จะมีชุดข้อมูลตั้งต้นและโมเดลเริ่มต้นที่ค่อนข้างดีแล้วก็ตาม โมเดลแบบนี้ดูเหมาะกับงานที่เป็นธรรมชาติและไม่มีคำตอบที่ถูกต้องแน่นอน เช่น การเลือกการ์ดที่สมบูรณ์แบบจากรายการตัวเลือกที่ให้มาอาจแก้แบบเชิงจัดหมู่ได้ยาก แต่การเลือกการ์ดที่ดีนั้นเป็นไปได้ และ LLM ก็อาจเข้าใกล้ประสิทธิภาพระดับมนุษย์ได้ ดูเหมือนว่ากลุ่มปัญหาที่สามารถแก้ได้ด้วยการ fine-tune LLM ในปัจจุบันจะปรากฏชัดจากตรงนี้
เช่น เดือนนี้ผมให้มันช่วยหาของขวัญให้เพื่อนและเด็ก ๆ อยู่ โจทย์ไม่ได้ต้องการตัวเลือกที่ดีที่สุดเพื่อแก้ปัญหา แค่ตัวเลือกที่ดีก็พอแล้ว
อาจไม่ใช่การเปลี่ยนแปลงที่ปฏิวัติชีวิตประจำวันที่สุด แต่ผมตั้งตารอ คู่ต่อสู้บอต ที่มีสไตล์การเล่นน่าสนใจในเกมอย่าง Magic: The Gathering จริง ๆ
ดูเป็นกรณีใช้งานที่ชัดเจนมาก ซึ่งจะช่วยยกระดับความสามารถของทีมวิจัยและพัฒนาในการสร้างและทดสอบกลไกใหม่ ๆ ในหลายระดับฝีมือได้อย่างมาก
ในส่วนที่ว่า “ใช้ข้อมูลนั้นดู draft pick ที่ผู้เล่นระดับท็อปในบริการเลือก แล้วดึงคำตอบที่ถูกต้องออกมา” หมายความว่าเขาดู draft pick จาก https://www.17lands.com/leaderboard แล้วเรียงตาม อัตราชนะ หรือเปล่า?
ผมคิดว่าเดิมทีน่าจะต้องเลือก Match Wins หรือ Trophies มากกว่า ไม่อย่างนั้นสิ่งที่วัดจะไม่ใช่ผู้เล่นที่เก่งที่สุดในบริการ แต่จะกลายเป็นการเรียนรู้จากผู้เล่นที่มี draft choices ซึ่งส่วนใหญ่ดีมาก ๆ หรือก็คือผู้เล่นที่โชคดี ผลกระทบนั้นจะปรากฏในการ validation หรือ testing ด้วยเช่นกัน
ผมคิดว่าควรเทียบกับ baseline ที่คำนวณคะแนนแบบ “Elo” ของการ์ดแต่ละใบเมื่อเทียบกับการ์ดอื่นจากข้อมูล 17lands ไม่ใช่ baseline ของ LLM เช่น ก่อนจะกำหนดสองสี ก็แนะนำการ์ดที่มีคะแนนสูงสุด และหลังจากกำหนดสีแล้ว ก็แนะนำการ์ดที่มีคะแนนสูงสุดในสีนั้นหรือในกลุ่ม land
LLM อาจมีความรู้กฎได้ในระดับหนึ่ง แต่กับการ์ดที่ไม่เคยเห็นมาก่อน ดูเหมือนมันจะจับสัญญาณอย่างความหายากของการ์ด ค่าใช้จ่าย และความ “ใหญ่” มากกว่า “ความแม่นยำ” ของการดราฟต์ก็ดูต่ำ และผมไม่แน่ใจว่านั่นคือความหมายที่ตั้งใจไว้หรือเปล่า ถ้าหมายถึงการเลือกต่างจากผู้เล่นในข้อมูลต้นฉบับ ในสถานการณ์ที่ตัวเลือกทั้งหมดโดยรวมดีเหมือนกับตัวเลือกของคนที่มีอัตราชนะสูง การเลือกในหมู่ตัวเลือกดี ๆ ดูจะยากกว่าด้วยซ้ำ
เกณฑ์คือ Diamond ขึ้นไป อย่างไรก็ตาม เขาดู draft ของผู้เล่นเหล่านั้นทั้งหมด รวมถึง draft ที่ผลงานไม่ดีด้วย
ความแม่นยำในที่นี้หมายถึงว่า ในแพ็กที่กำหนดมา โมเดลเลือกเหมือนกับผู้เล่นที่ดีคนใดคนหนึ่งหรือไม่ แน่นอนว่ามันเป็นตัวชี้วัดเชิงอัตวิสัยและไม่สมบูรณ์แบบ แต่ก็ใช้ได้สำหรับดูความสามารถในการเลียนแบบ drafter ระดับสูง
สงสัยว่าแทนที่จะทำให้ loss ของ prompt เป็น 0 เคยลองใช้ weighted loss ใน Axolotl หรือยัง
จำได้ว่าเอกสาร GPT-3 ของ Microsoft สมัยหนึ่งบอกว่าวิธีนี้มีประโยชน์เมื่อคำตอบสั้น เช่นกรณี “Cut in.” ในที่นี้ การทำ domain adaptation ด้วย subreddit หรือฟอรั่มก่อน fine-tune ก็อาจช่วยได้
ผมก็กำลังคิดเรื่อง domain adaptation อยู่ และกำลังพิจารณาถอดเสียงวิดีโอ YouTube เกี่ยวกับการดราฟต์ด้วย ค่อนข้างอยากรู้เหมือนกันว่าจะช่วยได้แค่ไหน
ถ้าผมอ่านบทความของผู้เขียนถูกต้อง ในแต่ละจุดที่ต้องเลือก prompt ที่ส่งให้เอเจนต์จะมีเพียง ชื่อการ์ด จาก card pool จนถึงตอนนั้น ส่วนการ์ดในแพ็กที่ส่งให้เท่านั้นที่มีข้อความเต็ม
น่าจะเป็นเพราะขนาด context window ทำให้บริบทระหว่างการเลือกไม่คงอยู่
ถ้าเป็นแบบนั้น และสมมติฐานที่ว่าเซ็ตเหล่านี้อยู่หลัง cut-off การเรียนรู้ของบอตถูกต้อง การจะเป็น drafter ที่ดีได้ก็เป็นเรื่องบังเอิญล้วน ๆ ไม่ใช่หรือ? บอตไม่มีทางรู้ตามตัวอักษรเลยว่า pick ก่อนหน้าเข้ากับการ์ดใดได้ดี ส่งสัญญาณอะไรไปแล้ว และได้รับสัญญาณอะไรมาแล้วบ้าง แม้แต่ผู้เล่นมนุษย์ระดับท็อป ถ้าเห็นแค่ “Gadwick's First Duel -- {1}{U} (uncommon)” ใน prompt ตัวอย่าง และไม่เคยเห็นการ์ดนั้นมาก่อน ก็ไม่อาจรู้ได้ว่ามันเข้ากับอะไรดี
สุดท้ายก็คงเลือกการ์ดดราฟต์ที่โดยทั่วไปดีและมีสีทับกับ pick ก่อนหน้า ซึ่งก็เป็นสิ่งที่ heuristic แบบลำดับการ pick เดิม ๆ ทำมาตลอด
โมเดลยังถูกฝึกด้วยข้อมูลเติมคำตอบแบบควิซการ์ดด้วย ซึ่งให้เติมข้อความเต็มของการ์ด ประเภท และข้อมูลอย่าง CMC นอกจากนี้ สำหรับการ์ดในแพ็ก มันยังต้องเรียนรู้การเติม token ถัดไปด้วย ดังนั้นระหว่างสร้าง draft pick มันก็เรียนรู้วิธีทำนายข้อความเต็มของการ์ดด้วย เมื่อนำมารวมกัน บอตจึงเรียนรู้ข้อความของการ์ดใหม่ได้ค่อนข้างครอบคลุม
ถ้ายังไม่ได้เห็น https://news.ycombinator.com/item?id=38525978 ก็น่าจะน่าสนใจสำหรับผู้อ่านกลุ่มนี้เหมือนกัน
เป็นบทความ “I hacked Magic the Gathering: Arena for a 100% win rate” ซึ่งควรค่าแก่การอ่านเพียงเพราะผู้สำรวจพบว่า Sparky ซึ่งเป็น AI เทียมของ MTGA ดูไม่ได้ซับซ้อนแบบโง่ ๆ อย่างที่คนนอกเคยสงสัยกัน
มันใกล้เคียงกับการมอบประสบการณ์ให้ผู้เล่นใหม่ที่เพิ่งรู้จักเกมและยังไม่รู้กฎ ได้ลองเล่นกับคอมพิวเตอร์โง่ ๆ หรือเป็นเวอร์ชันคอมพิวเตอร์ของการ “เล่นกับปลาทอง” เพื่อตรวจดูว่าเด็คที่สร้างมาจั่วและคอมโบออกมาอย่างไร มากกว่าจะเป็นอะไรแบบ CPU หมากรุก
สิ่งที่น่าสนใจมากคือสามารถ แทนการดราฟต์ด้วย LLM ได้
AI สำหรับดราฟต์ที่มีประสิทธิภาพดีที่สุดเท่าที่ผมเคยเห็น ล้วนใช้การเรียนรู้การแทนค่าในรูปแบบใดรูปแบบหนึ่ง ดูเพิ่มเติม: https://arxiv.org/pdf/2107.04438.pdf
ถ้าที่บอกว่า “การเรียนรู้การแทนค่า” หมายถึงอย่างอื่น ก็อาจเป็นผมที่เข้าใจผิด
ถึงอย่างนั้น การแทนด้วย LLM ก็มีจุดที่สนุกอยู่ เช่น สามารถใส่ ความชอบหรือบุคลิก ให้บอตผ่าน system prompt ได้ ซึ่งสนุกทีเดียว
สงสัยว่าถ้าถือว่าการ์ดแต่ละใบเป็น token หนึ่งตัว ป้อนสถานะการดราฟต์เป็นอินพุต และให้ token ที่ทำนายออกมาเป็นการ์ดที่จะเลือก จะใช้โมเดลที่เล็กลงหรือได้ผลลัพธ์ที่ดีกว่าไหม
คงต้องฝึกตั้งแต่ต้นด้วย tokenizer แบบกำหนดเอง
<|post_author|>username<|post_title|>title here...โมเดลที่ได้แย่กว่าตอนจัดรูปแบบทั้งหมดเป็นข้อความธรรมดามาก เงื่อนไขคือ MPT-30B, token พิเศษ 15 ตัว, token สำหรับฝึก 300 ล้านตัว และ fine-tuning ทั้งโมเดล
อาจเป็นผมที่พลาดเองก็ได้ แต่ยังไม่เคยเห็นกรณี open-source fine-tuning ที่เพิ่ม token จำนวนมากได้สำเร็จเช่นกัน
มันคงใช้ไม่ได้กับ “การ์ดที่ไม่เคยเห็นมาก่อน” และเวลาผิดก็อาจเลือกอะไรที่ไร้เหตุผลสุด ๆ แต่ผมคิดว่าน่าจะไปถึงความแม่นยำ 90% ได้
น่าจะน่าสนใจถ้าเทียบกับการฝึก neural network สำหรับดราฟต์โดยไม่มีจุดตั้งต้นเป็น Mistral อยากเห็นทั้งในมุม epoch และต้นทุน
ยังไม่ชัดเจนว่าปัจจัยของ LLM เกี่ยวข้องอย่างไร อาจเป็นเพราะบนอินเทอร์เน็ตมีรายการเด็คหรือดราฟต์จำลองมากพอจนส่งผล หรือไม่ก็เพราะโครงสร้างพื้นฐานฝั่ง “LLM fine-tuning” พร้อมกว่าการ “สร้าง neural network” มากกว่า อาจต้องมีอะไรอย่าง nnfiddle ที่ทำให้เรื่องนี้ง่ายขึ้น
Fine-tuning ค่อนข้างถูก และแค่ยัดข้อมูลเข้าไปก็ทำให้มันทำงานแบบนี้ได้ค่อนข้างดี การสร้าง checkpoint พื้นฐานใช้การคำนวณมาก แต่ “ความรู้” ส่วนใหญ่ก็อยู่ในนั้นแล้ว
ถ้าจะสร้าง neural network ตั้งแต่ต้น ต้องเริ่มจากแก้ปัญหาว่าจะ map การ์ดเป็นอินพุตอย่างไรก่อน ผมไม่ได้รู้จัก MTG มากนัก แต่เกมการ์ดสะสมส่วนใหญ่มีคำอธิบายเป็นข้อความและเอฟเฟกต์ซับซ้อน การ map ข้อความเป็นตรรกะเป็นสิ่งที่ LLM ทำได้ดีจริง ๆ และถ้าไม่ใช้ LLM ก็เท่ากับเริ่มจากศูนย์ แถมยังต้องใช้การคำนวณค่อนข้างมากกว่าที่พฤติกรรมที่พอใช้ได้จะเริ่มปรากฏ
สำหรับนักพัฒนาซอฟต์แวร์ส่วนใหญ่ ทางนี้ก็ง่ายกว่า Fine-tuning โดยทั่วไปคือรวบรวมข้อความแล้วใส่เข้าไปในสคริปต์ fine-tuning ต่อให้ไม่รู้ linear algebra หรือไม่รู้ว่า “convolution” คืออะไร ก็ทำได้
ผมสมมติว่าการ “ฝึก neural network สำหรับดราฟต์โดยไม่มี Mistral” หมายถึงการใช้อินพุตเลเยอร์เป็นเวกเตอร์ bitmap ของการ์ดในแพ็ก ฟีเจอร์หลักของการทดลองนี้คือ โมเดลทำงานได้จากข้อความบนการ์ดแม้กับชุดที่ไม่เคยเห็นมาก่อนและมีข้อมูลฝึกเป็น 0 ผมคิดว่าหากไม่มี LLM คงทำแบบนั้นได้ยาก
บทความนี้ดีมาก จริง ๆ แล้วสัปดาห์นี้ผมกำลังดูเรื่องการ fine-tuning LLM สำหรับ Magic: The Gathering อยู่พอดี
ผมกำลังทำเบราว์เซอร์ความคล้ายของการ์ดขนาดเล็ก ที่ใช้ semantic embedding ของการ์ดเพื่อค้นหาการ์ดที่คล้ายกันทั้งในเชิงหน้าที่และบรรยากาศ
ตอนนี้ใช้แค่ InstructorXL แต่ไม่แน่ใจว่าเป็นเพราะ Instructor ขาดความรู้โดยกำเนิดเกี่ยวกับเกมนี้ หรือผมควรทำ prompt ให้ดีกว่านี้ ตอนนี้ลอง prompt ไป 9 แบบแล้ว แต่ประสิทธิภาพในการสร้าง embedding ดูยังไม่ค่อยดี: https://github.com/HanClinto/MtgMatrix/blob/main/data/create...
ขั้นตอนถัดไปคือดาวน์โหลดชุดข้อมูลการ์ดที่คล้ายกัน แล้วดูว่าจะใช้มันฝึกโมเดล embedding ขนาดใหญ่ด้วยอะไรอย่าง triplet loss ได้ไหม ถึงตอนนี้ยังไม่รู้ว่าจะเชื่อมเข้าด้วยกันจริง ๆ อย่างไร แต่บทความนี้ให้แรงบันดาลใจมาก