カーリングの局面評価関数を学習 with “tensor flow”

23
カーリングの局面評価関数を学習 WITH “TENSOR FLOWKATSUKI OHTO 2016/2/10

Upload: katsuki-ohto

Post on 05-Jan-2017

2.326 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

カーリングの局面評価関数を学習WITH “TENSOR FLOW”

KATSUKI OHTO

2016/2/10

Page 2: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

自己紹介

大渡 勝己 (Katsuki Ohto)

今は学生です

分野…ゲームAI

Page 3: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

LT内容

TensorFlow使ったことないけど軽い気持ちでLT立候補したらいつの間にか人数増えてて会場Googleで穴があったら入りたい

Page 4: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

カーリング

氷上で石を投げ合って得点を競うゲーム

オリンピックの時には全国的に騒がれる

複雑な要素を排除すると、ゲーム的には二人零和完全情報不確定ゲーム

Page 5: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

カーリングのルール

円の中心に近い方が得点をもらえる

← 黄色が3点

Page 6: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

カーリングAI電気通信大学の研究室が設計した戦略シミュレータ

「デジタルカーリング」http://minerva.cs.uec.ac.jp/curling/wiki.cgiを利用

Page 7: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

評価関数

局面の良し悪しを点数化

例)私の評価関数

connpassを見たらいつの間にか人数相当増えていた

→ −300実際話している今 → +500(緊張で気分が高揚)

Page 8: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

カーリング評価関数

カーリングの各エンド(テニスにおけるセットのようなもの)の得点−8 ~ +8 点

これを繰り返す

→局面の情報から、−8 ~ +8のうちどの得点になるかを予測できれば良い!

Page 9: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

カーリング+TENSORFLOW

INPUT 局面情報(石の配置)OUTPUT 予測される得点(の確率分布)

石の配置は画像として扱えるので、TensorFlowのチュートリアルコード(MNIST)を(ほぼ)そのまま使ってみよう!

Page 10: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

局面の画像化

先後の石の情報を強引に1枚の白黒にする𝑝画素 𝑠#盤上にある石α,  𝛽係数

𝑑(𝑝, 𝑠#) = 𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒(𝑝, 𝑠#)𝑐𝑜𝑙𝑜𝑟5 = ∑ α𝑒789 5,:; <

:;(先)

−∑ α𝑒789(5,:;)<:;(後)

石の影響をガウシアン(正規分布)で加算

Page 11: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

線形関数による予測

線形関数による近似

𝑦 = 𝑊𝑥 + 𝑏

y = tf.nn.softmax(tf.matmul(x_placeholder, W) + b)

得点予測率 41%(ランダムだと6%程度)

Page 12: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

出力クラス数

W = tf.Variable(tf.zeros([784, 17])) # 行列b = tf.Variable(tf.zeros([17])) # ベクトル

MNISTでは出力クラス数10だったところを変えるだけでOK

Page 13: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

突っ込み

そもそも棋譜のうち、「後手1点」の割合が41%<得点の分布(x100)>←後手 [ 0 0 2 8 32 97 239 415 15 139 32 9 3 1 0 0 0 ]先手→

𝑦 = 𝑊𝑥 + 𝑏

バイアス項が発散しているだけ…

Page 14: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

CNNによる予測

画像認識に強いCNN(Convolutional Neural Network)ならばもっともまともな特徴抽出ができるのでは

Page 15: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

CNNによる予測

画像認識に強いCNN(Convolutional Neural Network)ならばもっともまともな特徴抽出ができるのでは

… (チュートリアルをコピペ中)

得点予測率 53%!!

Page 16: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

突っ込み(その2)

実はトレーニングデータとテストデータに同じエンドの別局面が入っている

石が1個増えた

Page 17: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

突っ込み(その2)

・連続値が完全一致することはほとんどないので、完全一致した場合は得点も同じ

→石の位置を丸暗記しているだけかも

Page 18: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

評価関数の出来

隠れた石を叩こうとしたらガードに引っかかった→相手有利に

[0, 0, 0, 2, 2, 4, 13, 58, 1, 13, 1, 2, 0, 0, 0, 0, 0]

[0, 0, 0, 0, 2, 9, 34, 35, 7, 7, 1, 1, 0, 0, 0, 0, 0]

Page 19: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

突っ込み(その3)

そもそもCNNは平行移動に強いのが持ち味

カーリングの石の配置は平行移動可能なのか…部分的には可能かもしれない

扱う対象をよく考えた方が良い

Page 20: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

感想

・TensorFlowチュートリアルの内容だけでもすぐに応用できるので、入門としては豪華

・モデル保存が簡単にできる。特に複数の予測器をつなげても楽々(先手と後手で分けたり)

・いろいろ罠にはまらないよう注意…

Page 21: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

モデル保存

運命の出会いは突然にやってくる

saver = tf.train.Saver() # 保存(読込)準備

saver.save(sess, “model.ckpt”) #保存

saver.restore(sess, “model.ckpt”)) #読込

Page 22: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

感想

・カーリングはとりあえず機械学習を試すにはちょうどいい!

・機械学習の標準問題としてカーリングを!

Page 23: カーリングの局面評価関数を学習 WITH “TENSOR FLOW”

今後のゲームAI大会

2016/3/9 Game AI Tournament@電通大人狼カーリング…etc

2016/3/19 – 20 コンピュータ囲碁大会2016/5/3 – 5 コンピュータ将棋選手権他 ぷよぷよAIなど