หมากรุกระดับแกรนด์มาสเตอร์โดยไม่ใช้การค้นหา
(github.com/google-deepmind)searchless_chessของ Google DeepMind เป็นอิมพลีเมนเทชันของบทความ NeurIPS 2024 Amortized Planning with Large-Scale Transformers ที่ใช้หมากรุกเพื่อประเมินว่า Transformer ขนาดใหญ่สามารถทำงานด้านการวางแผนได้ดีเพียงใดโดยไม่ต้องใช้การค้นหาแบบชัดเจน- ชุดข้อมูลหลัก ChessBench ประกอบด้วยเกมหมากรุก 10 ล้านเกมที่มีคำอธิบายประกอบของตาที่ถูกกติกาและค่าประเมินจาก Stockfish 16 รวมทั้งหมด 15 พันล้านจุดข้อมูล
- ฝึก Transformer ขนาดสูงสุด 270 ล้านพารามิเตอร์ ด้วย supervised learning และเปรียบเทียบผลกระทบโดยปรับขนาดชุดข้อมูล ขนาดโมเดล ประเภทสถาปัตยกรรม และเป้าหมายการทำนาย
- โมเดลที่ใหญ่ที่สุดทำนาย action-value บนกระดานใหม่ได้ค่อนข้างแม่นยำ แก้โจทย์หมากรุกยาก ๆ ได้โดยไม่ใช้การค้นหาแบบชัดเจน และทำ Elo 2895 ใน Lichess blitz เมื่อเล่นกับมนุษย์
- สามารถ distill อัลกอริทึมแบบใช้การค้นหาของ Stockfish ไปสู่ Transformer ขนาดใหญ่ได้ค่อนข้างดี แต่ยังไปไม่ถึงการ distill อย่างสมบูรณ์ ทำให้ ChessBench ยังคงเป็น benchmark สำหรับงานวิจัยต่อไป
เป้าหมายของโปรเจกต์และบริบทของบทความ
searchless_chessเป็นอิมพลีเมนเทชันของ Amortized Planning with Large-Scale Transformers: A Case Study on Chess- หมากรุกถูกใช้เป็น ปัญหาการวางแผน ตัวแทนใน AI และโปรเจกต์นี้ประเมินประสิทธิภาพของ Transformer ในงานที่การท่องจำไม่มีความหมาย แม้ในสเกลขนาดใหญ่
- งานวิจัยตรวจสอบในบริบทของหมากรุกว่าสามารถ distill พฤติกรรมของเอนจินหมากรุกแบบใช้การค้นหาไปยัง Transformer ด้วย supervised learning ได้หรือไม่
ชุดข้อมูล ChessBench
- ChessBench มีตาที่ถูกกติกาและคำอธิบายประกอบค่าประเมินจาก Stockfish 16
- จำนวนเกมหมากรุก: 10 ล้านเกม
- จุดข้อมูลทั้งหมด: 15 พันล้านจุดข้อมูล
- Stockfish 16 ถูกใช้เป็นเอนจินหมากรุกระดับล้ำสมัย
- ชุดข้อมูลแบ่งตามเป้าหมายการทำนาย
-
Action-Value
-
Behavioral Cloning
-
State-Value
puzzles.csvสำหรับการประเมินโจทย์- ตัวอย่างขนาดดาวน์โหลดมีดังนี้
- Train Action-Value: shard แรก 1.2GB, ทั้งหมด 1.1TB, รวม 2148 shard
- Train Behavioral Cloning: 34GB
- Train State-Value: 36GB
- Test Action-Value: 141MB
- Test Behavioral Cloning: 4.1MB
- Test State-Value: 4.4MB
- Puzzles: 4.5MB
-
โมเดลและการตั้งค่าการทดลอง
- Transformer ถูกฝึกสูงสุดถึง 270M พารามิเตอร์
- การฝึกดำเนินด้วย supervised learning บน ChessBench
- การทดลองเปรียบเทียบผลกระทบของปัจจัยต่อไปนี้
- ขนาดชุดข้อมูล
- ขนาดโมเดล
- ประเภทสถาปัตยกรรม
- เป้าหมายการทำนาย: state-values, action-values, behavioral cloning
- โมเดลที่ใหญ่ที่สุดทำนาย action-values บนกระดานใหม่ได้ค่อนข้างแม่นยำ แสดงให้เห็นการ generalize ที่มากกว่าการท่องจำแบบง่าย ๆ
ประสิทธิภาพแบบไม่ใช้การค้นหาและตัวเปรียบเทียบ
- นโยบายหมากรุกสุดท้ายแก้โจทย์หมากรุกยาก ๆ ได้ โดยไม่ใช้การค้นหาแบบชัดเจน
- ทำ Elo 2895 ใน Lichess blitz เมื่อเล่นกับมนุษย์ แสดงประสิทธิภาพระดับแกรนด์มาสเตอร์
- ตัวเปรียบเทียบมี Leela Chess Zero และ AlphaZero รวมอยู่ด้วย
- ทั้งสองระบบถูกเปรียบเทียบในฐานะโมเดลที่ฝึกด้วย self-play
- เปรียบเทียบทั้งกรณีที่ใช้การค้นหาและไม่ใช้การค้นหา
- สามารถประมาณและ distill อัลกอริทึมแบบใช้การค้นหาของ Stockfish ไปยัง Transformer ขนาดใหญ่ได้ดีมาก แต่ การ distill อย่างสมบูรณ์ ยังทำไม่ได้
โครงสร้างรีโพซิทอรีและลำดับการรัน
- ไดเรกทอรีและไฟล์หลักมีบทบาทดังนี้
src/engines: อินเทอร์เฟซของ Stockfish, Leela Chess Zero และเอนจินโครงข่ายประสาทsrc/transformer.py: Decoder-only Transformersrc/train.py: สคริปต์ตัวอย่างสำหรับการฝึกและประเมินsrc/puzzles.py: สคริปต์ประเมินโจทย์src/tournament.py: สคริปต์ทัวร์นาเมนต์ Elosrc/searchless_chess.ipynb: โน้ตบุ๊กวิเคราะห์พฤติกรรมโมเดลsrc/tokenizer.py: การ tokenize กระดานหมากรุก
- checkpoint ที่ฝึกล่วงหน้ามีให้สำหรับโมเดล
9M,136M,270M - ในโน้ตบุ๊กวิเคราะห์พฤติกรรมโมเดล สามารถทำการวิเคราะห์อย่างการคำนวณอัตราชนะของตาที่ถูกกติกาทั้งหมดได้
การติดตั้งและ dependency
- สภาพแวดล้อมรันต้องใช้ Python 3.10
- ติดตั้ง dependency ที่จำเป็นด้วย
pip install -r requirements.txt - หากมี GPU แนะนำให้ติดตั้ง JAX ที่รองรับ CUDA เพื่อการฝึกที่เร็วขึ้น
- ตัวอย่างใช้คำสั่งติดตั้ง
jax[cuda12_pip]สำหรับ CUDA 12 - เวอร์ชัน JAX ต้องตรงกับการติดตั้ง CUDA ที่ใช้อยู่
- ตัวอย่างใช้คำสั่งติดตั้ง
- ต้องติดตั้งเอนจินและเครื่องมือภายนอก
การประเมินและวิธีใช้
- การฝึกในเครื่องรันจาก
srcด้วยpython train.py- checkpoint จะถูกบันทึกไว้ที่
/checkpoints/local
- checkpoint จะถูกบันทึกไว้ที่
- การประเมินโจทย์รันในรูปแบบ
python puzzles.py --num_puzzles 10 --agent=local - agent ที่
puzzles.pyรองรับมีดังนี้- โมเดลที่ฝึกในเครื่อง:
local - โมเดลที่ฝึกล่วงหน้า:
9M,136M,270M - Stockfish:
stockfish,stockfish_all_moves - Lc0:
leela_chess_zero_depth_1,leela_chess_zero_policy_net,leela_chess_zero_400_sims
- โมเดลที่ฝึกในเครื่อง:
- การคำนวณ Elo ทำโดยสร้างเกมด้วย
python tournament.py --num_games=200แล้วใช้ BayesElo อ่านdata/tournament.pgnเพื่อคำนวณ
ไลเซนส์และข้อจำกัด
- ซอฟต์แวร์เผยแพร่ภายใต้ Apache License 2.0
- น้ำหนักโมเดลอยู่ภายใต้ไลเซนส์ Creative Commons Attribution 4.0
- ชุดข้อมูลบางส่วนอยู่ภายใต้ไลเซนส์ Creative Commons CC0 public domain ของ lichess.org ส่วนที่เหลืออยู่ภายใต้ไลเซนส์ CC-BY
- สิ่งที่เผยแพร่ให้มาในสภาพ
"AS IS"โดยไม่มีการรับประกันทั้งโดยชัดแจ้งหรือโดยนัย - โปรเจกต์นี้ไม่ใช่ผลิตภัณฑ์อย่างเป็นทางการของ Google
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
อาจจะนอกประเด็นเล็กน้อย แต่ผมสงสัยว่า คอมพิวเตอร์หมากรุกที่ไม่ได้อยู่ระดับ GM ตอนนี้ไปถึงไหนแล้ว
บางครั้งผมอยากเล่นกับคู่แข่งที่ฝีมือใกล้เคียงกับผม หรือคู่แข่งที่เรตติ้งสูงกว่าผมสัก 100 คะแนนเพื่อใช้ฝึกซ้อม
เอนจินส่วนใหญ่ทำให้อ่อนลงได้ด้วยการลดความลึกในการค้นหา แต่โดยทั่วไปมันทำงานได้ไม่ค่อยดีนัก ถ้าลดลงพอ ผมก็จะชนะได้ประมาณครึ่งหนึ่งก็จริง แต่เกมส่วนใหญ่ยังให้ความรู้สึกว่าผมโดนกดอยู่ตลอด แล้วเอนจินพลาดหนักหนึ่งหรือสองครั้งจนผมชนะ
สิ่งที่ต้องการคือคู่แข่งคอมพิวเตอร์ที่เล่นในระดับที่ผมเลือก แต่ให้ความรู้สึกเหมือน ผู้เล่นมนุษย์ทั่วไป ในช่วงเรตติ้งนั้นๆ เลยสงสัยว่ามีเอนจินแบบนี้หรือไม่
มีอยู่หลายครั้งที่รู้สึกว่า “เหมือนมนุษย์” จริงๆ เช่น ตกหลุมพรางที่ถ้าเป็นอัลกอริทึมค้นหาแบบดั้งเดิมก็น่าจะหลบได้ง่าย แต่มนุษย์มีโอกาสติด
ปรับแต่งไม่ได้ แต่มีอยู่หลายเวอร์ชันที่เรตติ้งต่างกัน อย่างไรก็ตามช่วงเรตติ้งไม่ได้กว้างมาก
https://www.maiachess.com/
https://lichess.org/@/maia1
ยิ่งเรตติ้งผู้เล่นสูงขึ้น การคาดเดาตาถัดไปก็ยิ่งยากขึ้น เพราะต้องโมเดลไม่ใช่แค่การเลือกตาที่ดูเป็นธรรมชาติ แต่ต้องโมเดล กระบวนการค้นหา เองด้วย
ยังสามารถฝึกจากบันทึกเกมของผู้เล่นคนใดคนหนึ่งโดยเฉพาะเพื่อทำให้เป็นส่วนตัวมากขึ้นได้
ใช้แนวทางคล้าย Maia แต่เป็นโครงข่ายประสาทคนละแบบกัน จึงมีประสิทธิภาพในการทำนายตาให้ตรงกันดีกว่าเล็กน้อย และผมยังใส่อัลกอริทึมเพิ่มค่าสูงสุดของค่าคาดหวังเข้าไป เพื่อให้บ็อตเจาะจุดพลาดของผม
ถ้าเล่นไม่นิ่งพอ ก็แพ้ไปเลย
เท่าที่ผมดู ฟีเจอร์นี้ดูเหมือนจะหายไปแล้ว มันให้ความรู้สึกเหมือนพลาดแบบมนุษย์เมื่อโดนกดดัน ต่างจากการเล่นเหมือนคอมพิวเตอร์แล้วสุ่มเดินโง่ๆ เป็นบางครั้ง เป็นคอมพิวเตอร์ตัวเดียวที่ผมรู้สึกว่าเหมือนคู่แข่งจริงๆ
ความรู้สึกว่าอีกฝ่ายก็เล่นดี แต่โดยรวมแล้วผมเล่นดีกว่านิดหน่อยจึงชนะอย่างสมควรนั้นเกิดขึ้นได้น้อยมาก
แทบทุกครั้งมันดูเหมือนไม่ใช่ผมชนะ แต่เป็นอีกฝ่ายแพ้ เรื่องนี้ไม่ใช่ปัญหาของ AI เท่านั้น
ถ้าสร้าง AI ที่แพ้ให้อย่างน่าพอใจใน เกมสมมาตร และทำให้การแพ้เป็นประสบการณ์การเรียนรู้ที่น่าพอใจได้ นั่นจะเป็นธุรกิจมูลค่า 1 พันล้านดอลลาร์ ผมคิดว่าทำได้ยากถ้าไม่มีงานวิจัยจิตวิทยาอย่างจริงจัง
ผมเคยบรรยายเรื่องนี้ และเขียนสรุปเนื้อหาบรรยายไว้ด้วย[1] งานวิจัยชิ้นนี้เป็นตัวอย่างที่ดีของ knowledge distillation
มันไม่เชิงเป็นงานวิจัยเกี่ยวกับหมากรุกเอง แต่ใกล้เคียงกับงานที่แสดงให้เห็นว่า ฟังก์ชันค้นหาไม่เชิงเส้นที่ซับซ้อนซึ่งผู้เชี่ยวชาญปรับแต่งไว้ สามารถถูกกลั่นออกมาเป็น โมเดล Transformer ที่แทบจะเป็นเชิงเส้น เมื่ออินพุตถูกทำให้เป็นมาตรฐานแบบหมากรุก
[1]: https://hlfshell.ai/posts/deepmind-grandmaster-chess-without...
ดังนั้นเวลาอาจเป็นปัจจัยสำคัญ มนุษย์มีโอกาสแพ้เวลา หรือพลาดเมื่อเหลือเวลาน้อย
จุดที่มันเรียนรู้ฟังก์ชันประเมินผลที่ดีมากได้แม้ไม่มีการค้นหายังคงน่าทึ่ง แต่ผมอยากให้ตัดเกมที่ Stockfish fallback ทำงานออกไปดูด้วย สำหรับมนุษย์ เมตใน 2 ตากับเมตใน 10 ตาก็เป็นความต่างระหว่างชนะกับเสมอ/แพ้ในแง่การแพ้เวลา
ผมอยากเห็นการดวลตรงๆ กับ Stockfish ที่จำกัดความลึกการค้นหาด้วย แบบนั้นน่าจะพอทำให้รู้คร่าวๆ ได้ว่าฟังก์ชันประเมินผลนี้กลั่นส่วนใดของ search tree มาได้มากแค่ไหน
สำหรับคนที่อยากเริ่มต้นกับโครงข่ายประสาทสำหรับหมากรุก ขอแนะนำรีโปนี้อย่างยิ่ง: https://github.com/sgrvinod/chess-transformers
เป็นโค้ด PyTorch ที่อ่านง่าย ทำตามแนวทางการใช้งานมาตรฐาน และโครงสร้างก็คล้ายกับโครงข่ายประสาทหมากรุกที่ทำผลงานดีในปัจจุบัน
https://lczero.org/blog/2024/02/how-well-do-lc0-networks-com...
เป็นบทความที่ผู้เขียนเอนจินหมากรุกแบบโครงข่ายประสาทที่ดีที่สุดเขียนถึง งานวิจัยของ DeepMind ชิ้นนี้
ชุดข้อมูลสังเคราะห์ขนาดมหึมาที่ใช้ฝึก สุดท้ายแล้วก็สร้างขึ้นด้วยการค้นหาแบบดั้งเดิมจำนวนมากอยู่ดี จึงมีแง่ที่ชวนขำอยู่บ้าง แต่ก็ยังเจ๋งอยู่ดี
ผมจำได้ว่า Matthew Sadler ซึ่งเป็น GM และนักเขียนหมากรุก เคยตั้งค่า Leela Zero สำหรับเกมฝึกซ้อมให้เล่นแทบจะด้วยสัญชาตญาณล้วนๆ โดยให้ค้นหาน้อยมากหรือไม่ค้นหาเลย
ปกติเขาจะชนะ แต่ก็ไม่ใช่ทุกครั้ง อาจจะอยู่ใน The Silicon Road to Chess Improvement
ถ้าสร้างข้อมูลฝึกโดยรัน Stockfish กับทุกตำแหน่งบนกระดานในทุกเกม สุดท้ายแล้วก็เท่ากับกำลัง encode search tree ลงในโมเดล Transformer ไม่ใช่หรือ?
ถ้าอย่างนั้น ยิ่งเพิ่มจำนวนพารามิเตอร์ของโมเดล ก็ยิ่งบรรจุ search tree ได้มากขึ้นและประสิทธิภาพก็ดีขึ้น แต่มันดูไม่น่าสนใจเท่าไร
repository นี้มี implementation ของบทความของเรา Grandmaster-Level Chess Without Search: https://arxiv.org/abs/2402.04494
ความก้าวหน้าครั้งใหญ่ของแมชชีนเลิร์นนิงในช่วงหลังมักมาจาก scale เป็นหลัก กล่าวคือสถาปัตยกรรมขนาดใหญ่ที่อิง attention และชุดข้อมูลขนาดมหาศาลอย่างไม่เคยมีมาก่อน บทความนี้ศึกษาผลกระทบของการเรียนรู้ขนาดใหญ่ในหมากรุก
ต่างจาก chess engine แบบดั้งเดิมที่พึ่งพา heuristic ซับซ้อน การค้นหาอย่างชัดเจน หรือการผสมผสานทั้งสองอย่าง เราใช้ supervised learning ฝึก โมเดล Transformer 270 ล้านพารามิเตอร์ ด้วยชุดข้อมูลเกมหมากรุก 10 ล้านเกม
แต่ละกระดานในชุดข้อมูลถูกใส่ annotation เป็นค่าของการกระทำโดยเอนจิน Stockfish 16 ที่แข็งแกร่ง ทำให้มี data point ประมาณ 15 พันล้านรายการ
โมเดลที่ใหญ่ที่สุดทำคะแนน Lichess blitz Elo 2895 เมื่อแข่งกับมนุษย์ และแก้ปริศนาหมากรุกยาก ๆ ได้โดยไม่ต้องมีการปรับแต่งเฉพาะโดเมนหรืออัลกอริทึมค้นหาอย่างชัดเจน
นอกจากนี้ยังเหนือกว่า policy/value network ของ AlphaZero ที่ไม่มี MCTS และ GPT-3.5-turbo-instruct ด้วย จากการสำรวจขนาดของโมเดลและชุดข้อมูลอย่างเป็นระบบ พบว่าความสามารถเล่นหมากรุกที่แข็งแกร่งจะปรากฏเมื่อมีขนาดใหญ่เพียงพอเท่านั้น และยังทำ ablation experiment อย่างกว้างขวางกับทางเลือกด้านการออกแบบและไฮเปอร์พารามิเตอร์ด้วย
ถ้ามีเอนจินที่คิดเหมือนมนุษย์มากกว่านี้ก็คงดี วิธีนี้ใช้ บันทึกเกมที่ Stockfish ใส่ annotation ดังนั้นโดยพื้นฐานแล้วน่าจะทำให้คิดเหมือนคอมพิวเตอร์
ถ้าคิดเหมือนมนุษย์ได้ มันจะเหมาะมากสำหรับการรีวิวเกม โดยช่วยชี้ในแต่ละตำแหน่งว่าควรมองอะไร ตามระดับ Elo ของผม
เหตุผลที่ Magnus Carlsen ยอดเยี่ยมคือ เมื่อเทียบกับคอมพิวเตอร์แล้ว เขามาถึงระดับฝีมือหมากรุกปัจจุบันได้ภายใต้ข้อจำกัดด้านเวลาและการคำนวณที่มหาศาล ประสิทธิภาพการเรียนรู้ของเขาโดดเด่นเมื่อเทียบกับ chess engine ใด ๆ
ให้ความรู้สึกเหมือนโปรแกรมใน demoscene จริง ๆ แล้วก็มี โปรแกรมหมากรุกขนาด 1KB ที่ทำงานได้จริงอยู่ด้วย
ถ้าแก้หมากรุกได้สมบูรณ์ จะได้ tree ที่ใหญ่เกินกว่าจะคำนวณได้ในปัจจุบัน ผมจำได้คร่าว ๆ ว่าประมาณ 10^80 แต่อาจจำผิดก็ได้
ถ้าใส่ annotation ให้ tree นั้นเป็นชนะ/แพ้/เสมอ ก็จะมีผู้เล่นที่เล่นได้เหมาะที่สุดโดยไม่ต้องค้นหา
แนวทางที่ชัดเจนสองทางสำหรับการบีบอัดและการปรับให้เหมาะสมคือ การประมาณ tree หรือการประมาณ annotation วิธีทั้งสองจะทำงานได้ดีแค่ไหนขึ้นอยู่กับโครงสร้างของ tree เป็นอย่างมาก
ผลลัพธ์นี้ดูเหมือนจะแสดงให้เห็นว่า game tree ของหมากรุกเข้ากับสองแนวทางนี้ได้ดีเพียงใด มากกว่าจะแสดงพลังสัมบูรณ์ของแนวทางการเรียนรู้เอง ข้อสรุปที่ผมได้คือ การประมาณ tree นั้นอย่างสมเหตุสมผลสามารถทำได้ด้วย ข้อมูลขนาด 270 ล้านคำ
หมากรุกถูกแก้แล้วเมื่อเหลือตัวหมากบนกระดาน 7 ตัว ด้วยฐานข้อมูลขนาด 18.4TB ซึ่งอธิบายไว้ที่นี่: https://lichess.org/@/lichess/blog/7-piece-syzygy-tablebases...