読者です 読者をやめる 読者になる 読者になる

TadaoYamaokaの日記

山岡忠夫 Home で公開しているプログラムの開発ネタを中心に書いていきます。

コンピュータ将棋におけるディープラーニングの考察

先日の日記で、コンピュータ将棋とAlphaGoについて言及したが、次のPonanzaがディープラーニングに成功したということで、どのように適用しているのかが気になっている。

そこで適当に考察してみる。

電王戦のインタビューでもプロの棋譜との一致率について言及していたことから、学習しているのは評価関数ではなく方策(policy)であると思われる。

入力に盤面の情報を与えて、出力に指し手の確率を出力する関数である。

入力

ポイントとなるのが、入力の盤面の情報の与え方であると思う。

AlphaGoでは19×19の各座標の白石、黒石、空きで3チャンネル(2値)の情報と、アタリやシチョウなどの若干の囲碁の知識を特徴量として各チャンネルに割り当て、合計で48チャンネルのデータを入力としていた。

将棋では、駒の種類が多いため、成りを含めた14種類のコマ数分のチャンネルが必要になる。
また、持ち駒もあるため、9×9の座標の他に、持ち駒の表現が必要になる。

畳み込みでは、位置の情報が重要であるため、なんらかの方法で位置に対してノイズとならないように入力してあげる必要がある。

また、AlphaGoでは盤面の情報の他にアタリやシチョウの場所なども与えているので、将棋の知識から2歩の場所などは与えた方がよさそうである。

出力

出力は、AlphaGoでは石を置く場所を表す19×19の1チャンネルで良かったが、将棋では座標の他に、どの駒が移動するか、成るのか、持ち駒から指すのかという情報が必要になる。

インタビューで、ルールを教えなくても正しい結果がでるようになったと言っていたので、移動については考慮せず、座標と駒のみを出力して、どこから移動したかは後からロジックで見つけているのかもしれない。
その場合、移動元が一意に決まらないケースがたまにあるという問題がある。

移動元と移動先の座標をそれぞれのチャンネルとして出力しているのかもしれない。

ネットワーク構成

ニューラルネットワークの構成は、AlphaGoではプーリングなしの13層の畳み込みニューラルネットワークだったが、似たような構成でよいかもしれない。

学習

以上の入力と出力、ネットワーク構成の設計ができたら、AlphaGoと同様にプロの棋譜から指し手を教師データとして誤差逆伝播で行うことができる。
AlphaGoのSL policy networkでは50GPUで3週間かかっているので、おそらく収束にはかなりの計算リソースが必要になると思われる。

方策改善

AlphaGoのRL policy networkと同様の方法で、自己対戦により強化学習の手法で、方策改善を行うことができる。

AlphGoの論文では以下の論文が引用されている。
Williams, R. J. Simple statistical gradient-following algorithms for connectionist reinforcement learning. Mach. Learn. 8, 229–256 (1992).

この論文で提案されているのは、REINFORCEアルゴリズムという、関数近似手法を使い強化学習を一般化したものである。

価値関数の学習

AlphaGoのValue networkと同様の方法で、方策から価値関数を学習することができる。

大量の異なる局面からRL policy networkの方策に従い最後までプレイしたときの報酬から、価値関数を回帰により学習する。

対戦時の方法

AlphaGoでは、モンテカルロ木探索の着手予測にSL policy networkを使い、プレイアウトの結果とValue networkの結果の平均をとることで、うまく従来の手法と組み合わせている。
ディープラーニングでは読みの部分で弱点があるので、プレイアウトで補っているものと思われる。

将棋は、囲碁以上に読みが重要なゲームであるため、ディープラーニングのみで指しても強くないと思われる。
探索とうまく組み合わせる必要がある。

先日の日記で書いたように、従来の探索を使用し、学習した方策を枝刈りに使用し、学習した価値関数を探索の末端の評価関数に使用することでディープラーニングを従来の探索と組み合わせて使えると思う。

以上、1行もコードを書かずに勝手に考察してみました。

PonanzaもAlphaGoのように論文を書いてくれることを期待してます。

そうしたら来年のコンピュータ将棋はディープラーニング一色に染まりそうですね。

追記

上で書いた内容は、専門家でない私の勝手な考察なので、おそらく全くの的外れです。
あまり参考にしないでください。

チェスでの先行研究の情報を追記しておきます。

チェスでのディープラーニングの実装があるようです。
Deep learning for… chess · Erik Bernhardsson
これは、方策ではなく評価関数を学習しています。

この論文では、評価関数と実現確率を学習しているようです。363個の特徴を入力しており、入力特徴の設計の参考になるかもしれません。
[1509.01549] Giraffe: Using Deep Reinforcement Learning to Play Chess

このサイトで研究がまとめられています。
chessprogramming - Deep Learning