2019-01-01から1年間の記事一覧

Policyの教師信号を分布にする

要約 Policyの教師信号を探索回数の正規化した分布とした方が性能が向上した。 背景 AlphaZero型の学習においてPolicyの教師信号にはルートノードから各行動について探索した回数をその総和で割った分布を利用している。MiacisではCPUのメモリ容量が足りない…

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

結論 強化学習でもバッチサイズとステップあたりの学習速度は比例しそうだ。あるデータ生成速度に対して学習可能な範囲でバッチサイズを上げていくことが学習の高速化に繋がるかもしれない。 前書き 前回は教師あり学習において、バッチサイズとステップあた…

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

要約 バッチサイズとステップあたりの学習速度は比例関係にある(?)ため、強化学習の高速化としてバッチサイズを小さくすることは意味がない可能性がある。 前書き 前回は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の学習アルゴリズムでは、各探索でルートノードにおいてディリクレノイズと元の方策の内分…

AtCoder Beginner Contest 125

結果 23分33秒で全完、122位だった。C問題で少し時間がかかってしまったが、順位表を見ているとD問題を先に解いている人も多く、難しめではあったのかもしれない。100位以内の壁は厚い。 A問題 まぁA問題だし素直に割るだけなんだろうなーという感じで実装し…

Recurrent World Models Facilitate Policy Evolutionを読んだ

出典 David Ha and Jürgen Schmidhuber, “Recurrent World Models Facilitate Policy Evolution,” Advances in Neural Information Processing Systems 31, 2018. arXiv:https://arxiv.org/abs/1809.01999 World Models:https://arxiv.org/abs/1803.10122 概…

Tenka1 Programmer Contest 2019

結果 C問題だけの1完で711位だった。青あたりのレート帯だとC問題早解きゲームと化していて、24分(1WA)では良い順位を望むべくもなく。レート変動は1748→1720(-29)。 C問題 Stones 最初はメモの前半のように文字列を「B...BW...W」の繰り返しと考えて、これ…

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

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

AtCoder Beginner Contest 124

結果 29分56秒で全完。137位だった。簡単なセットだったのでなかなか順位は伸びず。 A問題 std::maxにinitializer_listを渡す(ということをしているのだという理解で良いはず)。 #include"bits/stdc++.h" using namespace std; using ll = int64_t; int main…

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がデータを生成する量のバランスが重要なのではないかという根拠のない勘もある。 経験的にバッチサイズを変え…

Accelerating Self-Play Learning in Goを読んだ

出典 David J. Wu, "Accelerating Self-Play Learning in Go," arXiv preprint, arXiv:1902.10565v2[cs.LG], 2019 概要 AlphaZeroを高速化した。32GPU(V100)を使って1週間でトッププロレベルの性能を実現。 手法の詳細 ニューラルネットワークの学習(4章) 価…

AtCoder Beginner Contest 123

結果 57分29秒(1WA)で全完。それでも135位と順位はそこそこだったので、全体として難しかったんだと思う。 A問題 入力が多い。A問題はforループなしで解けるように、みたいな話を聞いたことがある気がするが、おとなしくループを回す。しかしコードを書き終…

The Predictron: End-To-End Learning and Planningを読んだ

出典 David Silver, Hado van Hasselt, Matteo Hessel, Tom Schaul and Arthur Guez, "The Predictron: End-To-End Learning and Planning," Proceedings of the 34th International Conference on Machine Learning, 2017. arXiv版には付録がついている。Op…

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

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

AtCoder エクサウィザーズ 2019

結果 A,B,Cの3完。350位でパフォーマンスは1924、レーティング変動は1727→1749(+22)だった。D問題は自分の力でも解き得る問題だったと思うが、上手くまとめられなかった。 A問題 最初は"正"三角形というところを見落としていて、三角形の成立条件は最大辺が…

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

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

平均化MCTSの実装変更

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

AtCoder Beginner Contest 122

結果 38分51秒(1WA)で全完、103位だった。やはりWAを出してしまうと100位以内は難しい。 A問題 条件分けを書くので微妙に時間を取られた。 #include"bits/stdc++.h" using namespace std; using ll = int64_t; int main() { char b; cin >> b; cout << (b ==…

AtCoder Grand Contest 032

結果 A問題だけの1完で1195位。パフォーマンスは975でレート変動は1787→1727(-60)。レート下げ幅が自己ワーストの大失敗という内容だった。 A問題 57分かかった。入出力例3の最後の方の数字をいろいろいじって成立するか考えていたんだけど、できるものをで…

On Monte Carlo Tree Search and Reinforcement Learningを読んだ

出典 Tom Vodopivec, Spyridon Samothrakis and Branko Ster, "On Monte Carlo Tree Search and Reinforcement Learning," Journal of Artificial Intelligence Research, vol.60, pp.881-936, 2017 概要 MCTSと強化学習を統一的な観点から捉え直し、TD()法…

AtCoder Grand Contest 031

結果 A,B問題を解いて634位。パフォーマンスは1708でレート変化は1796→1787(-9)だった。C問題を通せるようになるにはもう少し成長が必要そう。 A問題 3分4秒でAC。ある文字が回出てきたらそれらのうちどれかから1回取るか全く取らないかで通りありえるんだ…

AtCoder Beginner Contest 121

結果 25分24秒で全完。148位だった。人々D問題解くの速すぎでしょ。 A問題 えーA問題でこんなに難しいものを出すのっていう感じの感想を毎回抱いている気がするしA問題を舐めすぎなのか? いやでも今回のはさすがにちょっと難しめでしょ。タイムとしてはいつ…

自分用 Ubuntu18.04を入れた後やることリスト

時間経過でスリープ状態になるのをオフにする ソフトウェアの更新をする ダウンロードなどのディレクトリ名を英語にする(参考リンク) LANG=C xdg-user-dirs-gtk-update 日付の表示(参考リンク) gsettings set org.gnome.desktop.interface clock-show-date t…