コンピュータ将棋
先日、Leela Chess Zeroのソースを流用して、LRUキャッシュを実装したが、これを自己対局プログラムに組み込んだ。はじめ、LRUキャッシュを1つにしてすべての探索スレッドで共有するようにしたが、ゲーム木の展開済みノードのNN計算結果が、他のスレッドの探…
自己対局でノードの再利用しないようにしたが、NNの計算結果は再利用した方が効率がよいため、キャッシュの仕組みを導入したい。並列で実行しているゲームすべてについて1ゲーム分のNNの結果を保持するにはメモリ容量が不足するため、使用されなくなった局面…
AlphaZeroでは入力特徴量として持ち駒の枚数、手数をそのまま数値として与えている。一方、Alpha Goでは、呼吸点などの数は、ont-hotエンコーディングして与えている。 例)上限が3で2の場合、010。dlshogiでは、持ち駒の枚数、利きの数を、数値の分だけ1に…
以前に自己対局時にノードを再利用することで一時的に精度が上がったが、その後学習を続けるとpolicyのテスト損失が上昇する現象が起きた。ノード再利用とバッチサイズの変更(1024→2048)を同時に行ったので、どちらが原因で発生したのかわからなかったため、…
各種条件を変更して比較実験を行っているが、初期値とシャッフルにランダム性があるので、測定結果は毎回ばらつきがある。 ランダムシードを固定すると結果が同じになるが、そのシード値での比較にしかならないので、固定しないで測定している。 複数回測定…
dlshogiでは、ニューラネットワークの重みの初期化はChainerのデフォルト(LeCunNormal)を使用している。 モデルをSEResnetに変える予定なので、どの初期化が良いか実験してみた。すべてデフォルトの場合と、活性化関数がReLUの場合はHeNormalが良いとされて…
dlshogiでは入力特徴に手番を加えていない。 将棋では先手と後手で同一局面の価値は変わらないためだ。 ある局面が与えられば、先手か後手かによらず最善手は同じはずである。一方、AlphaZeroでは、手番が入力特徴に加えられている。 局面を180度回転せずに…
前回将棋AIのモデルでSENetを組み込むと精度が上がることが確かめられた。 今回は、SENetなしで層を増やした場合と比較を行ってみた。 また、SENetのreduction rateを16から8、4にした場合とも比較を行った。測定方法は前回と同じ。 比較条件 SENetなしでブ…
先日Chainerで実装したSENetを将棋AIのモデルで試してみた。dlshogiで使用している10ブロック、192フィルタのWideResNetにSENetを組み込んで、SENet有無による精度を比較した。 SENetの実装 DeepLearningShogi/policy_value_network.py at 7820661597f380b17…
教師データ引き分けを加えた場合と、加えない場合の精度の比較を行った。 引き分けの学習には、ChainerのカスタムFunctionを使用した。測定方法は前回の正則化の効果の測定と同じ。 測定方法 10ブロック、192フィルタのモデル PolicyとValueのマルチタスク学…
先日、将棋AIのモデルにおけるエントロピー正則化とL2正則化の効果を測定したが、正しく測定できていなかったので再測定した。前回の測定結果のtest accuacyが低いので、原因を調べていたら、ChainerのV5から追加されたstatic_graphを使っていたことが原因だ…
※ほぼ自分用の実験ノートです。世界コンピュータ将棋選手権の少し前から、自己対局におけるノードの再利用とバッチサイズの変更(1024→2048)を行った。 250万局面の生成と学習を8サイクル行ったところ、技巧2に対して勝率が上がったため、大会には最新のモデ…
今年の世界コンピュータ将棋選手権はMulti Ponderを採用しているチームが多く関心も高かったようです。dlshogiでも、Multi Ponderの考え方を取り入れていました。 Multi Ponderは、どの手にどれだけのリソースを配分すると誤差を最小化できるかという問題と…
dlshogiは、前回に続いて1次予選を通過し、2次予選まで進むことができました。 2次予選は、2勝できればよいと考えていましたが、結果は4勝5敗と善戦できました。 ただし、1勝は相手チームのサーバダウンによるものなので、実質は3勝と思っています。 順位は2…
先日の記事に書いたが、AlphaZeroは自己対局時にノードの再利用を行っている。 dlshogiでは、先手が探索した結果を後手が利用することになるため(逆も同様)、先手と後手の探索のバランスが崩れるため、ノード再利用を行わず各手番でハッシュをクリアしてい…
世界コンピュータ選手権まで残り1ヵ月もなくなったので、強化学習で強くするのはあまり望めないので探索部の調整を行っている。以前のdlshogiでは、Policyの読み漏れによって、受けを間違えて数手先で詰まされる状況がよく起きていたため、Policyにノイズを…
AlphaZeroでは、訓練と自己対局は並列で行われ、チェックポイントで自己対局で使用するネットワークが最新のネットワークに更新される。 チェックポイントは、ミニバッチサイズ4,096で、1,000ステップ間隔だが、チェックポイントの間に何ゲーム行われるかを…
日記で何回かふれていますが、改めて、技術書典6で「ディープラーニングを使った将棋AIの作り方~強化学習編~」という本を頒布します。 techbookfest.orgシリーズ3冊目になります。今回は、AlphaZero Shogiの仕組みの解説と、AlphaZero Shogiを忠実にコピー…
前回、自己対局の報酬を詰み探索の結果に変更したことで、valueの精度向上したことを書いた。詰み探索結果を報酬にしたのは、評価値が2000近くある局面から、詰みが見つかり一気に負ける局面があるためだが、そのような局面をより積極的に是正することにした…
技術書典6の本を執筆しながらAlphaZero Shogiを実装したPythonプログラムの修正も行っている。 プログラムの方はほぼ完成しているが、自己対局を数時間実行すると途中で評価済みのはずのノードが未評価になっているため例外になる問題が発生している。 原因…
前回の日記の時点で、自己対局と学習を実装したが、学習したモデルを使って対局できるUSIエンジンを実装した。 dlshogi-zero/mcts_player.py at master · TadaoYamaoka/dlshogi-zero · GitHub 将棋ライブラリにcshogiを使用して、探索方法をdlshogiと同じ方…
次の技術書典のネタとしてPythonでAlphaZero Shogiの完全コピーを実装しています。github.com自己対局と学習がようやく動くようになりました。入力特徴と出力ラベルと探索の仕様はAlphaZero Shogiと完全に一致させました。 入力特徴 先手の駒 14 後手の駒 14…
前回記事にした自己対局の終了判定にdf-pnによる詰み探索を加えて、学習を進めた結果、valueの精度が1%近く向上しました(floodgateのR3500以上の棋譜との一致率)。 横軸の80サイクルから詰み探索を加えています。どれくらいの棋力になったか、やねうら王 2…
前回AlphaZero方式で訓練データを作成する際のデータの格納方式をSQLiteに決めたので、テストのためにfloodgateの棋譜から訓練データの作成して、学習を行ってみた。 floodgateの棋譜から訓練データ作成 cshogiを使って2018年分のfloodgateのCSAファイルから…
先日AlphaZero方式で教師データを生成する際に、データを固定サイズにすることを検討した。 しかし、指し手の確率分布を保存するには、合法手500手近くの領域が必要となるため、1回の訓練ステップ全てのデータをメモリに載せるのは厳しいことがわかった。 Al…
先日試したレイヤー融合をdlshogiのニューラルネットワークで試してみた。dlshogiはWideResNetを採用しているので、conv->bnのレイヤー融合を適用できるのは、残差ブロックの2つ目の畳み込み層とBatchNormになる。 推論比較 レイヤー融合前後で推論時間を比…
AlphaZero方式の強化学習では、指し手の確率分布を教師データとするため、局面の合法手の数の分だけ確率の値を保存しておく必要がある。 将棋の合法手の最大数は593であることが証明されているが、実際の対局ではそのような局面は現れない。 教師データを保…
Google ColabでAlphaZero Shogiのモデルを論文に通り定義して、テストのために教師ありで学習してみました。 TPUでも学習して学習時間の比較もしてみました。教師データには、elmoで生成したhcpe形式のデータを使用し、入力特徴量と正解ラベルの加工には、先…
python-shogiは、Pythonで扱える非常に役立つ将棋ライブラリですが、速度が遅いのが用途によっては欠点になります。 公式サイトにも記述されていますが、速度よりもシンプルに抽象的に扱えることが目的となっています。しかし、機械学習の用途に使用しようと…
前回から時間が空いたが、自己対局による強化学習を続けている。10ブロック、192フィルタのモデルの自己対局による学習が、79サイクル※回したところで飽和気味になったため、10ブロックのモデルからパラメータを転移して15ブロックのモデルで強化学習を行う…