コンピュータ将棋

置換表に保持する指し手の削減

Miacisでは一つの局面に対応する置換表エントリが持つ変数として、以下のようなものを保持している。(hash_table.hppから一部抜粋し見やすく改変) struct HashEntry { int32_t sum_N; //探索回数の合計 int32_t virtual_sum_N; //バーチャルロスの合計 //以…

Miacis WCSOC2020版

世界コンピュータ将棋選手権のオンライン大会(WCSOC)に向けて、これ以上レートが伸びそうにないのでここで結果をまとめておきます。 実行ファイル Windows向け実行ファイルをGitHubで公開しています。 CPU版 GPU版 CPU版はNPS50くらいしか出ないのでほぼお…

教師データ生成時(800探索)の性能

要約 教師データ生成時のレートはfloodgate換算で Miacis:2700程度 やねうら王:2800〜2900程度? AobaZero:3000程度 また探索バッチサイズはできれば1で生成するべきだとわかった。 背景 AobaZeroが800回の探索でKrist_483_473stb_16t_100mに勝ったという話…

損失と棋力の関係

動機 Miacisでは強化学習の最中にも定期的にfloodgateの棋譜を用いて検証損失の計測をしている。対局には計算コストがかかるため、検証損失の値から大雑把にでも性能が把握できると嬉しい。よって今回はこれらの関係を調査した。 使用した結果 基本的にはこ…

Google Compute Cloudでの探索実験

8GPUインスタンスを使って探索速度を検証した。 まず20CPU、8GPU(Tesla V100)のインスタンスを使って探索速度を検証した。 早い段階で頭打ちになっている。8GPU使うときのGPU利用率を見てもあまり高くなっていない(1GPUなら50%くらいは行く)。 1GPUでも探…

思考時間とレートの関係(2)

上の調査に便乗してMiacisでも調べ直した。以前(8ヶ月前)の調査は 結論としては今回も変わらず、「思考時間2倍でレート+100ちょい」という感じ。 以下対戦相手はYO/Kristallweizen(Thread4・0.2秒)。 Miacis 1手1秒 対局数 勝数 引き分け数 敗数 勝率 相…

対局結果メモ

ここ数日で回していた対局結果をメモしておく。対局結果は全てMiacis側から見たもの。マシンはCPUの周波数約3.6GHz、GPUは2080ti。YO/Kristallweizenは4スレッド、定跡オフ。 ベースライン Miacis側 0.5秒、YO/Kristallweizen側 0.1秒。 対局数 勝数 引き分…

教師あり学習による事前学習

再現性をある程度担保したいので、一度強化学習で学習したパラメータを初期値として再び強化学習をやるようなことはあまりしたくない。かといって毎回ランダムパラメータから学習しているのも効率が悪いと思えたので、自分の中で折り合いのつく点として、教…

探索速度と棋力の関係

以前AlphaZeroの探索速度を検討した回でMiacisの探索速度も調べた。 この記事でも述べた通り、今の仕組みではNPSが上がれば棋力が上がるとは限らない。というわけでやねうら王/Kristallweizen(2スレッド、0.1秒)と対局してレートを測定した。 バッチサイズ16…

学習に必要な演算量の比較メモ

Miacisの学習はAlphaZeroの学習に比べて少ない計算量で行っていることは確かだが、実時間としては多くかかっている。総演算量(単位時間あたりの演算量×学習時間)をちゃんと検討しておくべきだと思ったのでメモを残しておく。基本的にCPUは無視してGPUあるい…

対抗形における性能

前回、左右反転によるデータ拡張を導入し、初期局面からの対局では勝率にあまり差がないことがわかった。しかし以前の結果では、対抗形の学習は不十分であるという場合が見られた。左右反転を学習データに含めると、飛車が左にあるような局面がデータに含ま…

AlphaZeroの探索はすごく速いか?

ふとAlphaZeroの論文読み直して、TPU4個とはいえ将棋で40K NPS出てるってやばくないか? って思いましたね。手元だとチャンネル半分、ブロック半分で10K出てない気がするんですが。2080tiとTPUってそんなに差があるものなんですかね— t (@tokumini_ss) 2020…

左右反転によるデータ拡張

要約 左右反転によるデータ拡張を行うことで性能を落とさず学習速度を2倍にできた。 背景 囲碁では左右反転や回転などを利用してデータ拡張することができ、本家AlphaZeroでも の下の方にあるSupplementary Materialsに掲載されているFigure S1 において、同…

ここ2ヶ月の進捗

論文を書いているのもあってある程度情報を隠しながらやっていかないといけないかなと思っていた部分もあったのだけど、やはり性に合わない感じがしてきたので書きたいように書こうという方針で。正直なところ論文も公開しながら書きたいくらい……。 まずは前…

学習の再現性確認

最近はあまり新しい工夫を実装する時間がなく、とりあえず今の時点での学習に再現性があるかどうかを確認していた。 現状使えるマシンは、2080tiを2枚搭載しているものが1台、1080を2枚搭載しているものが2台となっている。実装上の都合によりマシン間でのデ…

MuZeroと脳内盤

技術的な内容というよりはやや曖昧な、(この言い方は好きではないが)ポエムっぽい文章を書いてみるなど。 今年の選手権でmerom氏には話した気がするのだけど、プログラム内部に盤面を保持してそれを遷移させて評価関数に入力するという方式は、継ぎ盤を用…

対抗形の学習が不十分

結論 現状の学習方法で得たパラメータは対抗形が苦手であり、学習局面として対抗形ほとんど出現していない。 背景 自己対局による強化学習だと学習局面が偏ってしまうのではないかという指摘は多々ある。Miacisについてはどうも対抗形で上手く指せていないよ…

適当にやった実験の結果

以下全てEloレートは全て技巧2(深さ10)と1手0.25秒で500局対戦した結果から推定したもの。 ディリクレノイズなし 行動選択を価値のソフトマックス関数にしたので、ある意味Policyに対する依存性が弱まり、ディリクレノイズを抜いても良いのではないかと思っ…

価値のソフトマックス分布を教師としたAlphaZero学習(最終結果)

要約 価値のソフトマックス分布を選択および教師に利用することでレートが150程度上がったが、これはMiacis特有の事情である可能性がある。 背景 前回、価値のソフトマックス分布を教師としたAlphaZero学習は少なくとも最初の方では学習が上手く進んでいるこ…

価値のソフトマックス分布を教師としたAlphaZero学習

要約 価値のソフトマックス分布を行動選択および教師分布として利用することで学習が2倍から3倍程度速くなった。 背景 前回、生成している棋譜を分析したところ、評価値を大きく損ねる悪い手が多く選ばれすぎていると感じられた。この原因として探索回数をも…

学習中に生成した棋譜の分析

要約 生成している学習データの質が悪い可能性がある。質を高めていくために(1)価値を考慮した行動選択 (2)の調整 (3)リプレイバッファサイズの調整 などを考えていきたい。 実験 前回1Mステップの学習を行ったが、まだ収束していないようにも思えたので2Mス…

思考時間とレートの関係

要約 Miacisではおおむね思考時間を2倍でレート+100となる。MCTSのスケール性もαβ探索と比べてあまり変わらないのではないか。 背景 AlphaZeroの論文(arXiv版)には1手の思考時間とレートの関係が図で表されている(Figure 2)。以下に将棋の方だけを切り抜いた…

長時間学習の結果/選手権以降にやったことのまとめ

要約 2週間弱かけて1Mステップの学習を行ったところレート2600程度になった。パラメータとWindows向けバイナリはGitHubで公開している。 背景 第29回世界コンピュータ将棋選手権以降、一通り試したいことはやったのでここで一度長時間の学習を行った。選手権…

優先度付き経験再生の実装・実験

要約 優先度付き経験再生はAlphaZero方式の学習でも効果がありそう。 背景 以前の記事でも軽く触れたが、優先度付き経験再生という手法がある。 大雑把に言うとリプレイバッファからのサンプリング確率を一様ランダムではなく優先度で重み付けするものである…

Sarsa-UCT(λ)の実装・実験

要約 Sarsa-UCT(λ)のλを調整しても明確な性能向上は見られなかった。 背景 以前の記事の通りMCTSにおける価値の漸進的更新を実装した。 これにより単なる平均を求める手法とは異なる手法へ改造することが容易になった。特に以前紹介したSarsa-UCT(λ)は自然な…

SENetの導入

要約 SENetの構造を導入することによってネットワークの性能が向上した。計算量はやや多くなるが、全体として棋力は向上した。 背景 山岡さんのブログで将棋ソフトでもSENetの構造が有用であるとの実験結果が示されていた。 このような簡単な変更かつ僅かな…

C_PUCTの調整

要約 は2.5としたとき一番性能が良かった。 背景 今までMiacisは探索の選択ステップにおいてScience版AlphaZeroと同様の係数を用いていた。 $$ a_t = \mathrm{argmax}_a \left( Q(s_t, a) + C(s) P(s, a) \frac{\sqrt{N(s)}}{1 + N(s, a)} \right) $$ $$ C(s…

MCTSにおける価値の漸進的更新

結論 MCTSの行動価値を漸進的に更新する実装で、総和を保持して平均化する実装と同程度の性能を達成できた。 背景 以前、MCTSにおいて行動価値を漸進的に更新する方法について記事を書いたが、性能が悪化してしまった。この記事で述べた通り、原因はおそらく…

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

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

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

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