コンピュータ将棋

バッチサイズとステップあたりの学習速度の関係

要約 バッチサイズとステップあたりの学習速度は比例関係にある(?)ため、強化学習の高速化としてバッチサイズを小さくすることは意味がない可能性がある。 前書き 前回はLR Range Testによる学習率の決定法について書いた。これをもとに複数のバッチサイズ…

LR Range Testによる学習率の決定

要約 LR Range Testを行って損失が最小となるときの学習率を初期値として決定して良さそう。 前書き 山岡さんの『ディープラーニングによる将棋AIの作り方3』を読んでいて、floodgateの2017年、2018年の棋譜もhttp://wdoor.c.u-tokyo.ac.jp/shogi/x/から入手…

LibTorchにおける半精度浮動小数点演算

記事の要約 LibTorchを使って半精度浮動小数点演算(FP16)を行うことで探索は速くなったが、学習は上手くいかなかった。どうもBatch Normalizationの部分はFP32で計算しなければならないようだ。 LibTorchによる半精度浮動小数点演算 深層学習では厳密な精度…

持ち駒の正規化

記事の要約 持ち駒は正規化した方が良さそう。 前書き WCSC29会場にて山岡さんから『ディープラーニングを使った将棋AIの作り方3』を購入させていただいた。AlphaZero的な強化学習ということで大枠は変わらないが、読んでいるといくらかMiacisの実装と異なる…

バッチサイズと性能の関係

前書き AlphaZeroが4096という大きなバッチサイズで学習しているのに対して、Miacisは64という小さいバッチサイズでの学習を行っている。AlphaZeroに比べて使える計算資源が少ないためデータの生成速度が小さく、バッチサイズが大きいと同じデータを何度も学…

【WCSC29】個人的に興味を惹かれたアピール文書集

すでにuuunuuun氏が書かかれた全チームの簡単なまとめや、やねさんによる見どころ紹介がありますが、ここでは個人的に面白そうだなと思ったものについて妄想レベルの私見を交えながら触れていきたいと思います。自分がディープラーニング系のソフトを開発し…

追加学習による性能向上の検証

今までは再現性や比較の観点から毎回ランダム初期化したパラメータから学習を行っていたが、WCSC29も迫ってきたということで最も強いパラメータに追加学習することで性能が伸びるか検証を行った。 今まで最も性能が良いパラメータは評価値をカテゴリカル分布…

方策とディリクレノイズの比率を変更した学習

Miacisではメモリの関係上、指し手の教師信号として実際に指された手をOnehotベクトルとしたものを利用しており、そのためか方策が偏りやすい傾向にある。 AlphaZeroの学習アルゴリズムでは、各探索でルートノードにおいてディリクレノイズと元の方策の内分…

AlphaZeroに対するTDLeaf(λ)の適用 ~実験編~

前回はTDLeaf()の理屈からAlphaZeroにおいて探索した値を用いる方法を検討した。今回はそれを基に強化学習を行った結果を記す。 損失による評価 floodgate2016年・R2800以上同士の棋譜に対する損失計算によって評価を行った。 の3つの値について試してみたが…

AlphaZeroに対するTDLeaf(λ)の適用 ~準備編~

