@PlayChessCoach在LICHESS上:觀看|統計|挑戰(1+0或0+1最多15+10)
Chesscoach是一種基於神經網絡的國際象棋引擎,能夠進行自然語言評論。它以大約3450 ELO的評分下棋,這意味著它通常應該擊敗2850 ELO和許多其他發動機,但通常會損失最強的發動機,例如3550 ELO的Stockfish 14。
與所有發動機一樣,Chesscoach依靠檢查數百萬個國際象棋位置來決定最佳比賽。它使用一個大型,慢的神經網絡,例如Alphazero或Leela Chess Zero(LC0)來評估每個位置,與經典的發動機不同,它旨在以更簡單的評估或更新的NNUE發動機進行速度,或者是兩種樣式的更強混合物。
發動機核心的神經網絡通過對抗自身的訓練,使用反饋週期從幾乎為零的知識開始 - 只是國際象棋的規則 - 並學習新的方法來擊敗自己,隨著它的增長越來越強。更強的神經網絡評估可以使其更好地搜索,並且更強大的搜索結果使其更有效地訓練其神經網絡評估。
Chesscoach還可以將其國際象棋知識提供給其他神經網絡,以評論英語的動作和位置。這不是很有見地的,而且經常是錯誤的,但是對它能夠繼續訓練的有限數據顯示出一些希望。
我開始開發Chesscoach作為一個為期兩個到三個月的項目,以了解我是否喜歡機器學習,並最終將事情帶到了我的預期。最初的計劃具有三個過於雄心勃勃的目標:複製一個小型的α型引擎,在培訓反饋週期中增加了自然語言評論,並在單個GPU工作站上進行了一定程度的培訓。
經過一年多的發展,我幾乎無法在培訓方法上取得進展。但是,我對Chesscoach產生的評論感到滿意,考慮到所有因素,並對發動機的最終實力感到驚訝。
我很幸運能提供這麼多公共資源,包括免費的雲計算和免費的論文,討論和數據。我也非常感謝許多為重要的澄清,討論和調試提供幫助的人。
Chesscoach核心的國際象棋引擎與Alphazero(Silver等人,2018年)或LC0(Linscott&Pascutto,2018年)非常相似,在神經網絡,培訓時間表和搜索算法的結構中,但具有實際的,工程的方法,可以使您有必要,從而缺乏一支更大的團隊的廣度和深度研究才能。但是,我希望有一些新想法可以在其他地方有用。
The natural-language commentary piece is most like the work of Learning to Generate Move-by-Move Commentary for Chess Games from Large-Scale Social Forum Data (Jhamtani, Gangal, Hovy, Neubig & Berg-Kirkpatrick, 2018) and Automated Chess Commentator Powered by Neural Chess Engine (Zang, Yu & Wan, 2019), but relies on a more heavily trained chess engine and larger training語料庫,儘管具有更簡單的架構。
Chesscoach的設計雖然很少和便攜。它在Linux和Windows上運行,並支持單GPU,多GPU和張量處理單元(TPU)。面向性能的代碼在C ++(10.5k行)中,神經網絡代碼在Python(3.7k行),依賴於TensorFlow 2。Stockfish代碼用於位置管理,移動生成和最終遊戲遊戲表鍵探測,但不用於搜索或評估。根據Alphazero計劃的4400萬場比賽和700,000個培訓批次,分別為4,096個職位,在Chesscoach項目中已經完全生成了自我遊戲培訓數據。
Alphazero以外的一些想法,但存在於文學和Katago(Wu,2020年)和LC0等項目中(通常我認為我正在嘗試新事物,但事實證明LC0的聰明人幾乎嘗試了一切)。其中包括提供伴侶,最終遊戲桌探測器,最小值最小值,隨機重量平均(SWA),指數加權的移動平均值(EWMA),各種勘探激勵措施,預測緩存,輔助訓練目標和知識蒸餾。
我相信有些想法是新的。第一個是一種搜索方法,旨在避免戰術陷阱,並通過線性探索和選擇性反向傳播來最大程度地減少簡單的遺憾,這是通過消除 - sble-puct應用的。第二個是一種簡單的神經結構,用於對位置的自然語言評論,並與核心採樣(TOP-P)的調整相結合,重點介紹了正確性 - covet variety-covet採樣。
結果是一套下棋,訓練神經網絡,優化參數,測試強度,過程培訓數據,視圖和調試訓練數據,組織培訓數據,單位測試和坐標簇的工具。為了結束該項目,可以在https://lichess.org/@/playchesscoach上設置一個機器人,以與挑戰者和其他機器人一起玩遊戲,並向觀眾提供評論。
在較新的V3-8 Cloud TPU VM上:
gui命令來實現引擎搜索。一些關鍵文件位於根部,包括config.toml驅動大多數工具,並從C ++和Python代碼中讀取。 Meson.build定義Linux構建,以及CPP/Chesscoach.sln和CPP/**/*。vcxproj定義Windows構建。 setup.sh/.cmd和build.sh/.cmd腳本自動設置和構建,儘管需要其他步驟。根源的Dockerfiles定義了每個群集工人角色的圖像,而Docker - *。SH腳本有助於構建和上傳這些圖像。
在群集目錄中,.SH/.YAML文件在較舊式的TPU上管理Kubernetes群集,而PY/Alpha.py在較新的雲TPU VMS上管理群集。
CPP目錄包含C ++代碼,主要在CPP/ChessCoach中。 Chesscoach C ++代碼主要以性能為導向。第三方庫包括CPP/CRC32C,CPP/HUNSPELL,CPP/NOMPY,CPP/PROTOBUF-3.13.0,CPP/Stockfish,CPP/TCLAP,CPP/TOML11和CPP/Zlib。第三方數據包括CPP/詞典和CPP/強度測試。使用高級軟件包工具(APT)安裝了其他第三方C ++庫,並由Linux上的Meson Build System發現,並在Windows上使用Nuget安裝和發現。 CPP/Protobuf庫是使用ProtoC工具和CPP/Protobuf/Chesscoach.proto來生成的。
PY Directory包含Python代碼,由C ++通過Network.py訪問,也包含一些獨立的腳本工具。 Chesscoach Python代碼主要與神經網絡和雲存儲有關。使用PIP安裝其他第三方Python庫。
JS目錄包含Chesscoachgui和Chesscoachuci中使用的DEBUG GUI,依靠Chessboardjs。
工具目錄包含可樂CLI和貝內斯洛,用於跑步和計算參與者的ELO等級,以及stockfish Fish Fisher 13 Engine二進制二進制二進製文件,以充當對手。
腳本目錄包含各種情況腳本和便利。
文檔目錄包含文檔和支持資產。
安裝後,Chesscoach在Linux上的/usr/local/local/share/chesscoach找到靜態數據,並與Windows中的二進制數據一起。它將動態數據定位在$ {XDG_DATA_HOME}/CHESSCOACH,或者在Linux上的〜/.local/share/Chesscoach和localappdata%/Chesscoach in Windows上的〜/.local/share/chesscoach失敗。動態數據也可以位於Google雲存儲中;例如,gs:// chesscoach-eu/chesscoach。
如果在Google Cloud上運行,它可以簡化GPU設置,以使用CUDA 11使用預構建的深度學習磁盤圖像。
./setup.sh (可能需要30分鐘才能從源構建Protobuf)。pip3 install -r requirements-all.txt 。sudo ./build.sh release install 。./setup.sh (可能需要30分鐘才能從源構建Protobuf)。pip3 install -r requirements-all.txt 。sudo ./build.sh release install 。./setup.sh (可能需要30分鐘才能從源構建Protobuf)。pip3 install tf-models-official==2.5.0 (這堵塞了預安裝的TF-nightly)。pip3 uninstall tensorflow tf-slim tf-nightly 。--force-reinstall安裝私人TF-night封裝軟件包。sudo ./build.sh release install 。conda activate chesscoach ,但是如果不使用虛擬環境時,這是可以的。setup.cmd (在運行activate_virtual_env.cmd之後,將其設置為Chesscoach_pythonhome)。build.cmd 。Chesscoach依賴於安裝的數據,以$ {XDG_DATA_HOME}/CHESSCOACH,或者在Linux上的〜/.local/.local/share/chesscoach和localappdata%/chesscoach in Windows上的〜/.local/share/chesscoach失敗。
安裝神經網絡重量。這需要372 MIB下載和406個MIB磁盤空間。
scripts/download_install_data.sh 。scripts/download_install_data.cmd 。可選地,安裝Syzygy最終賽場表播。 3-4-5件的文件大約需要1個gib,而3-4-5 + 6件的文件大約需要150個gib。安裝過程有些技術性。
在雲存儲模式下,Syzygy表將在啟動時自動複製到本地存儲。
腳本腳本/ramdisk_syzygy6.sh SH在諸如新風格的雲TPU VM之類的機器上設置了一個RAM磁盤,以主機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以創建一個服務帳戶和相應的鍵.json文件。gsutil cp將key.json複製到key_path 。技術解釋中的分佈式培訓和自我播放部分提供了更多有關管理老年風格和新型群集的信息。
大多數Chesscoach程序都取決於構建和安裝的config.toml。在運行ChessCoACHUCI時,設置search_threads參數(通過構建時間在運行時通過config.toml或在運行時uci選項)設置search_threads參數,以避免從不公平的預測計劃中避免線程飢餓。
Chesscoachuci二進制可以在各種國際象棋中加載作為UCI發動機。
但是,當使用python的虛擬環境時,可能有必要:
Chesscoachuci除了UCI協議外,還提供自定義命令:
comment為當前位置和最後一步發揮了自然語言評論。最好通過position startpos moves …命令提供全部移動歷史記錄。gui標記啟動搜索時發射的調試GUI(如高級解釋中的圖9所示)。~ puct [moves …] [csv]以文本形式顯示debug GUI數據。~ fen顯示了福賽斯 - 愛德華式符號(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 。
您還可以在Visual Studio中運行/調試ChessCoachTest項目,或在Visual Studio中使用Test Explorer界面。
Google的TPU研究雲(TRC)計劃對使該項目成為可能的計算資源非常慷慨,我特別感謝Jonathan Caton使事情實現。
我非常感謝Google的Cloud TPU團隊使用Cloud TPU VM,尤其是Michael Banfield在新技術的整個Alpha中提供工程援助。
我衷心感謝Karlson Pfannschmidt(Paderborn University),其國際象棋調整工具和貝葉斯 - 滑雪鞋的實施以及有關貝葉斯優化的建議對於加強Chesscoach引擎是無價的。
我非常感謝Matthew Lai(DeepMind)以獨立的能力,重要的澄清,對Alphazero論文提供重要的澄清。
我感謝Pierre de Wulf提供了有關CrapingBee的研究學分,以便在Chesscoach進行自然語言評論培訓。
感謝Ted Li在項目開始時的寶貴想法和討論。
感謝Freya Wilcox的圖表原型。
特別感謝Gary Butner和Lynelle Rafton的編輯,校對和支持。
Chesscoach根據GPLV3或更高版本發布。
克里斯·巴特納(Chris Butner),[email protected]