@playchesscoach on lichess:watch |統計|チャレンジ(1+0または0+1から15+10まで)
Chesscoachは、自然言語の解説が可能なニューラルネットワークベースのチェスエンジンです。それは約3450 ELOの評価でチェスを演奏します。つまり、通常、2850 ELOや他の多くのエンジンで最も強力な人間のプレイヤーでさえも倒すはずですが、3550 ELOのストックフィッシュ14など、最強に負けることがよくあります。
すべてのエンジンと同様に、チェスコーハは何百万ものチェスのポジションを調べて、プレイする最良の動きを決定することに依存しています。 AlphazeroやLeela Chess Zero(LC0)のように、大規模で遅いニューラルネットワークを使用して、より単純な評価、またはより最近のNNUEエンジンを対象とした古典的なエンジンとは異なり、両方のスタイルのより強いハイブリッドです。
エンジンのコアにあるニューラルネットワークは、フィードバックサイクルを使用してほぼゼロの知識(チェスのルールだけ)から始まり、より強く成長するにつれて自分自身を打ち負かす新しい方法を学びます。より強力なニューラルネットワークの評価により、検索を改善し、検索結果が強くなり、ニューラルネットワークの評価をより効果的に訓練できます。
チェスコーチはまた、チェスの知識を追加のニューラルネットワークに送り込み、英語の動きと位置についてコメントすることもできます。それはあまり洞察力がなく、しばしば間違っているが、訓練できた限られたデータにいくつかの約束を示している。
私は2〜3か月のプロジェクトとしてチェスコーチの開発を開始し、機械学習が好きで、予想以上に物事を進めてしまったかどうかを確認しました。元の計画には、小さなアルファゼロのようなエンジンの複製、トレーニングフィードバックサイクルに自然言語の解説を追加し、シングルGPUワークステーションである程度のトレーニングを可能にするという3つの過度に野心的な目標がありました。
1年以上の開発の後、トレーニング方法にほとんど進歩がないと主張することができます。しかし、チェスコーチが生産する解説に満足しています。すべてのものが考慮され、エンジンの最終的な強さに驚いています。
無料のクラウドコンピューティングや自由に利用可能な論文、ディスカッション、データなど、非常に多くの公共リソースを利用できることは幸運でした。また、重要な説明、議論、デバッグを手伝ってくれた多くの人々にも非常に感謝しています。
チェスコーハの中心にあるチェスエンジンは、ニューラルネットワークの構造、トレーニングスケジュールと検索アルゴリズムの構造で、アルファゼロ(Silver et al。、2018)またはLC0(Linscott&Pascutto、2018)のチェスエンジンと非常によく似ていますが、必要に応じて実用的なエンジニアリングアプローチを備えており、より大きなチームの幅と深さの才能を欠いています。ただし、他の場所で役立つ新しいアイデアがいくつかあることを願っています。
自然言語の解説の記事は、大規模なソーシャルフォーラムデータ(Jhamtani、Gangal、Hovy、Neubig&Berg-Kirkpatrick、2018)からチェスゲームの移動解説のコメントを生成する学習の仕事に最も似ています。より単純なアーキテクチャがありますが、コーパス。
チェスコーハは、やや最小限でポータブルになるように設計されています。 LinuxとWindowsで実行され、シングルGPU、マルチGPU、テンソル処理ユニット(TPU)をサポートします。パフォーマンス指向のコードはC ++(10.5Kライン)で、ニューラルネットワークコードはPython(3.7kライン)にあり、Tensorflow 2に依存しています。セルフプレイトレーニングデータは、4400万ゲームのアルファゼロスケジュールとそれぞれ4,096ポジションの700,000トレーニングバッチのスケジュールに続いて、Chesscoachプロジェクト内で完全に生成されました。
アルファゼロ以外のいくつかのアイデアは、カタゴ(WU、2020)やLC0などの文学やプロジェクトに存在しています(多くの場合、私は何か新しいことを試みていると思いましたが、LC0の賢い人たちはほとんどすべてを試しました)。これらには、メイトプロビング、エンドゲームテーブルベースプロービング、エンドゲームミニマックス、確率的重量平均化(SWA)、指数関数的な重みの移動平均(EWMA)、さまざまな探索インセンティブ、予測キャッシュ、補助トレーニング目標、知識の蒸留が含まれます。
いくつかのアイデアは新しいと思います。 1つ目は、戦術的なトラップを避け、線形探索と選択的バックプロパゲーションを介して単純な後悔を最小限に抑えることを目的とする検索方法です。 2つ目は、空気の正確性(トップP)の微調整された適用と、空気のある核のサンプリング - 貪欲なサンプリングの微調整と組み合わせて、位置と動きに関する自然言語の解説のための単純な神経アーキテクチャです。
結果は、チェスを再生し、ニューラルネットワークを訓練し、パラメーターを最適化し、テスト強度、プロセストレーニングデータ、ビューとデバッグデータ、トレーニングデータの編成、ユニットテスト、およびクラスターを調整するためのツールスイートです。プロジェクトをまとめるために、https://lichess.org/@/playchesscoachにボットがセットアップされ、チャレンジャーや他のボットに対してゲームをプレイし、観客に解説を提供します。
新しいスタイルのV3-8クラウドTPU VM:
guiコマンドに入ることにより、エンジン検索を生成するために使用できます。一部のキーファイルは、ほとんどのツールを駆動し、C ++およびPythonコードから読み取られるconfig.tomlを含むルートにあります。 Meson.BuildはLinuxビルドを定義し、CPP/Chesscoach.slnおよびcpp/**/*。vcxprojはWindowsビルドを定義します。 Setup.sh/.cmd and build.sh/.cmdスクリプトは、セットアップと構築を自動化する必要がありますが、追加の手順が必要です。ルートのdockerfilesは、各クラスターワーカーの役割の画像を定義し、docker-*。shスクリプトは、これらの画像の構築とアップロードを支援します。
クラスターディレクトリでは、.sh/.yamlファイルは古いスタイルのTPUでKubernetesクラスターを管理しますが、Py/Alpha.pyは新しいスタイルのクラウドTPU VMでクラスターを管理します。
CPPディレクトリには、主にCPP/ChesscoachでC ++コードが含まれています。 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)を使用してインストールされ、Linux上のMesonビルドシステムによって発見され、WindowsのNugetを使用してインストールおよび発見されます。 CPP/Protobufライブラリは、ProtocツールとCPP/Protobuf/Chesscoach.protoを使用してコード生成されます。
PYディレクトリには、C ++からのNetwork.pyからアクセスされるプライマリにアクセスされるPythonコードが含まれていますが、一部のスタンドアロンスクリプトツールも含まれています。 Chesscoach Pythonコードは、主にニューラルネットワークとクラウドストレージに関係しています。追加のサードパーティPythonライブラリは、PIPを使用してインストールされます。
JSディレクトリには、ChessboardJSに依存して、ChesscoachguiとChesscoachuciで使用されるデバッグGUIが含まれています。
このツールディレクトリには、トーナメントを実行し、参加者のELO評価を計算するためのCutechess-CliとBayeselo、およびStockfish 13エンジンバイナリが対戦相手として機能することが含まれています。
スクリプトディレクトリには、さまざまな状況スクリプトと便利さが含まれています。
Docsディレクトリには、ドキュメントとサポート資産が含まれています。
インストール後、ChesscoachはLinux上およびWindowsのバイナリと一緒に/usr/local/share/chesscoachで静的データを見つけます。 $ {xdg_data_home}/chesscoachで動的データを見つけます。または、linux上の〜/.local/share/chesscoach、およびwindowsの%localappdata%/chesscoachでそれを失敗させます。動的データは、Google Cloudストレージにも配置できます。たとえば、gs:// chesscoach-eu/chesscoach。
Google Cloudで実行されている場合、GPUセットアップを簡素化して、CUDA 11を使用して事前に構築されたディープラーニングディスクイメージを使用できます。
./setup.sh実行します(ソースからProtoBufを構築するのに30分かかる場合があります)。pip3 install -r requirements-all.txtを実行します。sudo ./build.sh release installを実行します。./setup.sh実行します(ソースからProtoBufを構築するのに30分かかる場合があります)。pip3 install -r requirements-all.txtを実行します。sudo ./build.sh release installを実行します。./setup.sh実行します(ソースからProtoBufを構築するのに30分かかる場合があります)。pip3 install tf-models-official==2.5.0 (これにより、事前にインストールされたtf泊があります)。pip3 uninstall tensorflow tf-slim tf-nightlyを実行します。--force-reinstallでインストールします。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/share/chesscoach、およびwindows上の%localappdata%/chesscoachで失敗します。
ニューラルネットワークの重みをインストールします。これには、372 MIBのダウンロードと406 MIBディスクスペースが必要です。
scripts/download_install_data.shを実行します。scripts/download_install_data.cmdを実行します。オプションで、syzygyエンドゲームテーブルベースをインストールします。 3-4-5ピースのファイルには約1ギブがかかり、3-4-5 + 6ピースのファイルは約150ギブを服用します。インストールプロセスはやや技術的です。
クラウドストレージモードでは、Syzygyテーブルは、起動時にローカルストレージに自動的に複製されます。
スクリプトスクリプト/ramdisk_syzygy6.shは、メモリが高いがディスクスペースが低い場合、3-4-5 + 6ピーステーブルをホストするために、新しいスタイルのクラウドTPU VMなどのマシンにRAMディスクを設定します。ディスクを使用する場合、これらのテーブルをSSDに配置して検索速度を維持することが最善です。スクリプトスクリプト/ramdisk_syzygy6.shは、config.tomlの構成変更に依存してパスを使用します。
export PROJECT_ID=<your Google Cloud project ID>を実行します。Alpha.pyを使用する場合(この部分は特に乱雑です):
cluster/cluster-prep-creds.shを実行して、サービスアカウントと対応するkey.jsonファイルを作成します。gsutil cpを使用して、key.jsonをkey_pathにコピーします。技術的な説明の分散トレーニングと自己プレイセクションには、古いスタイルと新しいスタイルのクラスターの管理に関する詳細情報があります。
ほとんどのチェスコーチプログラムは、構築およびインストールされたconfig.tomlに依存します。 Config.tomlを介して、Config.tomlを使用して実行時にUCIオプションを実行するために、Config.tomlを実行するときに、Chesscoachuciを実行するときにSearch_Threadsパラメーターを設定することが特に重要です。
Chesscoachuciバイナリは、さまざまなチェスGUIのUCIエンジンとしてロードできます。
ただし、Pythonに仮想環境を使用する場合、次のことが必要になる場合があります。
Chesscoachuciは、UCIプロトコルのコマンドに加えてカスタムコマンドを提供します。
comment 、現在の位置と最終的な動きの自然言語の解説を生成します。 position startpos moves …コマンドで完全な移動履歴を提供することが最善です。gui 、検索を開始するときに起動するデバッグGUIにフラグを立てます(高レベルの説明で図9に示すように)。~ puct [moves …] [csv]デバッグGUIデータをテキスト形式で表示します。~ fen Forsyth – Edwards Notation(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内のテストエクスプローラーインターフェイスを使用することもできます。
GoogleのTPU Research Cloud(TRC)プログラムは、このプロジェクトを可能にしたコンピューティングリソースで非常に寛大であり、特にJonathan Catonが物事を実現してくれたことに感謝します。
Cloud TPU VMSを使用するためのGoogleのCloud TPUチーム、特に新しいテクノロジーのアルファ全体でのエンジニアリング支援のためのMichael Banfieldに非常に感謝しています。
チェスチューニングツールとベイズスコプトの実装の実装とベイジアンの最適化に関するアドバイスは、チェスコーチエンジンの強化において非常に貴重であることに心から感謝します。
Matthew Lai(Deepmind)に、Alphazeroの論文で独立した重要な説明を提供してくれたことに非常に感謝しています。
Chesscoachでの自然言語の解説トレーニングを可能にするために、Scrapingbeeの研究クレジットを提供してくれたPierre de Wulfに感謝します。
プロジェクトの開始時に貴重なアイデアと議論をしてくれたTed Liに感謝します。
図のプロトタイピングの支援については、Freya Wilcoxに感謝します。
編集、校正、サポートに感謝します。
チェスコーハは、GPLV3以降のライセンスの下でリリースされます。
クリス・バトナー、[email protected]