【WCSC29】個人的に興味を惹かれたアピール文書集

 すでにuuunuuun氏が書かかれた全チームの簡単なまとめや、やねさんによる見どころ紹介がありますが、ここでは個人的に面白そうだなと思ったものについて妄想レベルの私見を交えながら触れていきたいと思います。自分がディープラーニング系のソフトを開発しているのもあってそちらに偏っているかもしれませんがご了承ください。

たこっと

 新しい特徴量を考えているということで面白そうです。ニューラルネットワークを利用しつつのものでありながらKKPARと名付けられているのでNNUEに近い感じではあるんでしょうか。

 あとは最適化手法としてAdaBoundを実装するとありますね。実際Optimizerの違いによる性能の差ってどの程度のもんなのかなぁと多少疑わしい気持ちで見ている面もあるわけですが、上手くいったら面白いなとは思います。

elmo

 ReLUを使うニューラルネットワークならなんでもHeの初期化で大丈夫だと勝手に思っていましたが、NNUEに初期化の問題があるとは知りませんでした。バイアスを0ではなく小さい正の値にするとかで解決する問題でもないんですかね。NNUE型のソフトには一切触ったことがないのでこの辺の挙動がよくわからないというのが正直なところです。

 兄弟局面の比較から評価値をいじるのは探索との兼ね合いという面が強くなっており、強化学習の枠組みに上手く混ぜていけるのかなぁというのが少し迷っているところです。まぁそもそも評価値を状態価値として考える(強化学習の枠組みで考える)ことにどこまで必然性があるのかも微妙なのかもしれません。

 NNUEへのCNN取り込みについては特に詳細が書かれていないので全然見当違いの理解をしているかもしれませんが、特徴量の入れ方、結合の組み方などを工夫すればそのようなことができるかもしれない? と少し思いました。

習甦

 評価値推移をフィードバックして推定された勝率の割引報酬を考える強化学習とのことですが、個人的には将棋の手数(せいぜい300手程度)で割引率を考える(1未満にする)必要があるのかどうかは疑問です。特に「絶対に勝ちだけど手数自体はかかる」ような局面に対して手数による割引をかけると不当に低い報酬と考えてしまうのではないかと心配しているのですが、現実的にはそういう局面は少ないし別にどうでもいいという可能性はありそうです。あるいは評価値が一定以下になった場合に投了を行うと問題ないのかもしれません。

dlshogi

 学習データ生成時の詰み探索の処理とかそういう細かい部分で完成度が高いという印象です。Pollicyの学習もREINFORCEの方が良いというのはそうなのかもしれません。

 ミニバッチサイズが64~1024で徐々に増やすというのは、学習率を上げる代わりにミニバッチサイズを上げた方が良いという論文を意識されてのことなんでしょうかね。学習率の方も下げてはいるようですが。

 dlshogiは一致率を指標としていることが多いように思えますが、損失よりこっちの方が良い指標なんでしょうか。自己対局による検証はコストがかかるのでこれで済むなら大きいのですが。

ねね将棋

 フレームワークとしてCNTKを使っているようで、僕はPyTorchのC++APIを使っているのですが結構苦労が多く、CNTKが安定しているならその方がいいのかもしれません。そもそもC++でネットワーク部分を書くことに拘る意味があるのかも怪しいところですが。本番でp3.16xlargeを使うということはtensorコアも有効活用できているということなんでしょうかね。

 評価値部分が2チャネルというのは少し不思議です。評価値と勝敗を別に予測する効果がどの程度あるものかすぐにはわかりませんが、学習を安定させられる効果があったりするのかなと思っています。手元での実験でもPolicyに比べてValueの学習は上手く進まないことが多いと感じていて、AlphaZeroを改良するならValue側を多少工夫するのが手っ取り早いかなという印象です。

