研究生活の振り返り

所属していた研究室では、修士論文として書いたものを適宜改稿して論文誌へ投稿するのが慣例となっており、自分もそれに倣って2月頃に投稿していた。 大学院を卒業してニート生活も2週間が過ぎようとしているつい先日、その査読結果が返ってきて、結果は不採…

Miacis for Android開発日記

深層強化学習を用いた将棋ソフト『Miacis』を開発しており、PyTorchのライブラリを眺めていたらAndroidで動かせるなーということに気づいたので作ってみました。 アプリのリンク ソースコードのリンク Androidアプリというか、一般にGUI付きのアプリを開発す…

教師あり学習 + 強化学習

要約 教師あり学習(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である残差ブ…

Transformerを用いた探索的NNの学習(成功?編)

以下の続き。 前回は上手くいかなかった学習をなんとか多少は改善することができた。修士論文としてはとりあえずこの方針の結果で許してもらいたい、という気持ちです。 基本的な手法は冒頭で示した前回と変わらず、事前学習したモデルのPolicyが示す確率に…

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

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

Transformerを用いた探索的NNの学習(失敗編)

以下の続き。 前回までの手法では多少改善は得られたものの、探索回数を増やすほど性能が良くなるような性質は得られなかった。またこのやり方では本質的にゲームであることを利用しておらず、一般的に画像認識等でも利用できるものになっており、スコープが…

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でできる…

LSTMを用いた探索的NNの学習:単純なLSTM

以下の続き。 前回はLSTMによくわからない工夫を入れることで探索(?)回数が増えると損失が落ちる結果を得ることができた。 今回はもっと単純に本当にLSTMだけを使うものと比較する。 手法 余計な部分を加えず、LSTMで単純に規定回数だけ推論してから出力す…

LSTMを用いた探索的NNの学習

以下の続き。 前回はMCTSNetの学習方法を工夫することで上手く学習できた。 今回はそれに対する提案手法に近いものとして、LSTMを用いてGPU上のみで探索的な振る舞いを可能にするモデルについて実験を行った。 手法 Simulation Policyに相当するLSTMは状態の…

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

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

MCTSNetの学習結果(Simulation Policyの廃止)

以下の続き。 前回はMCTSNetの学習式に従って実験したが、結果は振るわなかった。学習の挙動などを見ていて、個人的な印象としてはSimulation Policyを方策勾配法のような形で学習していくのは難しいように感じている。 具体的な要因としては、特に学習序盤…

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

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

事前学習を含めたMCTSNetの学習結果

以下の続き。 前回はエンコーダ部分(MCTSNetのEmbedネットワーク)だけ事前学習したものを用いた。結果的に0回探索でも事前学習より悪い損失に留まり、また探索回数を増やしたときに性能向上しなかった。対策案として今回は次の2点について修正を行った。 勾…

エンコーダを凍結した探索系NNの学習結果

以下の続き。 前回の学習の反省としてエンコーダ側を事前学習し、凍結することにした。事前学習でのPolicy損失は1.85であった。 実験結果 全体の結果 前回に比べて値が安定するようになり、MCTSnetはかなり低い値まで下がっていった。しかし単純な探索なしで…

囲碁のルールについてのメモ

Miacisをコンピュータ囲碁にも対応させようかと思って調べてみているが、意外と詰まるところが多そうだ。やっぱりあまり知らないゲームの実装は難しい。とりあえずここまでの考えをメモしておく。 プロトコル 基本的にはGo Text Protocolに対応していれば良…

探索系NNの学習結果

とりあえず試しで回した学習が一通り終わったので結果をまとめる。 実験設定 将棋での教師あり学習でモデルの学習を行い、Policy損失を比較した。 比較手法 探索なしの全結合ネットワーク MCTSnet 提案手法 Stacked LSTM(Deep Repeated ConvLSTMを意識したも…

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

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

MCTSnetの学習(仮)

MCTSnetのだいたいの実装が終わり、将棋での教師あり学習を回し始めている。 論文通りの損失ではないけどとりあえずMCTSnetの将棋での教師あり学習が回るようになったが、やっぱり探索回数が増えると損失がハチャメチャになっているし、これが逆転してくる未…

時系列モデルが木構造を学習できることの検証

前回の考察では、時系列モデルが暗黙のうちに木構造を学習できるので木の遷移履歴を時系列展開しても良いという仮説を立てた。この仮説を多少なりとも検証するため、今回は木に関する簡単なタスクを考えて、それが学習可能かどうかを実験により確かめた。 実…

MCTSnetの損失計算部

MCTSnetの解説は他にもある ので、そちらも参照されたし。この記事では損失計算部分にだけ注目して記述する。 arXiv版とOpenReview版は式番号が異なるので注意。OpenReview(ICLR2018)で一回Rejectになって、ICML2018に通っていて、arXivの最新版はそのICMLに…

木探索についての考察2

以下の続き。 木探索がそもそもどういうものであるかと考えると、状態をノード、行動をエッジとして構築されるグラフ上を遷移しつつ、ノード上の価値を更新していく作業だと思われる。モンテカルロ木探索の選択ステップに「一個親のノードへ戻る」という選択…

Differentiable Neural Computersの実装

で書いた通り、ワーキングメモリモジュールを持つ探索マネージャについて考えている。 ワーキングメモリモジュールとしては LSTM Neural Turing Machine Differentiable Neural Computer Transformer(Compressive Transformer) あたりが可能性ありそうなのか…