TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

dlshogi

将棋AIの進捗 その39(リーグ戦)

年末にCPUを3970Xに変えてから、USIエンジンをリーグに加えた強化学習を行っている。 USIエンジンを各探索スレッドにつき2つ、GPUにつき探索スレッドを3つ、3GPUで探索を行っているので、合計18プロセス起動している。 メモリの制約が厳しくこれ以上は起動で…

将棋AIの進捗 その38(SWA)

dlshogiの学習にSWA(Stochastic Weight Averaging)を実装して、測定した。 SWA SWA(Stochastic Weight Averaging)は、一定間隔での重みを平均化することで、ニューラルネットワークのテスト精度を改善するテクニックである。 一般的なアンサンブルの手法では…

将棋AIの進捗 その37(FPU reduction)

昨日、MCTSで未訪問のノードの価値を、動的に親ノードの価値で初期化する方法を試した。 その結果、技巧2(4コア)に対する勝率が、60%から69%(R+68.6)になった。 昨日の結果の考察 今までは0.5(引き分け)で初期化していたため、劣勢の局面で未探索のノードが…

将棋AIの進捗 その36(UCBの価値の初期値)

AlphaZeroのMCTSのUCBには、 という式が使用されており、このUCBで行動価値の信頼区間の上限を見積もっている。は、行動の行動価値を、探索を行った結果得られた価値の平均で推定する。 ここで、のときは未定義であるため、何らかの値で推定する必要がある。…

将棋AIの進捗 その35(PyTorchに移行)

年末に新しいCPUが届いたので、正月はPCを組んでいた。 同時にフルタワーケースを買ったのだが、GPU3枚だと熱対策をしないと安定動作しなかったので、ドリルで加工してファンを増設したりと正月から働いてしまったorz 安定動作するようになったので、前回記…

将棋AIの進捗 その34(終盤力の強化)

前回の日記からしばらくぶりですが、その間SENetの学習を続けていました。 自己対局中の詰み探索の深さ ディープラーニング+MCTS系は終盤に弱点があるので、dlshogiでは自己対局中にルート局面でdf-pnによる詰み探索を行い、詰みが見つかった場合は、ゲーム…

dlshogiのLinuxでのビルド/自己対局の実行方法

dlshogiのビルドや自己対局の実行方法について今まで文章化していなかったので、解説用のJupyter Notebookを作成した。 Google Colabで実行できる。colab.research.google.com dlshogiは学習に初期局面集や評価局面集を使っていたり、メモリを大量に消費する…

将棋AIの進捗 その33(末端ノードでの詰み探索)

dlshogiでは末端ノードで短手数(7手)の詰み探索を実施しているが、終盤ではゲーム木中に詰みの局面が多くなり、王手の合法手も多くなるため、探索速度が大幅に低下することがあった。 先日、MCTSにAND/OR木を組み込む実装を行ったことで、MCTSで詰み探索を行…

将棋AIの進捗 その32(MCTSの探索にAND/OR木を導入する)

Leela Chess Zeroの状況を定期的にウォッチしないとなと思って、issueを眺めていたら"Exact-Win Strategy for Overcoming AlphaZero" #799という投稿がされていた。 Leela Zeroのissue#2276にも同様の投稿がある。 ざっくり説明すると、子ノードが勝ちの場合…

将棋AIの進捗 その31(cuDNNによるSENetの推論処理の実装)

dlshogiの10ブロックのWideResnetの自己対局による強化学習を続けていましたが、230サイクルほどでほぼ頭打ちになりました。訓練損失は下がり続けていますが、floodgateの棋譜に対する損失が上昇傾向になっており、技巧2のとの勝利も上がらないため、このモ…

将棋AIの進捗 その29(自己対局におけるノードの再利用)

先日の記事に書いたが、AlphaZeroは自己対局時にノードの再利用を行っている。 dlshogiでは、先手が探索した結果を後手が利用することになるため(逆も同様)、先手と後手の探索のバランスが崩れるため、ノード再利用を行わず各手番でハッシュをクリアしてい…

将棋AIの進捗 その28(探索時のノイズの効果)

世界コンピュータ選手権まで残り1ヵ月もなくなったので、強化学習で強くするのはあまり望めないので探索部の調整を行っている。以前のdlshogiでは、Policyの読み漏れによって、受けを間違えて数手先で詰まされる状況がよく起きていたため、Policyにノイズを…

将棋AIの進捗 その28(弱点の克服)

前回、自己対局の報酬を詰み探索の結果に変更したことで、valueの精度向上したことを書いた。詰み探索結果を報酬にしたのは、評価値が2000近くある局面から、詰みが見つかり一気に負ける局面があるためだが、そのような局面をより積極的に是正することにした…

将棋AIの進捗 その26(自己対局による強化学習の経過2)

前回から時間が空いたが、自己対局による強化学習を続けている。10ブロック、192フィルタのモデルの自己対局による学習が、79サイクル※回したところで飽和気味になったため、10ブロックのモデルからパラメータを転移して15ブロックのモデルで強化学習を行う…

PUCTの定数のベイズ最適化

AlphaZeroの論文では、PUCTの定数を以下の式で、親ノードの訪問回数に応じて動的に調整を行っている。 この式で現れる定数とは、疑似コードでは以下のように定義されている。 # UCB formula self.pb_c_base = 19652 self.pb_c_init = 1.25 私が実験しているd…