TDLeaf()の出典:Jonathan Baxter, Andrew Tridgell, Lex Weaver, "TDLeaf(lambda): Combining Temporal Difference Learning with Game-Tree Search," Proceedings of the Ninth Australian Conference on Neural Networks (ACNN'98), Brisbane QLD, Februar…

小さいバッチサイズに対する学習率設定

Miacisではバッチサイズ64で学習を行っている。GPUメモリが小さいのでバッチサイズを大きくできないためだが、Learnerが学習するデータ量とActorがデータを生成する量のバランスが重要なのではないかという根拠のない勘もある。 経験的にバッチサイズを変え…

行動価値の漸進的更新により性能が悪化する原因の考察

前回の記事ではMCTSにおける行動価値の更新を漸進的実装に変更したが、並列化した際に性能が悪化することがわかった。 MCTSの並列化方法として現在実装しているのはねね将棋、dlshogiで採用されているものと同様の方法である。1GPUにつきCPUが2スレッド稼働…

【WCSC29】Miacisアピール文書が公開されました/PERについての所感

Miacisのアピール文書が公開されました。Miacisは簡単に言うとAlphaZeroの(個人でできるレベルでの)再現実験中といった感じです。あまりアピールという感じではなく、やった実験と今後の展望が主になっています。自分としては優先順序付き経験再生(Prioritiz…

平均化MCTSの実装変更

AlphaZeroで用いられているようなモンテカルロ木探索においては、状態で行動を取った回数とその行動以下の部分木から得られた報酬の総和を保存しておくことで、必要な際に行動価値をとして求める。 しかしこの書き方ではSarsa-UCT(λ)の実装をしようとしたと…

KPPT型評価関数のボナンザメソッドによる学習

第28回世界コンピュータ将棋選手権の時はKP,PPを用いた2駒関係を特徴量とするの評価関数を使用していたが、選手権後からKPPT型のオーソドックスな手番付き3駒関係を特徴量とする評価関数に変更した。 学習をし直さないといけないため、まずは手始めにボナン…

Apery(WCSC28)の評価関数パラメータを読み込む

開発中の将棋ソフトについて、評価関数部分以外の性能を強豪ソフトと比較するため、評価関数パラメータを読み込む機能を実装した。 AperyとはBonaPieceにおいて持ち駒0枚に数字を割り振っているかどうかや、盤上の駒を示す順番が角→馬→飛車→竜か角→飛車→馬→…

評価関数の追加学習2

前回から自己対局による強化学習を行ってます。今回も前回と同じ条件で引き続き学習を継続させてみました。 以下が学習前のパラメータに対する学習後のパラメータの対局結果となります。 モデル 対局数 勝利 引き分け 敗北 勝率 3回アップデート後 1736 828 …

評価関数の追加学習

前回は入玉対策として手動で適当にパラメータを変更しました。今回はそれを基に自己対局からの強化学習を行ってみます。 100局単位で学習を行い、指数移動平均を取った勝率が55%を超えたら強くなったとしてパラメータをアップデートします。 局面の多様性を…

入玉に関する点数付け

kkp_kpptの特徴量に変えてからいくらか改良をして自己対局をさせているところですが、対局内容を見ていると相手玉を上部に逃がしても駒得だけを考慮して優勢と主張するシーンが多くみられました。まだ宣言勝ち機能を導入していないこともあり、また256手を超…

将棋ソフトの自己対局による強化学習

評価関数の特徴量をkkp_kpptに変更し、駒割のみのゼロベクトルから自己対局による強化学習を行っています。学習用局面をsfenなどで出力することなく、ある程度の対局数を貯めてミニバッチとして更新しています。教師探索深さは3であり、ミニバッチサイズは10…

SIMDを用いて評価関数計算を高速化したかった話

コンピュータ将棋において評価関数を計算する際にSIMDによって高速化する手法が知られています。 基本的には野田さんのブログが詳しいので、深く知りたい方はそちらを参照してください。 今僕が開発している将棋ソフトでは手番なしの絶対2駒(kp, pp)のみを評…

DeepLearningによる将棋の学習12~7ブロック化~

前回はResidualBlockを6個に増やしたら性能が上がることを確認しました。 ならばと今回は7個にして実験してみました。結果は次の通りです。 Epoch Total Loss Policy Loss Value Loss Policy Accuracy Value Accuracy 1 3.6059 3.4564 0.5978 0.2957 0.6376 …

DeepLearningによる将棋の学習11~6ブロック化と対局結果~

前回は現状で最も良いと考えられるモデルで学習させてみました。 今回はResidualBlockを一つ増やして6個として実験してみました。 Epoch Total Loss Policy Loss Value Loss Policy Accuracy Value Accuracy 1 3.1680 3.0230 0.5797 0.3130 0.6512 2 2.7987 …

DeepLearningによる将棋の学習10~現状の最高性能~

前回は損失の比を調整することでPolicyの損失曲線とValueの損失曲線がだいたい同じタイミングで底を打つようにできるのではないかということを実験しました。 今回はそれを踏まえて現状での最高性能を出す条件で実験してみました。 ResidualBlock5つ、フィル…

WCSC28・各チームアピール文書一言メモ

elmo 文字化けしていて読めなかった(・ω・) ダウンロードしたら読めた。定跡を「自己対局→勝敗+評価値を利用して評価」によってうまく作るというのは面白そうな考えですね。ライブラリを複数組み合わせいくのはやはり公開されていることの良さを上手く活か…

DeepLearningによる将棋の学習9~損失比の再検討~

前回の実験ではResidualBlockの実装にミスがあったことがわかりました。Valueの出力を3つ目のブロックから取る実験をしてそのままにしていて、前回の実験は無意味でした。 今回はそれを修正して一番基本的な実装に戻し、一番気になるのが損失の比をいじる部…

DeepLearningによる将棋の学習8~元のモデル~

前回はフィルタ数を変更して実験をしてみました。 今回はいろんな実験をしすぎて情報が取っ散らかってきたように思えるのでここらで一度標準的なものを再実験してみることにしました。 ResidualBlock5つ、フィルタ数192、optimizerはSGD、patienceは10、損失…

DeepLearningによる将棋の学習7~フィルタ数の変更~

フィルタ数を256にして実験してみました。 損失の比が1:1の場合 Epoch Total Loss Policy Loss Value Loss Move Accuracy Value Accuracy 1 3.9012 3.3180 0.5833 0.2844 0.6544 2 3.4626 2.8997 0.5630 0.3194 0.6710 3 3.2766 2.7227 0.5539 0.3407 0.6819…

DeepLearningによる将棋の学習6~全結合型NN~

前回は損失の配分を調整して学習をさせてみましたが思わしい結果は得られませんでした。しかし、これは指し手予測の精度だけを見た場合の話であり、損失について考えると実は良い結果になっているともいえるかもしれないことに記事を書いてから気づきました…

DeepLearningによる将棋の学習5~損失の配分を変更~

前回はフィルタサイズを変更してもうまくいかないことを確認しました。 個人的にはDeepLearningによる学習でValueの学習がなかなかうまくいかないという点が気になっています。マルチタスク学習をさせているので損失は指し手の一致具合とValueの一致具合の和…