思考は踊る、されども書けず

昨日考えていたとおり8時前には起きたし(狙っていた7時よりは遅くなってしまったけれど)、ちゃんと掃除だってした。掃除機の赤いランプが点灯したことをきっかけに説明書を取り出して問題解決を図る傍ら、いくつか壊れて廃棄した家電の残っていた説明書を紙ゴミにまとめたり、緩衝材を小さくまとめてゴミにしたり、考えていた以上にたくさんのことをした。

したのだけれど、せめて一行でも書こうとおもっていたコードは、一文字たりとも書けなかった。

ところで最近、発泡スチロールでなくて再生紙製の緩衝材が増えてきましたよね。あれ、パルプモールドという名前なんですってね。
さらなる再生はできないようで、だから可燃ゴミとして出してしまっていいみたい。手でちぎれるので、凹凸部分にそって分解すると嵩を減らせます。ちぎる際は、軍手をしておくのがいい。たぶんモールドに含まれているのだろうけれど、目に見えない程度の細かい破片が手にささって(半日で消えたけれど)不快でしたから。

書こうとしていたコードというのは、将棋AI。別マガジンで進めているディープラーニングによる将棋AIづくり。

書籍のAIは、それほど強くないらしく、というのも学習に使う棋譜が少なくて、深いニューラルネットワークを十分に学習させられないからのよう。だったら書籍で紹介されていない強化学習を使って AlphaZero まがいの将棋AIを自作したいと思い定めてしまった。

十分に学習させられない理由に、書籍に挙げられているとおり棋譜不足はもちろん、他にもいくつか思っていることがある。

囲碁よりはるかに盤面の小さな将棋に、囲碁同様の深さのネットワークを作っている。これでは教師データも不必要に多く準備せねばならなくなるだろうし、学習が不安定になる状況もありそう。

ポリシーネットワークは、着手をクラスに見立て2000+クラス分類問題に仕立てている。盤上の筋と段を特定する81マスに、移動元の8+2(桂馬の動き)に成・不成(=10×2)、さらに手駒からの打ち(7種)、これらの直積から成る2187=81×27を分類クラスにしている。
でも実際には成ることのできる場所は相手陣地3段に限られるし、駒によって動けない方向があるのに軒並み10方向を割り当てるなど、使えないクラスを増やしている感は否めない。

盤面の表現も、駒種別ごとビット表現しているけれど、僕だったら81マスに☗8種+成6種、同様に☖14種、そして空きを示す1種の29文字種を割り当てて一枚の画像で表現する。
加えて手駒の表現が必要になる。玉将は手駒にならず成駒も不要だから7種。☗☖の区別のために14種+空きの15文字種を用意する。玉将以外の全部が盤面から手駒に移動したとして38枚。だから手駒は38マスに15文字種を割り当てることで表現できる。こちらは文字種ごとにソートする約束にすれば、入力パターンもさらに減らせる。

将棋ドメイン知識をガンガン使うことになるけれど、このようにきちんと詰めていくことで入力も、出力もパターンを大きく削減できて、だからそのぶん少ないデータで学習させられると期待できる。

また Convolution レイヤーは Affine レイヤーの特殊な形態にすぎない(つまりカーネル以外の全結合が全て0固定の Affine)はずだ。盤面を画像として入力することで大局観が〜 と書かれているけれど、 Convolution はフィルター処理なので近傍に大きく偏ると僕は思っている。複数段 Convolution を重ねているから、右上端から左下端もいつか視野に入るだろうけれど、なんというか、ずいぶんと迂遠な気がしてならない。
だから僕は、学習に時間がかかって安定しないかもしれないけれど、すべてを Affine で構成したいとも考えている。

強化学習部分についても、☗☖を別の重みをロードして対戦させたら面白そうだとか、おもいつくことは山ほどあって。

それなのに、なぜ、手を動かさないんだ、僕は……

この記事が気に入ったらサポートをしてみませんか?