将棋AIの進捗 その25(自己対局による強化学習の経過)

前回からだいぶ期間が空きましたが、自己対局による強化学習で、教師ありで収束するまで学習したモデルより有意に強くすることができました。前回は、19イテレーションでほぼ互角の強さでしたが、38イテレーションまで自己対局を行うことで有意に強くなりま…

将棋AIの進捗 その24(自己対局による強化学習)

これまではAperyの初期局面集にfloodgateの棋譜を加えたものを初期局面集として自己対局を行っていたが、中終盤のバリエーションを増やすため、 やねうら王教師局面からAperyの初期局面集を作成(評価値200以内局面を抽出) 初期局面集から詰みの局面を除く と…

使用ライブラリをAperyに変更

dlshogiは今までAperyから派生したelmo_for_learnのソースを使用していましたが、最新のAperyで修正されたバグの修正を取り込むため使用ライブラリをAperyに変更しました。 入玉宣言に修正が入っていたので、そこだけ取り込むつもりでしたが、ついでにすべて…

将棋AIの進捗 その22(探索と評価の直列化)

前回、ねね将棋が世界コンピュータ将棋選手権で高い探索速度を出していたので、バリューの計算中に末端ノードから新しく探索を行う方法で簡易な実装をして実験を行った。 しかし、末端ノードから新しく探索を始めると、新しく始めた探索のバリューの計算され…

将棋AIの進捗 その21(探索の深さ)

dlshogiでは、MCTSの末端ノードでバリューを計算し、その値をバックアップしているが、GPUでバリューの計算が終わるまで待機している。 バリューの計算が終わる前に次の探索を始めると、ノードにバーチャルロスのみが反映された状態で、勝敗の推定値が反映さ…

第28回世界コンピュータ将棋選手権 出場結果

第28回世界コンピュータ将棋選手権に参加してきました。dlshogiは、一次予選に7位で通過しましたが、二次予選では1勝8敗で24チーム中最下位という結果でした。dlshogiは、今回注目されていたCrazy Shogiと同じくモンテカルロ木探索とディープラーニングを組…

dlshogi(wcsc28版)のビルド済みファイル公開

dlshogiの第28回世界コンピュータ将棋選手権バージョンのビルド済みファイルを公開しました。第5回将棋電王トーナメントバージョンは、Chainerの環境構築が必要でしたが、USIエンジンの実行のみであれば不要になっています。 CUDA、cuDNNはライセンス上の問…

将棋AIの進捗 その20(自己対局による強化学習)

自己対局による強化学習を続けています。 現在、1サイクルあたり500万局を自己対局で生成するサイクルを17サイクル実行したところです。 教師ありでelmoで深さ8で生成した4.9億局面を事前学習したモデルを初期モデルとしています。 初期モデルは、収束前のLe…

将棋AIの進捗 その19(初期局面集)

自己対局による強化学習を行う際に、対局の開始局面には、初期局面集を使用している。 AlphaZeroでは、固定手数まではノイズを加えルートノードの訪問回数に応じた確率で手を選択することで局面の多様性を確保している。 しかし、この方法ではモデルに依存し…

将棋AIの進捗 その18(スケーラビリティ)

AWSのp3.8xlargeインスタンスを試験的に借りてGPUを増やした場合の性能を測定しました。 Linuxだとマルチスレッドの性能がでないので、OSはWindowsです。p3.8xlargeのマシンスペックは以下の通りです。 Tesla V100 GPUs 4 vCPUs 32 Main Memory 244GiB 各GPU…

将棋AIの進捗 その17(AWS対応を検討)

世界コンピュータ選手権の参加者のマシンスペックをみると、マシンスペック高すぎです( ゚Д゚)GPUを2枚詰んだ個人のPCで参加しようと思っていましたが、GPU8枚とかで来られたらモデルと探索の性能ではどうにもならなそうです。 モンテカルロ木探索は並列化の効…

将棋AIの進捗 その16(マルチGPU)

将棋AIをChainerを使用した実装からcuDNNを使用した実装に変更できたので、マルチGPUでの性能を測定した。 Chainerを使用した場合 Python経由でChainerを使用しているPythonのGIL機構によってマルチスレッドの性能に制限がある。 Chainerを使用した場合の、…

将棋AIの進捗 その15(cuDNNを使用)

モデルの学習にディープラーニングフレームワークのChainerを使用していますが、対局時にChainerで推論を行うと、Python経由で呼び出すためマルチGPUで動かす際、Python経由だとGILによってマルチスレッドの性能が出なくなる。 また、実行環境にPythonが必要…

将棋AIの進捗 その14(自己対局による強化学習)

自己対局による強化学習の検証をはじめた。強化学習の手法は、以前の日記で書いた通りで、Alpha Zeroの手法を参考にして、1手800シミュレーションで自己対局を行う。自己対局→学習のサイクルを繰り返してモデルを成長させる。 1回のサイクルで、どれだけの自…

将棋AIの進捗 その11(マルチGPU対応)

GPUが2つになったので、dlshogiをマルチGPUに対応させました。ニューラルネットワークの計算要求をキューにためてミニバッチで推論を行う仕組みにしていたので、キューをGPUごとに用意して、探索スレッドを一方のキューに対応させて、キューを監視してニュ…