Gumbel dlshogi
1サイクル100万局面生成して106サイクルまで学習できたので、途中経過を報告する。 学習スケジューラ 前回、記載した通り、サイクル数を閾値にして、以下の通りハイパーパラメータを変更している。 パラメータ 0~9 10~99 100~999 シミュレーション回数 16…
前回、自己対局と訓練のサイクルの自動化を行った。今回は、ハイパーパラメータスケジューラを実装して、本格的な学習を開始したので、途中経過を報告する。 ハイパーパラメータスケジューラ 論文では、シミュレーション回数は固定で実験しているが、WCSC34…
前回までは手動で行っていた、自己対局と訓練のサイクルを自動化することを検討する。 処理方式 WindowsでもLinuxでも実行できるようにOSのシェルは使わずに、Pythonで実装する。 自己対局と、訓練処理のメイン処理は関数にしているので、自動化処理からPyth…
前回、初期値のモデルから自己対局と学習を繰り返すと、入玉宣言の割合が増え過ぎる問題の対策として、最大手数で終局した対局を除くことを検証した。 詰みで終局する割合が増えることを期待したが、効果は薄かった。今回は、3手詰めを導入し、3手以内の詰み…
初期値のモデルから自己対局と学習を繰り返すと、入玉宣言の棋譜が増え過ぎる問題が起きたので、最大手数で終局した対局を除外することを検討する。 最大手数の対局を除外することで、相対的に詰ます棋譜が増えるので、詰みを覚えることを期待する。 学習方…
自己対局と訓練の処理が実装できたので、初期値のモデルから自己対局と学習を繰り返して、モデル精度が上がるか検証する。 学習方法 初期値のモデルから自己対局を開始する 1回の自己対局で、100万局面生成する 自己対局で生成した訓練データを1エポックだけ…
その4で、学習結果の価値の正解率が低かったのでバグの可能性がありそうと書いたが、やはりバグがあった。初期値からの学習のために、自己対局時の平均手数や終局理由を出力するようにしたことで、Drawでないのに数手終わる対局があることに気づいた。 原因…
前回、自己対局で10万局面生成するのに、1時間14分かかったので、マルチプロセス化して高速化することを検討した。 マルチプロセス化 シングルプロセスで実行してた自己対局の処理をそのままマルチプロセスで実行する。 GPUの推論は競合すると速度低下するた…
前回までで、Gumbel AlphaZeroの自己対局で訓練データを生成できるようになったので、今回は学習処理を実装する。 訓練データ 自己対局で、以下のようなNumpyの構造体の配列をバイナリファイルとして出力する。 ランダムアクセスが可能なように固定長にして…
前回までで、Gumbel AlphaZeroのアルゴリズムで自己対局して、訓練データ出力するところまで実装できた。動作確認のため、python-dlshogi2の学習済みモデルをTorch Scriptにエクスポートして、生成される棋譜を確認した。 Torch Scriptにエクスポートする処…
前回の記事で、Gumbel AlphaZeroの自己対局処理の実装を完了した。今回は、その続きとして、訓練データ出力処理を実装した。 訓練データの形式 AlphaZeroでは探索した手のみの訪問回数に応じた分布を学習する。 一方、Gumbel AlphaZeroでは、改善されたポリ…
前回書いた通り、Gumbel AlphaZeroの論文と公式実装を確認して、仕組みがほぼ理解できたので、PyTorchで簡単なサンプルプログラムを実装してゼロからの強化学習を試してみるつもりである。 まずは、簡易なゲームで試すつもりだったが、最終的にはdlshogiの強…