情報・システム工学概論 2015-05-25 コンピュータゲームプレイヤ 鶴岡 慶雅 工学部 電子情報工学科 工学系研究科 電気系工学専攻 概要 • コンピュータ将棋と機械学習 – ゲームと人工知能 – ミニマックス探索、αβ枝刈り – 評価関数 • 囲碁、ポーカー、麻雀、他のゲーム – モンテカルロ木探索 – 不完全情報ゲーム – ナッシュ均衡 ゲームと人工知能 • 人工知能研究 – 計算機で知的な情報処理ができるようにしたい • ゲーム AI – 限定された「世界」 – ルールが明確に定義 – 手法の性能評価が比較的容易 – 強い人間プレイヤの存在 将棋 • Japanese chess • 持ち駒のルール(取った駒が再利用できる) • 将棋人口(1年に1回以上指した15歳以上の人の数):700万人 将棋電王戦FINAL • 2015年3月~4月 – 持ち時間 5時間 – プログラム事前提出 • 結果 – 第1局 – 第2局 – 第3局 – 第4局 – 第5局 ○ 斎藤慎太郎五段 vs Apery ● ○ 永瀬拓矢六段 vs Selene ● ● 稲葉陽七段 vs やねうら王 ○ ● 村山慈明七段 vs ponanza ○ ○ 阿久津主税八段 vs AWAKE ● コンピュータ将棋選手権2015 • 決勝リーグの結果(5月5日) Program Hardware (# cores) 勝 敗 分 ponanza 64 7 0 0 NineDayFever 18 5 1 1 AWAKE 8 4 2 1 Apery 8 4 3 0 52 3 4 0 544 3 4 0 12 1 7 0 8 0 8 0 GPS将棋 YSS 激指 Selene コンピュータ vs 人間 http://www.junichi-takada.jp/computer_shogi/comvshuman.html 2005年10月 プロ棋士と将棋ソフトの対局禁止令 棋力 • 段、級による評価 – 10級~1級、初段~六段 – 免状、将棋道場などによる • プロ棋士は独自の段、級 – 奨励会(三段まで) – 四段以上がプロ棋士 • 基準があいまいで棋力の評価には使えない 将棋倶楽部24 • インターネット将棋道場(会員数 30 万人) • レーティングシステムによる棋力評価 http://www.shogidojo.com/ レーティング • 棋力を数値化する手法 – Elo rating system EA = 1 1 + 10 ( RB − R A ) / 400 E A : プレイヤAが勝つ確率 RA : プレイヤAのレーティング RB : プレイヤBのレーティング – 対局相手と勝ち負けの履歴から最尤推定 将棋倶楽部24のレーティングの分布 600 1600 2800 http://ameblo.jp/professionalhearts/entry-10003293849.html プロ棋士のレーティングの分布 45 40 40 40 人数 35 31 30 27 25 20 15 15 10 8 3 5 1 0 1200 1300 1400 1500 1600 1700 1800 1900 レーティング http://homepage3.nifty.com/kishi/ranking2.html コンピュータ将棋の棋力 • 1局30分以内で終わるような早指しの場合 レーティングで 3500点以上 • 長い持ち時間の将棋では? – 持ち時間が長くなると相対的に人間にとって有利 コンピュータチェス・将棋・囲碁 FPGAで将棋プログラムを作ってみるブログ http://blog.livedoor.jp/yss_fpga/archives/53897129.html 稲庭将棋戦法 • 棋譜 – WCSC21_F2_GEK_PON.csa • 相手の時間切れ負けを狙う • 歩を全く突かず自陣のなかで駒を動かすだけ • どこかに駒のききを集中させれば簡単に崩壊する はずだが – そのような戦略的な思考はコンピュータは苦手 – 学習データにそのような棋譜がない – そもそも相手は自分が大優勢だと錯覚している コンピュータの思考法の原理 2 現在の局面 2 1手先の局面 2手先の局面 2 3 -4 1 0 -2 -4 -2 5 • 評価関数によって末端局面の有利・不利の度合いを数値化 • お互いが自分にとって最も都合の良い手を選ぶと仮定して逆算 (ミニマックス探索) 深さ優先探索 2 現在の局面 2 1手先の局面 2手先の局面 2 3 -4 1 0 -2 -4 -2 • 関数の再帰呼び出しで簡単に実装できる • 省メモリ 5 枝刈り 2 現在の局面 2 1手先の局面 1 枝刈り! 2手先の局面 2 3 1 -2 枝刈り! -2 • 探索ノード数を大幅に減らせる • 現在局面で選択する手と評価値は変わらない 反復深化 最大深さ1で探索 最大深さ2で探索 最大深さ3で探索 最大深さ4で探索 • 探索の最大深さを徐々に深くしていく • 時間がなるまで繰り返す 評価関数 • 局面の有利/不利を数値化 – 互角ならゼロ – 先手が有利ならプラス – 後手が有利ならマイナス • 重要な要素 – – – – 駒の損得 駒の働き 玉の危険度 序盤の駒組み +320点 駒の損得 • 駒の価値 駒種 価値 駒種 価値 王 ∞ 竜 1280 飛 920 馬 1150 角 750 成銀 590 金 610 成桂 610 銀 570 成香 630 桂 310 と 660 香 270 歩 100 評価関数 • 線形モデル – 重みベクトルと特徴ベクトルの内積でスコアを計算 重みベクトル v(t ) = w φ (t ) T 局面 t のスコア 局面 t の特徴ベクトル 特徴ベクトル • 駒の損得を表現する特徴ベクトル 1 − 1 3 (先手の飛車の数)-(後手の飛車の数) (先手の角の数)-(後手の角の数) (先手の歩の数)-(後手の歩の数) 重みベクトル • それぞれの特徴の重要さを表す 920 750 100 飛車を1枚得していることの「重み」 角を1枚得していることの「重み」 歩を1枚得していることの「重み」 スコアの計算 • 重みベクトルと特徴ベクトルの内積をとる 920 750 (1 − 1 3) = −250 100 後手が少し(歩2.5枚ぶん)有利 駒の働き • 序盤は駒の損得だけ考えていればよい • 終盤は「駒の損得より速度」 – 隅のほうの駒を取りにいっている間に自分の玉 が追い詰められる ⇒ 昔の将棋ソフトの典型的な負けパターン • 駒の働きを考慮することが非常に重要 駒の働きを表現する特徴ベクトル • 例) 盤上の2つの駒の位置関係 どんな駒が どこにいる (14×81) 2 = 1285956 129万次元の特徴ベクトル 重みベクトルを手作業で決 めるのは無理! 比較学習(comparison training) • コンピュータチェスの評価関数の自動学習 – Tesauro (2001), DeepThought – 教師付き学習 • エキスパートの棋譜 – 多少効果あり • 将棋では大成功 – 別名 Bonanza メソッド (先読みなしの)比較学習 プログラムが選んだ手 v1 プロ棋士が指した手 v2 v3 • プロ棋士が指した手と同じ手を指すように調整 • v3 > v1 となるように重みベクトルを調整 先読み+学習 プログラムが選んだ手 v1 プロ棋士が指した手 v2 v3 プログラム による探索 y1 y3 • y3 > y1 となるように重みベクトルを調整 • プロ棋士の読みをプログラムの読みで代用 最適化 • Bonanza 方式 (保木, 2006) – 損失関数を定義 ∑ T [wφ (t ) − wφ (t )] j∈N j T(x) 1.0 0.5 1 0.0 -2 -1 0 1 x / 歩の交換値 (保木, 2006) 図1:T(x) の関数形.(実線)階段型関数 (破線)計算で実際に用いられたもの – 損失が極小になるように重みベクトルを最適化 2 激指の評価関数の学習法 • パーセプトロン学習 1. 学習データ中の局面をランダムにひとつ選ぶ 2. 最善手の選択を間違えるなら重みベクトルを更新 3. 以上、繰り返し • 更新式(正解手のスコアを超える手が1つの場合) ( ) w ← w + φ t * − φ (tˆ ) 正解手からの探索での 末端局面 間違えて選ぶ手からの 探索での末端局面 なぜ学習できるのか? • 更新後のスコアの差を計算してみると・・・ 正解手の更新後のスコア φ (t )(w + φ (t ) − φ (tˆ )) = wφ (t ) + φ (t * * * ) * 2 ( ) − φ t * φ (tˆ ) 間違えて選んだ手の更新後のスコア 2 * * ˆ ˆ ˆ ˆ ˆ φ (t ) w + φ t − φ (t ) = wφ (t ) + φ t φ (t ) − φ (t ) ( 両者の差 ( ) ) ( ) ( ) (( ) ) wφ t − wφ (tˆ ) + φ t − φ (tˆ ) * もともとの差 * 必ず正 2 激指の評価関数の特徴量 • • • • • • • • • • • • • 盤上にある同種の駒の数 持駒にある同種の駒の数 自玉・相手玉との相対位置 位置と自玉・相手玉の絶対位置との組み合わせ(序盤のみ) 位置と大駒の絶対位置との組み合わせ(序盤のみ) 隣にいる駒 行(Y座標)、列(X座標) 自分のきき、相手のききがついているかどうか ピンされているかどうか 歩でたたかれる可能性があるかどうか 2つ上にある駒 隣接する升にいる駒 : 学習 • 学習データ – プロ棋士の棋譜約5万局 – プロ棋士の指し手が正例、それ以外の合法手は負例 • 学習にかかる時間 – 16時間(探索深さ6) • 棋譜の指し手との一致率 – 序盤48.3% 中盤43.0% 終盤45.3% 激指の実装について • 言語 • 開発 : C++ (約5万行) : linux + gcc • 探索法 : 実現確率打ち切り • 評価関数 : 自動学習(Bonanza 方式) • 探索速度 : 200万局面/秒 on Xeon W5590 探索アルゴリズム • 実現確率打ち切り – 局面の実現確率を探索打ち切り条件とする (実現確率)=(親局面の実現確率)x(遷移確率) 1.0 0.5 0.3 0.5 0.7 0.35 0.3 0.2 0.1 遷移確率 0.5 0.15 実現確率 遷移確率 指し手のカテゴリだけ見てみると カテゴリ 駒得で取り返す 駒得で駒を取る 駒得で王手をかける 飛車が成る 角が成る : 遷移確率 58~89% 16~42% 43% 21% 20% : 様々な特徴量を用いて推定 • ロジスティック回帰モデル p( y | x ) = 1 F 1 + exp − ∑ λi f i ( x ) i =1 素性の重み 素性関数 • 2値分類: 「指される」 or 「指されない」 • 訓練データの尤度を最大化するようにパラメータ (素性の重み)を決定 遷移確率推定に利用する特徴量 • • • • • • • • • 指し手そのもの(移動元と移動先の座標、駒の種類) 駒の種類 駒の移動元の局所的な盤面情報(3x3) 駒の移動先の局所的な盤面情報(3x3) 駒の移動先に敵のききがあるかどうか 駒得をする手かどうか 直前に動いた駒を取り返す手かどうか 相手の飛車の位置と局所的な盤面情報の組み合わせ : 学習 • プロ棋士の実戦譜約5万局 – 実際に指された手を正例、それ以外の手を負例 とした学習データの条件付尤度を最大化 ( ) Lλ = ∑ log pλ y ( j ) | x ( j ) − C ∑ λi j – L1ノルムによる正則化 • 数値計算によって最適化 – OWL-QN法(quasi-Newton法) i 指し手予測の例 激指の予測 ▲7一角(0.28) ▲3四歩(0.09) ▲5三角(0.09) ▲5三銀(0.02) ▲5七飛(0.02) ▲4一銀(0.02) : △4四金まで 予測精度 • 学習データとは別の100局で評価 1位 10位まで 20位まで 序盤 59.2% 97.0% 99.7% 中盤 40.2% 87.5% 95.9% 終盤 37.4% 83.2% 91.8% 合計 45.5% 89.3% 95.9% 読みの深さ • 中盤の局面(探索時間:約30秒) 8000000 7000000 6000000 5000000 4000000 3000000 2000000 1000000 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 詰め将棋 王手の連続で相手玉を詰ます 詰む手順が見つかれば勝ち それぞれのノードの先頭で呼ぶ 残りの実現確率に応じて詰めルーチンの探 索ノード数の上限を設定 • アルゴリズム: dfpn • • • • – 証明数と反証明数を用いた深さ優先探索 探索量と強さの関係 探索の基本深さ 勝敗 勝率 9 vs 8 478勝 98敗24分 0.83 10 vs 9 458勝119敗23分 0.79 11 vs 10 441勝134敗25分 0.77 12 vs 11 447勝128敗25分 0.78 13 vs 12 433勝140敗27分 0.76 並列化による高速化 • αβ法 – 前の探索結果を利用して探索範囲を狭めることができる – 逐次的に実行するのが最も効率的 – 効率的に並列化することは難しい • 速度向上 – 8コアのマシンで約4倍の速度向上 マルチスレッドによる並列化の効果 コンピュータ将棋の棋力の伸び • 半分はハードウェアの進歩:速度2倍で70点 • 残りはソフトウェアの進歩 棋力の伸びの予想 • 速度向上とレーイティング – 思考速度が2.5倍でレーティングが100点上昇 • コンピュータの速度向上 – 5年で10倍 • ソフトの改良がなくても10年でレーティングが 500点上昇? 将棋ソフトの新しい役割 • 将棋プログラムは強くなりすぎた – もうアマチュアで勝てる人はいない • 人間の上達を助けるツール – 「悪手」「好手」の指摘 – 検討のツール – 指導対局 • 観戦のサポート
© Copyright 2024 ExpyDoc