研究生活の振り返り

 所属していた研究室では、修士論文として書いたものを適宜改稿して論文誌へ投稿するのが慣例となっており、自分もそれに倣って2月頃に投稿していた。

 大学院を卒業してニート生活も2週間が過ぎようとしているつい先日、その査読結果が返ってきて、結果は不採録だった。自分は研究、特に最終成果物として論文を生成することについてはとても向いてなかったなぁと痛感する。

 おそらく一生、少なくともしばらくの間は研究分野に戻ることはないだろうと思われるため、これで研究生活は一区切りということになる。世に出せなかった論文を成仏させる意味も込めて、研究生活を振り返る。

 所属していた大学ではB4になるときから研究室へ配属されるため、B4、M1、M2の3年間研究をしていたことになる。多少の誤差はあるが、概ねそれぞれ1年ずつ別の研究をしていたという感じだったので、それぞれについて思い出を記述する。

B4での研究(2018年4月〜2019年5,6月あたり)

 テーマ「評価値を確率分布化する」

 いつもの将棋でやっているこのテーマはB4のときから始めたものだった。AlphaZeroarXivに出たのが2017年12月5日で、これにとても惹かれるものを感じ、関連した研究をやりたいとは前から思っていた。

 なんにしても計算量が馬鹿にならないため、手元で再現できるくらいに学習速度向上(小さなネットワークでの精度向上)の工夫としてCategorical DQNを組み込むような形を試そうと思ったのが研究テーマの基本的な動機である。

研究初期 : 3層MLP・オセロ

 最初は深いネットワークではなく3層の全結合ネットワークで、オセロについて実験をしていた。浅いネットワークなのでNN用のフレームワークは使わず、行列計算ライブラリのEigenを用いて手動で全結合ネットワークを実装し、全てCPUで計算している。3層なので難しくはないが、誤差逆伝播も自力で実装している。

 オセロプログラムとして非常に低レベルな性能ではあるが、Categoricalモデルが多少有効だという結果は出たので、学部の卒論はこの結果で書いた。

研究後期(2019年2月頃〜) : LibTorch導入・将棋でも実装

 学部の卒論を書き終えて大きくプログラムを書き換える時間的余裕が出来たので、PyTorchのC++APIであるLibTorchを利用するように改修を行い、またオセロだけでなく将棋でも動かせるように実装した。大きくプログラムの仕組みが変わったのを機に、将棋ソフトの名前を『海底』から『Miacis』に変更して、以降これがメインのプログラムとなっていく。

論文

 卒論をベースに将棋の実験結果も加えて英語化し、IEEE Transaction on GamesというゲームAIに関する英文紙へ投稿したが、結果としてはReject。実装・実験が甘く、将棋でも技巧Depth10あたりとの比較だったので最先端とは程遠いというのも受けが悪い要因ではあった。

 一回Rejectが出たからといってすぐ諦める必要もないとはわかっているが、結局強いプログラムを作らなければ説得力が低いと思ったし、論文に対するやる気を完全に失って別のテーマをやりたくなってしまった。

M1での研究(2019年6月〜2020年6月)

 テーマ「ボードゲームにおける世界モデルの学習」

 この頃、深層強化学習分野で「世界モデル」という考え方がかなり流行っていた(と認識している)。強化学習における環境としてシミュレータを使うのではなく、その環境の変化の仕方自体も学習することを目指す分野である。

 自分の興味・関心もかなりこれに近いところにあったため、いくらかサーベイなどをしつつ、夏のインターンとしてDeNA社の強化学習コースに応募したところ採用されて、ほぼこのテーマでやらせてもらった。

 DeNA社の方ではそちらのゲーム(逆転オセロニア)でやりつつ、自分は自分で手元で将棋についてやっていた。Miacisのrepresentationというブランチがそれで、「表現ベクトル(Policy, Valueに分岐する直前の層) + 行動→次のターンの表現ベクトル」という予測を学習している。

 わりと順調に進んではいたが、2019年11月19日にMuZeroの論文がarXivに出て、完全に直撃してしまった。

 まぁアイデア的にこういう方向へ進むのはとても自然なので、むべなるかなといったところではある。

対外発表

 MuZeroとは被ってしまったが一応ドメインの差などを主張し、社の優秀な人たちからアドバイスを貰うことでなんとか形にして、人工知能学会で発表を行った。

M2での研究(2020年6月〜2021年1月)

 テーマ「時系列モデルを用いたゲーム木探索自体の学習」

 MuZeroで完全に被ったのがちょっとショックでもあり、また計算資源の差は大きいという現実も思い知って、M2として行うテーマを決めはなかなか難航した。時間もなくなっていく中で最終的にこういうテーマに落ち着いたわけだけど、自分の中で完全にしっくり来るものではなくて、追求しきれなかったところも多い。

 テーマの内容としては、探索における記憶部分(αβ探索やモンテカルロ木探索における置換表)を、時系列モデルで代替できないかという着想から始まっている。LSTMあるいはTransformerを使って、部分木を超えた情報伝達ができるようになれば良いと思っていたが、なかなか上手くはいかなかった。

 このテーマだと、最大限上手くいっても「同じ回数(20回程度)のMCTSよりは性能上がるかも」くらいであり、大会に出すプログラムとして性能が伸びるという手法ではない。結局、Miacis自体の性能改善をやりたくなってそっちに注力してしまったところもあり、今思えばもっと性能に直結することをテーマにすれば良かったかもしれない。(ただ、残された時間がそれほど多くない中ではっきりと性能を上げる自信がなく、結果が上手くでなくても逃げやすそうなものを選んでしまった。)

論文

 情報処理学会に投稿してReject。やはりテーマに対する自信のなさが尾を引いて、実験結果が詰めきれていないし、論調も優柔不断になっていて、箸にも棒にもかからないという感じであった。

 自分としても研究室の慣例なのでとりあえず出したという感触ではあり、これは仕方がないかなと思う。根本的に取り組む時間が短すぎたのも研究の質へもろに響いたと言えるだろう。

総括

 M1のものは査読なしの4ページなので半分くらいのものと見るとして、2.5本書いて世に出せたのは0.5本という感じか。もう少しやれれば良かったが、こんなもんかなとも思う。

 論文としての業績を重視するなら、B4のときに書いたものを別の論文誌に出し直すとか、粘ってみるべきだったのだろう。しかしそこに強いモチベーションは抱けなかった。将棋プログラムとしてこれで明確に性能が上がってほぼトップソフトになっているならともかく、そうでもない現状では他人に伝えるほどの手法ではないと感じてしまう。

 結局自分は研究はあまり好きではなく、実装パズルゲームがやりたいだけだったなというのが正直な気持ちである。たとえばアイデアを一直線に検証することに集中するなら、dlshogiのリポジトリをフォークして必要な改造だけ施して実験するやり方もあったわけで、目的に対して最短経路を取れていなかったなとは反省するところだ。

 自分としてはそれよりも新しいアイデアを今までのMiacisにどう組み込むかという部分を考えるのが一番楽しかったし、自分なりに奇麗だと思う実装をできたときは充実感があった。しかしそういう実装パートは研究全体からすれば部分的な要素でしかない。そこに齟齬があったというのが現状の認識となる。

 とはいえ、基本的には好きな・楽しい実装ばかりできたので研究生活は楽しかったといって間違いではない。やってみて、向いてなかったなとわかったのも一つの収穫だろう。結果を出せなかったのは残念だけど、満足ではある。以上。