コンピュータ将棋におけるカーネル法を用いた静的評価関数の学習 九州大学大学院システム情報科学府修士1年 末廣 大貴 コンピュータ将棋におけるカーネル法を用いた静的評価関数の学習
目次 自己紹介 研究背景 関連研究 提案手法 実験 今後の課題
自己紹介 九州は福岡から来ました 研究室では主に機械学習について学んでます 学部時代は将棋部で、機械学習がコンピュータ将棋界で流行っていると聞き、研究を始める 研究室は違うが、瀧本先生と共同研究してます そしてこの研究会を紹介されました でもまさか一人で行くことになるとは・・・
将棋は「解ける」か? ゲームのパターン数 オセロ 10の60乗 チェス 10の120乗 将棋 10の220乗 囲碁 10の360乗 オセロ 10の60乗 チェス 10の120乗 将棋 10の220乗 囲碁 10の360乗 将棋をしらみつぶしに解くことはほぼ不可能 強い将棋コンピュータを作ろう
「強い」コンピュータ将棋を作るために 局面評価(形勢判断)の正確さ 正確な静的評価関数 先読み(探索)の速さ 枝刈り,並列化など
静的評価関数 入力:局面を表現するベクトル 駒の有無(駒割) 駒の位置関係 玉の危険度 出力:実数(評価値) を重みベクトルとしたとき,
静的評価関数 例:駒の有無だけを考えた静的評価関数 例:駒の重み(手番で符号を入れ替える) 飛 角 金 銀 桂 香 歩 龍 馬 と 成銀 成桂 成香 と 170 140 100 80 60 50 20 185 160 91 82 78 65
静的評価関数 先手は後手より 馬1枚得(+160) 角1枚得(+140) で300点優勢
静的評価関数の作りかた 従来・・・人間の手作業による調整 ボナンザメソッド(保木,2006) 機械学習による、特徴ベクトルの重みの自動調整 大変な労力 作成者の棋力,感覚に依存 ボナンザメソッド(保木,2006) 機械学習による、特徴ベクトルの重みの自動調整
問題提起 特徴ベクトルの要素は作成者が用意しなければならない →やはり作成者の感覚、棋力に依存 →やはり作成者の感覚、棋力に依存 実際、現在の強豪プログラムの多くは、将棋の高度な知識が必要とされるような特徴ベクトルを多く用い、学習を行っている
問題提起 局面の単純な情報のみから、必要な特徴を自動的に作成し、学習できないか
提案手法 サポートベクターマシンとカーネル法に注目 サポートベクターマシン カーネル法と相性の良い優秀な学習器 カーネル法 カーネル法と相性の良い優秀な学習器 カーネル法 特徴ベクトルの要素同士の組み合わせから成る新しい特徴を構成する(今回の手法の骨子)
SVM(サポートベクトルマシン) ? 超平面 座標上に学習サンプルが与えられる マージン(超平面と一番近い例との距離) が最大となるような超平面を作成 ? 未知の例が与えられる 超平面に応じて分類
SVM(サポートベクトルマシン) これは二次計画問題なので,効率よく 解くことが出来る 線形分離不可能なデータには性能が不十分
カーネル法 データを高次元の特徴空間上へ写像し、 SVMを線形分離不可能な問題にも対応させる 超平面
カーネル法 カーネル関数 先ほどの式の を に置き換え るだけで,特徴空間上でのマージン最大化超平面 を求めることが出来る
多項式カーネル 次元の点を 次元の特徴空間に写像 例: が2次元ベクトル、
ガウシアンカーネル 無限次元の特徴空間に写像 カーネルを使えば,元の特徴のn項関係を特徴とする特徴空間上で超平面を学習できる
提案手法 プロ棋士の棋譜を用意 棋譜の全ての局面に対し プロが指した手の後の局面(棋譜の次局面)を正例 その他の合法手後の局面を負例 とする 全ての局面を単純な特徴ベクトルで表したものを学習サンプルとして、SVMとカーネル法を用いた学習を行う
提案手法 単純な特徴ベクトル(値は 0 or 1)の例 など 要素の数は,トータルで6000弱 盤上の駒kの数m B[k][m] 持ち駒kの枚数m H[k][m] 盤上の位置pに駒kがある P[p][k] 盤上の位置pに駒kが利いている E[p][k] など 要素の数は,トータルで6000弱
提案手法 特徴ベクトルファイルの具体例 (SVMlight,LIBSVM形式) ラベル B[歩][] B[香][] ・・・ H[歩][] P[11][] -1 8:1 28:1 541:1 560:1 815:1 9:1 542:1 +1 561:1
対局方法 学習で得たSVMの超平面を用意 局面の全ての合法手後の局面の単純な特徴ベクトルを書き出す 超平面と局面のベクトル表現との内積をその局面の評価値とする 最も評価値の高い局面を選択する minimax法は用いない
学習から対局までの概略図 プロの指した +1 9:0 28:0・・・ 後の局面 -1 9:0 28:0・・・ その他の合法手後の局面 ・ 超平面 学習! +1 9:0 28:0・・・ プロの指した 後の局面 その他の合法手後の局面 -1 9:0 28:0・・・ ・ SVMとカーネル 棋譜のある局面
学習から対局までの概略図 9:0 28:0・・・ すべての合法手後の局面 ・ 超平面との内積計算 ! SVMとカーネル 対局中のある局面 1.05499 - 0.43635 0.53457 ・
実験 以下のプログラム同士を対戦させた SVMlightを使用(http://svmlight.joachims.org/) ランダムに指すプログラム 10局学習したプログラム(カーネル法有る無し) 20局学習したプログラム(カーネル法有る無し) Passive Aggressive(オンラインアルゴリズム)の カーネルなしで2000局学習 SVMlightを使用(http://svmlight.joachims.org/) カーネルは多項式カーネル( )を用いた 特徴ベクトルは先ほどあげた6000弱のもの 全てに詰め将棋ルーチン(7手詰)を搭載
実験 相手 lin10 lin20 ker10 ker20 PA 2000 rand 勝敗 手番 先 後 linear10 ○ × × × ○ × × × × × × ○ ○ ○ 4 - 0 linear20 ○ × kernel10 10 - 0 kernel20 ○ ○ ○ ○ 8 - 0 random 0 - 10
重要な問題 なぜ最高で20局しか学習していないのか? →学習サンプルがメモリに乗らない (100局で約1.5G) →サンプル数を増やすと,計算時間が急速に増大 現在棋譜を50000局用意しているが・・・
課題 学習に時間がかかりすぎる(→並列化?) メモリに乗らない(→オンライン?) 基本特徴ベクトルの追加(相対位置、王手など) SVMのパラメータの最適化 やたら駒を切りたがるので,カーネルに期待しつつ,静的評価関数の正確さを測るため探索も入れた方が良いかも ランキング問題として考えてみる