@PlayChessCoach on lichess: ดู | สถิติ | ความท้าทาย (1+0 หรือ 0+1 ถึง 15+10)
Chesscoach เป็นเครื่องยนต์หมากรุกที่ใช้เครือข่ายประสาทที่มีความสามารถในการวิจารณ์ภาษาธรรมชาติ มันเล่นหมากรุกที่มีคะแนนประมาณ 3450 ELO ซึ่งหมายความว่าควรเอาชนะผู้เล่นที่แข็งแกร่งที่สุดที่ 2850 ELO และเครื่องยนต์อื่น ๆ อีกมากมาย แต่มักจะสูญเสียความแข็งแกร่งที่สุดเช่น Stock Fish 14 ที่ 3550 ELO
เช่นเดียวกับเครื่องยนต์ทั้งหมด Chesscoach อาศัยการตรวจสอบตำแหน่งหมากรุกหลายล้านตำแหน่งเพื่อตัดสินใจเกี่ยวกับการย้ายที่ดีที่สุดในการเล่น มันใช้เครือข่ายประสาทขนาดใหญ่ที่ช้าเช่นเดียวกับ Alphazero หรือ Leela Chess Zero (LC0) เพื่อประเมินแต่ละตำแหน่งซึ่งแตกต่างจากเครื่องยนต์คลาสสิกซึ่งมีจุดมุ่งหมายสำหรับความเร็วด้วยการประเมินที่ง่ายกว่ามาก
เครือข่ายประสาทที่เป็นแกนหลักของเครื่องยนต์ได้รับการฝึกฝนโดยการเล่นกับตัวเองโดยใช้วงจรการตอบรับเพื่อเริ่มต้นจากความรู้เกือบเป็นศูนย์ - เพียงแค่กฎของหมากรุก - และเรียนรู้วิธีการใหม่ ๆ ในการเอาชนะตัวเองเมื่อมันแข็งแกร่งขึ้น การประเมินเครือข่ายประสาทที่แข็งแกร่งขึ้นช่วยให้มันค้นหาได้ดีขึ้นและผลการค้นหาที่แข็งแกร่งขึ้นทำให้มันฝึกอบรมการประเมินเครือข่ายประสาทได้อย่างมีประสิทธิภาพมากขึ้น
Chesscoach ยังสามารถป้อนความรู้ของหมากรุกลงในเครือข่ายประสาทเพิ่มเติมเพื่อแสดงความคิดเห็นเกี่ยวกับการเคลื่อนไหวและตำแหน่งเป็นภาษาอังกฤษ มันไม่ได้ลึกซึ้งและมักจะผิด แต่แสดงให้เห็นถึงคำสัญญาสำหรับข้อมูลที่ จำกัด ที่สามารถฝึกอบรมได้
ฉันเริ่มพัฒนา Chesscoach เป็นโครงการสองถึงสามเดือนเพื่อดูว่าฉันชอบการเรียนรู้ของเครื่องจักรและจบลงด้วยการทำสิ่งต่าง ๆ เกินกว่าที่ฉันคาดไว้ แผนเดิมมีเป้าหมายที่ทะเยอทะยานมากเกินไปสามประการ: การจำลองเครื่องยนต์คล้าย alphazero ขนาดเล็กเพิ่มความเห็นภาษาธรรมชาติให้กับวงจรข้อเสนอแนะการฝึกอบรมและทำให้การฝึกอบรมในระดับหนึ่งเป็นไปได้บนเวิร์กสเตชัน GPU เดียว
หลังจากการพัฒนามานานกว่าหนึ่งปีฉันสามารถอ้างสิทธิ์ได้แทบจะไม่มีความคืบหน้าเกี่ยวกับวิธีการฝึกอบรม อย่างไรก็ตามฉันมีความสุขกับคำอธิบายที่ Chesscoach ผลิตทุกสิ่งที่พิจารณาและประหลาดใจกับความแข็งแกร่งของเครื่องยนต์ในที่สุด
ฉันโชคดีที่มีแหล่งข้อมูลสาธารณะมากมายรวมถึงการคำนวณคลาวด์ฟรีและเอกสารการอภิปรายและข้อมูลฟรี ฉันรู้สึกขอบคุณมากกับหลาย ๆ คนที่ได้ช่วยด้วยการชี้แจงที่สำคัญการอภิปรายและการดีบัก
เครื่องยนต์หมากรุกที่เป็นแกนหลักของ Chesscoach นั้นคล้ายกับของ Alphazero (Silver et al., 2018) หรือ LC0 (Linscott & Pascutto, 2018) ในโครงสร้างของเครือข่ายประสาทตารางการฝึกอบรมและอัลกอริทึมการค้นหา อย่างไรก็ตามฉันหวังว่าจะมีแนวคิดใหม่ ๆ ที่มีประโยชน์ในที่อื่น
คำวิจารณ์ภาษาธรรมชาติเป็นเหมือนงานการเรียนรู้ที่จะสร้างคำอธิบายที่ย้ายไปมาสำหรับเกมหมากรุกจากข้อมูลฟอรัมสังคมขนาดใหญ่ (Jhamtani, Gangal, Hovy, Neubig & Berg-Kirkpatrick, 2018) คอร์ปัสแม้ว่าจะมีสถาปัตยกรรมที่เรียบง่ายมากขึ้น
Chesscoach ได้รับการออกแบบให้ค่อนข้างน้อยและพกพา มันทำงานบน Linux และ Windows และรองรับหน่วยประมวลผล Single-GPU, Multi-GPU และ TENSOR (TPUs) รหัสที่เน้นประสิทธิภาพอยู่ใน C ++ (10.5K บรรทัด) และรหัสเครือข่ายประสาทอยู่ใน Python (เส้น 3.7K) โดยอาศัย TensorFlow 2. รหัสสต็อกฟิชสำหรับการจัดการตำแหน่งการสร้างการเคลื่อนย้าย ข้อมูลการฝึกอบรมการเล่นด้วยตนเองได้รับการสร้างขึ้นอย่างสมบูรณ์ภายในโครงการ Chesscoach ตามตาราง Alphazero ของ 44 ล้านเกมและ 700,000 ชุดการฝึกอบรม 4,096 ตำแหน่งแต่ละตำแหน่ง
ความคิดบางอย่างที่นอกเหนือจาก Alphazero แต่มีอยู่ในวรรณคดีและโครงการต่าง ๆ เช่น Katago (Wu, 2020) และ LC0 ได้ถูกรวมเข้าด้วยกัน (บ่อยครั้งที่ฉันคิดว่าฉันกำลังลองอะไรใหม่ ๆ แต่กลับกลายเป็นว่าคนฉลาดที่ LC0 ได้ลองเกือบทุกอย่าง) สิ่งเหล่านี้รวมถึงการให้คู่ครอง, การตรวจจับตารางเวลา endgame, endgame minimax, ค่าเฉลี่ยน้ำหนักสุ่ม (SWA), ค่าเฉลี่ยเคลื่อนที่แบบทวีคูณ (EWMA), แรงจูงใจในการสำรวจต่างๆ, การแคชการทำนาย, เป้าหมายการฝึกอบรมเสริมและการกลั่นความรู้
ฉันเชื่อว่าความคิดบางอย่างเป็นเรื่องใหม่ อย่างแรกคือวิธีการค้นหาที่มีจุดมุ่งหมายเพื่อหลีกเลี่ยงกับดักยุทธวิธีและลดความเสียใจอย่างง่าย ๆ ผ่านการสำรวจเชิงเส้นและการเลือก backpropagation ที่เลือกใช้ผ่านการกำจัด-sble-puct ประการที่สองคือสถาปัตยกรรมระบบประสาทที่เรียบง่ายสำหรับความเห็นภาษาธรรมชาติเกี่ยวกับตำแหน่งและการเคลื่อนไหวร่วมกับการประยุกต์ใช้การสุ่มตัวอย่างนิวเคลียส (บนสุด) ที่เน้นไปที่ความถูกต้องกับความแปรปรวน-การสุ่มตัวอย่างโลภ
ผลลัพธ์คือชุดเครื่องมือในการเล่นหมากรุกฝึกอบรมเครือข่ายประสาท, เพิ่มประสิทธิภาพพารามิเตอร์, ความแข็งแกร่งของการทดสอบ, ข้อมูลการฝึกอบรมกระบวนการ, ดูและดีบักข้อมูลการฝึกอบรม, จัดระเบียบข้อมูลการฝึกอบรม, การทดสอบหน่วยและประสานงานกลุ่ม ในการปิดโครงการบอทจะถูกจัดตั้งขึ้นที่ https://lichess.org/@/playchesscoach เพื่อเล่นเกมกับผู้ท้าชิงและบอทอื่น ๆ และให้คำอธิบายแก่ผู้ชม
บนคลาวด์ V3-8 รูปแบบใหม่ TPU VM:
gui ก่อนที่จะค้นหาไฟล์คีย์บางไฟล์อยู่ที่รูทรวมถึง config.toml ซึ่งขับเคลื่อนเครื่องมือส่วนใหญ่และอ่านจากรหัส C ++ และ Python Meson.build กำหนด Linux Build และ CPP/ChessCoach.SLN และ CPP/**/*. VCXPROJ กำหนด Windows Build setup.sh/.cmd และ build.sh/.cmd สคริปต์การตั้งค่าและการสร้างอัตโนมัติแม้ว่าจะต้องใช้ขั้นตอนเพิ่มเติม Dockerfiles ที่รูทกำหนดรูปภาพสำหรับแต่ละบทบาทของคนงานคลัสเตอร์และนักเทียบท่า-*. สคริปต์ SH ช่วยในการสร้างและอัปโหลดภาพเหล่านี้
ในไดเรกทอรีคลัสเตอร์ไฟล์. sh/.yaml จัดการกลุ่ม Kubernetes บน TPU แบบเก่ากว่าในขณะที่ PY/Alpha.py จัดการกลุ่มบน Cloud TPU VM แบบใหม่
ไดเรกทอรี CPP มีรหัส C ++ ส่วนใหญ่อยู่ใน CPP/ChessCoach CHESSCOACH C ++ รหัสส่วนใหญ่เป็นประสิทธิภาพ ห้องสมุดบุคคลที่สาม ได้แก่ CPP/CRC32C, CPP/Hunspell, CPP/NUMPY, CPP/Protobuf-3.13.0, CPP/Stockfish, CPP/TCLAP, CPP/TOML11 และ CPP/ZLIB ข้อมูลของบุคคลที่สามรวมถึง CPP/พจนานุกรมและ CPP/StrengthTests ไลบรารี C ++ ของบุคคลที่สามเพิ่มเติมได้รับการติดตั้งโดยใช้เครื่องมือแพ็คเกจขั้นสูง (APT) และค้นพบโดยระบบ Meson Build บน Linux และติดตั้งและค้นพบโดยใช้ NuGet บน Windows ไลบรารี CPP/Protobuf นั้นสร้างจากรหัสโดยใช้เครื่องมือ ProToc และ CPP/Protobuf/Chesscoach.proto
ไดเรกทอรี PY มีรหัส Python เข้าถึงหลักผ่าน Network.py จาก C ++ แต่ยังรวมถึงเครื่องมือสคริปต์แบบสแตนด์อโลน CHESSCOACH PYTHON CODE ส่วนใหญ่เกี่ยวข้องกับเครือข่ายประสาทและที่เก็บข้อมูลบนคลาวด์ มีการติดตั้งไลบรารี Python ของบุคคลที่สามเพิ่มเติมโดยใช้ PIP
ไดเรกทอรี JS มีการดีบัก GUI ที่ใช้ใน Chesscoachgui และ Chesscoachuci โดยอาศัย ChessboardJs
ไดเรกทอรีเครื่องมือประกอบด้วย Cutechess-CLI และ Bayeselo สำหรับการแข่งขันทัวร์นาเมนต์และคำนวณการจัดอันดับ ELO ของผู้เข้าร่วมรวมถึง Stockfish 13 Engine Binary เพื่อทำหน้าที่เป็นคู่ต่อสู้
ไดเรกทอรีสคริปต์มีสคริปต์สถานการณ์และสิ่งอำนวยความสะดวกต่างๆ
ไดเรกทอรี DOCS มีเอกสารและสินทรัพย์สนับสนุน
หลังจากการติดตั้ง ChessCoach จะหาข้อมูลแบบคงที่ AT/USR/LOCAL/Share/ChessCoach บน Linux และข้างไบนารีใน Windows มันค้นหาข้อมูลแบบไดนามิกที่ $ {XDG_DATA_HOME}/ChessCoach หรือล้มเหลวที่ ~/.local/Share/ChessCoach บน Linux และที่ %localAppData %/ChessCoach บน Windows ข้อมูลแบบไดนามิกยังสามารถอยู่ใน Google Cloud Storage; ตัวอย่างเช่น GS: // ChessCoach-EU/ChessCoach
หากทำงานบน Google Cloud มันสามารถทำให้การตั้งค่า GPU ง่ายขึ้นเพื่อใช้อิมเมจดิสก์การเรียนรู้ลึกที่สร้างไว้ล่วงหน้าด้วย CUDA 11
./setup.sh (อาจใช้เวลา 30 นาทีในการสร้าง protobuf จากแหล่งที่มา)pip3 install -r requirements-all.txtsudo ./build.sh release install./setup.sh (อาจใช้เวลา 30 นาทีในการสร้าง protobuf จากแหล่งที่มา)pip3 install -r requirements-all.txtsudo ./build.sh release install./setup.sh (อาจใช้เวลา 30 นาทีในการสร้าง protobuf จากแหล่งที่มา)pip3 install tf-models-official==2.5.0 (นี้ปิดกั้น TF-Nighting ที่ติดตั้งไว้ล่วงหน้า)pip3 uninstall tensorflow tf-slim tf-nightly--force-reinstallsudo ./build.sh release installconda activate chesscoach แต่ก็โอเคถ้าสิ่งนี้ล้มเหลวเมื่อไม่ได้ใช้สภาพแวดล้อมเสมือนจริงsetup.cmd (สิ่งนี้ตั้งค่า chesscoach_pythonhome หลังจากเรียกใช้ activate_virtual_env.cmd)build.cmdChessCoach อาศัยข้อมูลที่ติดตั้งเป็น $ {XDG_DATA_HOME}/ChessCoach หรือล้มเหลวที่ ~/.local/Share/ChessCoach บน Linux และที่ %localAppData %/ChessCoach บน Windows
ติดตั้งน้ำหนักเครือข่ายประสาท สิ่งนี้ต้องใช้การดาวน์โหลด 372 MIB และพื้นที่ดิสก์ 406 MIB
scripts/download_install_data.shscripts/download_install_data.cmdเป็นทางเลือกติดตั้งฐานตาราง table Syzygy endgame ไฟล์สำหรับ 3-4-5 ชิ้นใช้เวลาประมาณ 1 GIB และไฟล์สำหรับ 3-4-5 + 6 ชิ้นใช้เวลาประมาณ 150 GIB กระบวนการติดตั้งค่อนข้างทางเทคนิค
ในโหมดการจัดเก็บบนคลาวด์ตาราง Syzygy จะถูกจำลองแบบโดยอัตโนมัติไปยังที่เก็บข้อมูลท้องถิ่นเมื่อเปิดตัว
สคริปต์สคริปต์/ramdisk_syzygy6.sh ตั้งค่าดิสก์ RAM บนเครื่องจักรเช่นเมฆ TPU VM แบบใหม่เพื่อโฮสต์ตาราง 3-4-5 + 6 ชิ้นเมื่อหน่วยความจำสูง แต่พื้นที่ดิสก์ต่ำ เมื่อใช้ดิสก์คุณควรวางตารางเหล่านี้ไว้บน SSD เพื่อรักษาความเร็วในการค้นหา สคริปต์สคริปต์/ramdisk_syzygy6.sh ใช้เส้นทาง…/chesscoach/syzygy6 อาศัยการเปลี่ยนแปลงการกำหนดค่าใน config.toml แต่…/chesscoach/syzygy สามารถใช้แทนได้
export PROJECT_ID=<your Google Cloud project ID>หากใช้ alpha.py (ส่วนนี้ยุ่งเป็นพิเศษ):
cluster/cluster-prep-creds.sh เพื่อสร้างบัญชีบริการและไฟล์คีย์ที่สอดคล้องกันgsutil cpส่วนการฝึกอบรมแบบกระจายและการเล่นด้วยตนเองในคำอธิบายทางเทคนิคมีข้อมูลเพิ่มเติมเกี่ยวกับการจัดการกลุ่มที่มีอายุมากกว่าและใหม่กว่า
โปรแกรม Chesscoach ส่วนใหญ่ขึ้นอยู่กับ config.toml ที่สร้างขึ้นและติดตั้ง เป็นสิ่งสำคัญอย่างยิ่งที่จะต้องตั้งค่าพารามิเตอร์ Search_threads เมื่อเรียกใช้ Chesscoachuci ไม่ว่าจะผ่าน config.toml ในเวลาสร้างหรือตัวเลือก UCI ที่รันไทม์เพื่อหลีกเลี่ยงการอดอาหารเธรดจากการตั้งเวลาการทำนายที่ไม่เป็นธรรม
Binary Chesscoachuci สามารถโหลดเป็นเครื่องยนต์ UCI ในหมากรุก Guis ต่างๆ
อย่างไรก็ตามเมื่อใช้สภาพแวดล้อมเสมือนจริงสำหรับ Python อาจจำเป็นต้อง::
Chesscoachuci เสนอคำสั่งที่กำหนดเองนอกเหนือจากโปรโตคอล UCI:
comment สร้างคำอธิบายภาษาธรรมชาติสำหรับตำแหน่งปัจจุบันและการย้ายครั้งสุดท้ายเล่น เป็นการดีที่สุดที่จะให้ประวัติการเคลื่อนไหวเต็มรูปแบบด้วย position startpos moves … คำสั่งgui ตั้งค่าสถานะการดีบัก GUI เพื่อเปิดตัวเมื่อเริ่มการค้นหา (ดังแสดงในรูปที่ 9 ในคำอธิบายระดับสูง)~ puct [moves …] [csv] แสดงข้อมูล Debug GUI ในรูปแบบข้อความ~ fen แสดงตำแหน่งปัจจุบันในสัญกรณ์ Forsyth - Edwards (FEN)สำหรับการเล่นด้วยตนเองและการฝึกอบรมให้ดูที่การเล่นด้วยตนเองและกระบวนการฝึกอบรมในเอกสารข้อมูล
สำหรับยูทิลิตี้อื่น ๆ ที่ระบุไว้ในโปรแกรมให้ค้นหาความคิดเห็นใน config.toml สำหรับคำแนะนำการกำหนดค่า สาธารณูปโภคจำนวนมากสนับสนุนอาร์กิวเมนต์ --help เนื้อหาของสคริปต์ในไดเรกทอรีสคริปต์สามารถแสดงตัวอย่างได้ เมื่อใช้สภาพแวดล้อมเสมือนจริงสำหรับ Python อาจต้องเปิดใช้งานก่อนที่จะใช้ยูทิลิตี้แม้ว่าบางคนจะไม่ขึ้นอยู่กับ Python
เรียกใช้ build/gcc/debug/ChessCoachTest หรือ build/gcc/release/ChessCoachTest
เรียกใช้ activate_virtual_env.cmd จากนั้น cpp/x64/Debug/ChessCoachTest.exe หรือ cpp/x64/Release/ChessCoachTest.exe
นอกจากนี้คุณยังสามารถเรียกใช้/ดีบักโครงการ ChessCoachTest ภายใน Visual Studio หรือใช้อินเตอร์เฟส Explorer Test Interface ภายใน Visual Studio
โปรแกรม TPU Research Cloud (TRC) ของ Google นั้นมีความใจกว้างเป็นพิเศษกับทรัพยากรการคำนวณที่ทำให้โครงการนี้เป็นไปได้และฉันขอขอบคุณ Jonathan Caton โดยเฉพาะอย่างยิ่งสำหรับการทำให้สิ่งต่าง ๆ เกิดขึ้น
ฉันรู้สึกซาบซึ้งมากกับทีมงานคลาวด์ TPU ของ Google สำหรับการใช้งาน Cloud TPU VMS และโดยเฉพาะอย่างยิ่ง Michael Banfield สำหรับความช่วยเหลือด้านวิศวกรรมตลอดอัลฟ่าของเทคโนโลยีใหม่
ฉันขอขอบคุณ Karlson Pfannschmidt (Paderborn University) ซึ่งมีเครื่องมือปรับแต่งหมากรุกและการใช้งาน Bayes-Skopt และคำแนะนำเกี่ยวกับการเพิ่มประสิทธิภาพแบบเบย์นั้นมีค่ามากในการเสริมสร้างเครื่องยนต์หมากรุก
ฉันรู้สึกขอบคุณ Matthew Lai (DeepMind) มากที่ให้ความสำคัญกับการชี้แจงที่สำคัญบนกระดาษ Alphazero
ฉันขอขอบคุณ Pierre de Wulf ที่ให้เครดิตการวิจัยสำหรับ Scrapingbee เพื่อเปิดใช้งานการฝึกอบรมความเห็นทางธรรมชาติใน Chesscoach
ขอบคุณ Ted Li สำหรับความคิดที่มีค่าและการอภิปรายเมื่อเริ่มโครงการ
ขอบคุณ Freya Wilcox สำหรับความช่วยเหลือเกี่ยวกับการสร้างต้นแบบแผนภาพ
และขอขอบคุณเป็นพิเศษสำหรับ Gary Butner และ Lynelle Rafton สำหรับการแก้ไขการพิสูจน์อักษรและการสนับสนุน
ChessCoach เปิดตัวภายใต้ใบอนุญาต GPLV3 หรือใหม่กว่า
Chris Butner, [email protected]