芝浦将棋 Softmax

 モンテカルロ・ソフトマックス探索を採用しているという点が面白いと思います。細かい定義はもちろん違うんですが、ニューラルネットワークでPolicyを計算するとき、だいたいQ値にソフトマックス関数をかけているだけのように思えることもあります。実際にQ関数と方策の間に関係があることを示した話もあり、このあたりが統一的視点から眺められれば面白いです。MCTSとαβ探索は適当な仮定を入れれば一致するんじゃないかなとかは妄想しており、モンテカルロ・ソフトマックス探索もそこに加わる一種として記述できそうな気もします。

762alpha

 Flowboardの説明がよくわかりませんでしたが、なるほど局面のデータ構造を工夫するという案も当然ありますね。

 良い評価関数に期待される性質として挙げられるものも興味深いところです。ベイジアンフィルタには詳しくないので学習時の工夫における妥当性はいまいちピンとは来ませんが、一般化して学習時のみに使う対戦相手を用意するというのはありな話だとは思います。

Windfall

 正方形ではないカーネルを考えるのも確かにやってみたいことの一つではあります。角の利きを考えると斜めのカーネルもあった方が良いんでしょうか。それを上手く実装できるのかどうかはわかりませんが……。

 ネットワークを深くしながらの逐次的な学習ができれば良いんですが上手く実装する方法があまりわかっていません。Define by runのフレームワークならわりと素直にできるんでしょうか。

st34

 「局面の評価と詰みの評価で異なる評価関数を使用」という点が面白いと思いました。以前囲碁の方で補助タスクを入れた方が性能が良くなるという論文についての記事を上げたんですが、将棋だと詰みの有無を補助タスクとして与えることで同じような効果が得られないかなと考えたりします。詰みのある確率を出力できれば学習の補助だけではなく実践の探索時でも利用ができそうなので悪くないタスクなんじゃないかと勝手に考えていますが、実験などはまだしていません。

うさぴょん外伝

 入力情報の圧縮がすごそうです。10k時点での一致率が最終的な性能とほぼ同等という点も興味深く、確かにほとんど同じような条件で行っているなら馬鹿正直に最後まで回していく必要もないのかもしれません。

 そして真に興味深いのは追記以降。これは行動の表現を考えているということにも近いのだと思います。行動表現の獲得を評価値との学習に結びつけたこの構造は注目に値すると思います。得られた行動表現で似た行動が近い表現になっているのかどうかが気になります。この行動表現空間への写像として方策関数とかを考えられないものでしょうか。あるいは環境モデルにおいてこの行動表現で遷移するとか……。

 完全に自分の興味が先行してしまいましたが、これはかなり面白い仕組みだと思います。将来的にはDNN系将棋ソフトのスタンダードになってもおかしくないのではないかと考えているところで、ぜひとも今回だけでなく発展していった形を見たいところです。

おまけ1:Miacis

 手前味噌にはなりますが、Miacisも評価値の確率分布を考慮する少し珍しいプログラムになっています。単に確率分布を考えて見た目が面白いというだけではなく、それがちゃんと評価関数の精度向上(+450程度)につながっており、なおかつ探索でも有効利用できている(+R80程度ですが……)というのがささやかな自慢ポイントです。GUIなどは作っていないので将棋所のテキスト部分で簡易的な表示をすることしかできませんが、会場に来られる方はぜひ様子を見に来ていただけると嬉しいです。

おまけ2:GPGPU勢の使用フレームワーク

 個人的に興味があったので明示的に使用フレームワークを書いていたソフトだけ抽出しました。多種多様です。cuDNNのAPIを直接叩くのが一番迫力あると思っています。

ソフト名 フレームワーク
dlshogi Chainer, cuDNN
ひまわり Tensorflow
Crazy Shogi cuDNN
ねね将棋 CNTK
Miacis PyTorch(C++API)
Windfall PyTorch(C++API?)
AobaZero OpenCL
Google Colab TPU将棋 Tensorflow