コンピュータ将棋

教師あり学習 + 強化学習

要約 教師あり学習(300万ステップ)の後に強化学習(10万ステップ)を行うことでR+50.5、さらにもう一度強化学習(10万ステップ)を行うことでR+61.9。floodgateでレート3800ほどになった。 学習の全体 ランダムパラメータから始めて、以下の3つをこの順に行った…

ランダムパラメータからの強化学習

TensorRTなどの高速化も導入したので、ランダムパラメータからの強化学習をやり直した。 実験設定 いつも通り、細かい差異はあれど基本的にはAlphaZeroと同様の設定。 使用パソコン CPU:Intel Core i9-9900K @ 3.6GHz(8core 16thread) メモリ:32GB GPU:RTX 2…

Post Training Quantization(PTQ)の導入

要約 PTQ(要するにINT8演算)の導入でR+30程度 実装 ニューラルネットワークは基本的に浮動小数点演算(FP32)を用いている。今までは半精度浮動小数点演算(FP16)により高速化を行っていたが、Post Training Quantization(PTQ)という、FP32の範囲を絞ってINT8の…

dlshogi(GCT)との比較〜その2〜

要約 現状のMiacisとdlshogi(GCT:電竜戦ver)とのレート差約300の内訳は 評価関数の差で約200 探索速度の差で約100 と予想。 損失計測 前回とほぼ同様の設定で、floodgateの2015年の棋譜だけでなく2016年から2020年までの棋譜それぞれについて損失を計測した…

TensorRTの導入

要約 TensorRT(TRTorch)を導入したことでNPS約1.3倍、R+70ほど。 実装等 前回、同じデータについてMiacisとdlshogiの評価関数を比較した結果、そこまで精度に差がないのではないかという結果が得られた。この結果が正しいとすると、棋力の差は探索速度や効率…

dlshogi(GCT)との損失比較

同じデータに対して評価関数の性能比較を行った。 使用データはfloodgate2015年の棋譜(リンク内のwdoor2015.7z) であり、以下の条件でフィルターをかける。 手数が60手以上 対局両者のレートの大きい方が3000以上 終了状態が%TORYO, %SENNICHITE, %KACHIの…

Sharpness-Aware Minimizationの検証

Sharpness-Aware Minimizationという手法が提案されています。 詳しい人が説明してくれています(僕もこれで知りました)。 上記事の パラメータ周辺での最大の損失を求めて、それが下がる方向でパラメータを更新する というのが基本的なコンセプトでしょう…

256chでの教師あり学習

普段使っているネットワークがそこまで大きくはないのでもっと大きいネットワークを試したいと思って実験したが、ブログを見るとほとんど同じような実験を以前にもしていた。自分で書いた記事を自分で忘れている。 上の記事と同様に、普段128chである残差ブ…

教師あり学習をした後の強化学習

カテゴリカルモデルで教師あり学習をすると勝ち負け引分に相当する値の領域にしか教師信号が発生しないため分布が有効活用できない問題がある。 先の実験はCategoricalモデルでやったものなんですが、CategoricalモデルのValueを最終的な勝敗から教師あり学…

AobaZeroの棋譜を用いた教師あり学習 192ch

今回は普段128chである残差ブロック中のCNNを192chに増やして学習を行った。 学習結果 左:Policy損失 右:Value損失 どちらも学習損失では192chの方がやや良いのだが、検証損失ではそこまで差が出ていない。 学習時間はやや長くなり45時間、約二日であった。 …

Miacisを用いた教師あり学習の実行手順

AobaZeroの棋譜を用いて学習し、floodgateの棋譜を用いて検証する場合を説明します。 前提 Ubuntu 18.04でのみ検証ができています。おそらくUbuntu 16.04や20.04でも大丈夫だとは思いますが、未検証です。Windowsでも最近のWSL2やDocker for Windowsでできる…

AobaZeroの棋譜を用いた教師あり学習

前回、AobaZeroの棋譜を取得できるようになった。floodgateの棋譜についてもダウンロードスクリプトを整備し、実験手順を再現しやすいように仕組みをやや変えたので教師あり学習をやり直すことにした。 棋譜について floodgateの棋譜(いつも通りの設定) 20…

AobaZeroの棋譜をコマンドラインからダウンロードする

ありがたいことにAobaZeroの学習データはGoogleドライブで公開されている。 Dockerコンテナ内などコマンドラインしか使えない環境でもダウンロードできるようにシェルスクリプトを作成した。 最終的なシェルスクリプト これと同階層にAobaZero_kifuID.csvを…

128チャンネルで1ヶ月学習(2回目)

5月の世界コンピュータ将棋オンライン大会が終わってから、実験サイクルを早めるため学習は64チャンネルのネットワークで行っていた。しかしlibtorch1.5.0版に対応した影響で後方互換性がなくなり、すぐ動かせる強いパラメータが手元ないと細かい動作の検証…

学習スレッドのスリープ時間と学習速度の関係

現状では少ない計算資源の下でできるだけAlphaZeroの設定に近づけるために、学習スレッドは1ステップごとに定数時間のスリープ時間を入れて、学習量に対して生成量が十分になるように調整している。スリープ時間をどの程度にすれば良いのかを決めるため、今…

教師あり学習での実験いろいろ

要約 cosine annealing : 学習率一定よりは良さそうだが、適切なタイミングで1/10する場合よりも良いかというと微妙そう。しかし適切なタイミングを調べるのも大変なので、その手間を省くという意味では有用か dropout : Value損失は改善するがPolicy損失は…

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

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ヶ月の進捗

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