画像以外へCNN(畳み込みニューラルネット)を利用した研究を調べてみた
麻雀AIでCNN(Convolutional Neural Network: 畳み込みニューラルネットワーク)の構成を考えるにあたって、そもそも画像以外のCNNってどんなのあるんだっけ?と思い、簡単に調べた。
ゲーム関連
盤面を使ったゲーム(囲碁・将棋・チェスなど)
盤面が9x9や19x19などの二次元座標で表現できて、CNNと親和性が非常に高い。
DeepMindが開発したAlphaGO*1, AlphaZero*2が特に有名。
囲碁であれば、黒石・白石の有無(one-hot)、数手前の状況等をそれぞれ19x19の特徴ベクトルで表現し、複数チャンネルあるものとして、CNNを行う。CNNとしてはResNetを利用。
将棋・チェスの場合、自分・相手のコマの種類ごとに一つのチャンネルを用意する。
位置の厳密性のため、プーリング層を設けていないのも特徴。
また、「手番が自分と相手どちらか?」「(将棋で)どの持ち駒を持っているか?」といった2値(True/False)情報は、盤面全部を0か1のチャンネルとして表現しているのも面白い。そういった情報は、畳み込みせずに特徴量ベクトルとして合成してもいい気がするが、構成をシンプルにしたいからなのか、計算速度の影響か、このほうが精度がいいからなのかよく分からない。
盤面を使ったゲームとして、正方形型の盤面以外にも、Hex*3と呼ばれるひし形をした盤面のゲームでもCNNを使った研究*4があった。 いわゆる3x3といった正方形型とは違うが、隣接するマス目を畳み込みフィルタで畳み込んでいるみたい。
トランプ(ポーカー)
ポーカーは不完全情報ゲームとして世界中で特にポピュラーなゲームのため、AI研究もよくされている。
トランプは、4(ハート等の色) x 13 (A~K)の二次元情報に落とし込むことが可能であり、それを活用している。*5
特にポーカーでは、2ペアのような数字と、フラッシュのような色を使うもの両方があり、二次元ベクトルを畳み込むことでうまく特徴量抽出できるらしい。
ただし、方法の一つとしてCNNが提案されているだけで、他のポーカーAIで全結合のネットワーク構造を採用しているものも多く、CNNの効果や効率的なアーキテクチャ等はまだまだ分からない印象。
麻雀
麻雀でも昨年のゲームプログラミングワークショップで論文が出ている。 *6
ちょうど私も麻雀AIで昨年にCNNを少し試したことがあって、最初は先に越された思いや、やっぱり有効だったといった思いが混ざった複雑な気持ちになった。
ただ、いろんなアーキテクチャを試していて、非常に参考になっていて、助かっているのは間違いない。
麻雀の牌の種類(34種)と枚数(0~4)を二次元ベクトルとして畳み込みをしている。
いくつかの方法を試しているが、特に精度が高かったのが、マンズ・ピンズ・ソウズそれぞれを別チャンネルとして9(1~9の牌)x5(0~4枚)のベクトルで畳み込む方法。
字牌は前後の牌との関係がほぼないので、全結合の層で結合している。
また、マンズ・ピンズ・ソウズには対称性がある(緑一色を除く)のでチャンネル間のフィルターの重みを共有しているといった工夫もしている。
畳み込みのフィルターサイズは5x9の大きいものを含めたほうが精度がいいらしい。
畳み込み層とプーリング層一つずつであり、あまりDeepではやっていない。
牌譜を使った教師あり学習で全結合よりも牌譜との一致率は少し高くなっていた。
自然言語処理
かなり研究が盛んな分野であるため、論文も多数ある。まだまだこれから新しい発表がありそう。
こちらにまとまっているのが分かりやすかった。
基本的には言語情報をWord2Vecなどのベクトル情報にして、1次元の畳み込みのフィルターを適用している例が多い印象。
あとは、単語の前後情報を抽出するためにRNN(Recurrent Neural Network)と組み合わせる例も多い。
言語情報をベクトルにする部分のほうが重要だったりもするが、自然言語処理系は深すぎて追いきれていない。
時系列データ
時系列の信号データをスカラー値と時系列情報でグラフのような形にして、そこにCNNを適用させる例も多くある。 *7 *8 *9
例えば、モーションセンサーからの行動認識とかであれば、センサーから取れる複数の情報(センサーの場所、加速度・位置など)をチャンネルとして扱う。
あまり読めてないが、時系列といえばLSTMなどのRNN系も効果的であり、RNNとの組み合わせの例も多そう。
見つけた例としては、モーションセンサーからの行動認識、Wi-Fi信号を使った室内空間の認識、株価の予測など。
個人的には、投資系と相性がいいように思えるし、いずれやってみたい。
全体を通して
恐らく他にもたくさんありそうだが、探しきれないので、いったんこんなところで。
CNN自体が人間の視覚を参考にしているため、基本は画像系が多いが、他への応用もかなりあった。
ただ、それぞれの分野で何人も研究しているわけではないので、本当にそのアーキテクチャが適切なのかがよく分からない。(画像とかだと競争も進みより制度の高いアーキテクチャが発見されるが)
特に、囲碁・将棋の手番や麻雀の字牌といった情報の特徴量化の方法や、畳込みフィルターのサイズ、プーリング層の必要有無、層の深さなどが研究によって大きく違い、また設定した根拠があまり書かれてないケースも多く、ノウハウ次第みたいなとこが気になった。
誰かノウハウを伝授してください。
目的としていた麻雀のCNN適用については、先行研究を参考にしながら改めて検証していく予定。
*1:https://deepmind.com/research/alphago/
*2:[1712.01815] Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm
*4:Reinforcement Learning for Creating Evaluation Function Using Convolutional Neural Network in Hex - Semantic Scholar
*5:[1509.06731] Poker-CNN: A Pattern Learning Strategy for Making Draws and Bets in Poker Games
*7:Deep Convolutional Neural Networks On Multichannel Time Series For Human Activity Recognition
*8:A Deep Learning Approach to on-Node Sensor Data Analytics for Mobile or Wearable Devices
*9:Detecting State Changes of Indoor Everyday Objects using Wi-Fi Channel State Information