強豪囲碁ソフト「彩」について 山下 宏 2009 年 9 月 11 日 機械振興会館 ※彩(あや)と読みま す.

Slides:



Advertisements
Similar presentations
G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
Advertisements

コンピュータ囲碁における Root 並列化について 発表者 副島 佑介. 目次 研究背景 – 囲碁の難しさ – モンテカルロ木探索について – 並列化手法の先行研究 提案手法 – Root 並列化における合議制 実験結果 まとめ.
分散分析と誤差の制御 実験結果からできるだけ多くの情報を取り出すために 分散分析を利用する 主効果の大きさ 交互作用の大きさ 誤差の大きさ 採用した因子の効果の有無 の検定には,誤差の大きさ と比較するので誤差を小さ くできれば分散分析での検 出力が高まる どのようにしたら誤差を小さくできるか?
放射線の計算や測定における統計誤 差 「平均の誤差」とその応用( 1H) 2 項分布、ポアソン分布、ガウス分布 ( 1H ) 最小二乗法( 1H )
 C 川船 美帆.  強い人工知能の作成 o 「遺伝的アルゴリズム」  「どうぶつしょうぎ」のアプリケーショ ン作成 o スマートフォン向けアプリケーション.
J: Magical Switches JAG 模擬地区予選 2013 原案:保坂 解答:保坂・楠本 解説:保坂.
2行+αチョンプに関する考察 京都大学 ○後藤順一 伊藤大雄.
5路盤の完全解析の結果 論文名:Solving Go on Small Boards 著者: Eric C.D. van der Werf
囲碁プログラミングの探索における小目標間の依存関係解決に向けて
極小集合被覆を列挙する 実用的高速アルゴリズム
コンピュータ囲碁の仕組み ~ 将棋との違い ~
四路の碁アプリ開発 情報論理工学研究所 高倉秀斗.
リバーシの並列化 並列化するときに起こる問題を定義しろ おぷてぃまいざー SSAIとMSAIは比較しろ  前田昂寛.
マルチエージェント・シミュレーション(2)
マルチエージェント・シミュレーション(2)
人 工 知 能 第3回 探索法 (教科書21ページ~30ページ)
スコアによるキューブアクションの違い なにが“学会”発表にふさわしいのか考える。結論自体は分かっていた。そこに至るまでのプロセスが新しい。(かもしれない) 少なくとも整理されていて、わかりやすい。また、視覚的に覚えやすい。
A班 ランダム選択に一言加えたら・・・ 成田幸弘 橋本剛 嶌村都.
シミュレーション論Ⅰ 第4回 基礎的なシミュレーション手法.
記 憶 管 理(2) オペレーティングシステム 第10回.
モンテカルロ法によるミニ囲碁 増井拓視 情報理論工学研究所.
モンテカルロ法と囲碁・将棋ソフトの人知超え
単位 おねだり ☆オセロ おねだり隊☆D班.
第11講: 平成18年12月 8日 (金) 4限 E352教室 グラフ (1).
碁石ゲームに関する考察 4目並べ講座 パターン生成ゲームの楽しみ 徳山 豪 (東北大学) .
非線形方程式の近似解 (2分法,はさみうち法,Newton-Raphson法)
モンテカルロ碁 電気通信大学 村松研究室 下川和也.
UCB+ 法を用いた Big Two AI の研究
JAVAでつくるオセロ 伊東飛鳥、宮島雄一 長畑弘樹、ソギ原直人.
小標本検査データを元にした 疲労破損率のベイズ推定
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
~オセロゲーム~ アルゴリズムとそのプログラム
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
CGと形状モデリング 授業資料 長井 超慧(東京大学)
C 言語について 補足資料 資料および授業の情報は :
6.大人数クラスの運営法 ゲーム理論 出席の取り方 まわし方(4通り) →出席表を2回まわす 1回目10:50~ 2回目11:20~
思考支援ツールを用いた 情報処理技術知識の学習方式
1. MC/UCT アルゴリズムの 並列化に伴う挙動の変化 2. 探索木共有型並列と マスタスレーブ型並列 ― プラットフォームとの関係 ―
前回の練習問題.
4人版リバーシYoninの解析 情報論理研究室 藤本 侑花
G班メンバー リーダー 橋本望 SE 北本理紗と服部友哉 PPT作成 橋本望と山田侑加
市場調査の手順 問題の設定 調査方法の決定 データ収集方法の決定 データ収集の実行 データ分析と解釈 報告書の作成 標本デザイン、データ収集
アルゴリズムとプログラミング (Algorithms and Programming)
変換されても変換されない頑固ベクトル どうしたら頑固になれるか 頑固なベクトルは何に使える?
プログラミング 4 整列アルゴリズム.
プログラミング 4 探索と計算量.
モンテカルロ法を用いた 立体四目並べの対戦プログラム
確率と統計2009 第12日目(A).
21  ~ぜったい負けたくない君へ~ 8班.
わかりやすいパターン認識 第7章:部分空間法  7.1 部分空間法の基本  7.2 CLAFIC法                  6月13日(金)                  大城 亜里沙.
「アルゴリズムとプログラム」 結果を統計的に正しく判断 三学期 第7回 袖高の生徒ってどうよ調査(3)
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
C9 石橋を叩いて渡るか? ~システムに対する信頼度評価~
アルゴリズムとデータ構造 2012年7月2日
数値解析ⅡーI ~オセロゲームのプログラム~
Othelloのプログラム 班長:佐々木 悠二 班員:石黒 護     井上 雄滋     齊藤 良裕     清水 裕亮.
問題 あなたはポケモンGOをやっています. これから5か所のポケモンの巣(ポケモンがよく出る場所)を回って レアポケモンを捕まえに行こうと思っています. しかし,持ち物を見たらハイパーボール1つしかありませんでした. なるべくCPが高い(強い)レアポケモンを 捕まえたいのですが, 何か所目で捕まえれば.
小標本に関する平均の推定と検定 標本が小さい場合,標本分散から母分散を推定するときの不確実さを加味したt分布を用いて,推定や検定を行う
F班 メンバー 班長 雨堤 智宏 アルゴリズム解析 角田 泰彬 竹林 秀高 ppt作成 清水 貴史
アルゴリズムとデータ構造 2013年7月2日
囲碁プログラム 彩の仕組み 山下 宏 2008年9月4日 FIT2008.
数値解析Ⅱ ~五目並べのプログラミング~ C班.
2008年6月5日 非線形方程式の近似解 2分法,はさみうち法,Newton-Raphson法)
戦術的観点からの  変形碁盤間の   類似度評価 佐藤 真史(早稲田大学).
Othello G班         山崎 木下 山本 上手      .
確率的フィルタリングを用いた アンサンブル学習の統計力学 三好 誠司 岡田 真人 神 戸 高 専 東 大, 理 研
第3章 統計的推定 (その2) 統計学 2006年度 <修正・補足版>.
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
アルゴリズム ~すべてのプログラムの基礎~.
Presentation transcript:

強豪囲碁ソフト「彩」について 山下 宏 2009 年 9 月 11 日 機械振興会館 ※彩(あや)と読みま す

モンテカルロ法って? z 乱数を使って数値計算を(適当に)行う 手法 y 円周率( π )の計算など z ギャンブルで有名なモナコの地名 z フォン・ノイマンが命名 z… なぜかラスベガス法ではない

モンテカルロ法の衝撃 z1996 年 囲碁プログラム「彩」を作りはじ める z2007 年 GnuGo が KGS で 6 級、彩は 8 級 z2007 年 10 月にモンテカルロ法に移行 z2008 年 2 月、モンテカルロ法の彩が 3 級 に y12 年かけて GnuGo にすら届かなかったのが 4 ヶ月で GnuGo を遥かに追い越した! z 従来の人間の思考の真似をしていたプロ グラマには大ショック

モンテカルロ法のおかげで製品 化 z2009 年 7 月に彩が「囲碁世界 V 」として発 売 y ただ最強ではありません。 KGS で 2 級。

最強の囲碁ソフトと対戦するに は z2009 年 9 月 18 日に発売予定の「天頂の囲 碁」 y 思考エンジンは Zen (作者は尾島陽児さん) yKGS で初段 ( 日本だと 3 段程度に相当 )

彩の仕組み z 評価関数はモンテカルロ法 y 囲碁知識やパターンを利用 z 木探索は UCT y 従来の局面認識を利用した読む手の絞込み

従来のプログラムの評価 右上の黒石は死んでいそうだな … 左下は黒の陣地かな? 黒が 9 目勝っている 局面が与えられたらそれを分析

モンテカルロ法による評価 どうやって判断したらいいか分か らないな・・・ とりあえず、でたらめに最後まで 打ってみよう! 白が15目勝ち

モンテカルロ法を使った囲碁の仕組 み 1.乱数で黒石、白石を交互に置く 2.打つ場所がなくなったら終了 3.点数を計算する 4.1. - 3. を何度も繰り返す ※本当に乱数で打っていくと終わらないため 「眼」には打たない、というルールを付け加え る。 (実際のサンプルを表示)

9 路でのシミュレーション ( playout ) 初期局面 30 手目 終局図

19 路でも基本は同じ 初期局面 100 手目 終局図

目数差ではなく、勝率、を使う 1 y1 回目は 15 目勝った (+15) y2 回目は 20 目負けた (-20) y3 回目は 81 目勝った (+81) 大きく勝ちす ぎ! y4 回目は 10 目負けた (-10) y ーーーーーーーーーーーーーーーーーーーー ー y 目数差 合計 +66 y 平均 +66/4 =+16.5 目勝ち

目数差ではなく、勝率、を使う 2 y1 回目は 15 目勝った 勝ち +1 y2 回目は 20 目負けた 負け +0 y3 回目は 81 目勝った 勝ち +1 y4 回目は 10 目負けた 負け +0 y ーーーーーーーーーーーーーーーーーーーー ー y 合計 +2 y 平均 +2/4 =0.50 勝率 50%

目数差ではなく、勝率、を使う 3 z 目数差のほうが情報量が多い気がするが、 実際に対戦させると勝率の方が強い。 z 「勝率」の利用が 33 勝 5 敗、勝率 0.86 z 「勝率」の方が安定した評価ができる! y100 目勝っても半目勝っても勝ちは勝ち? y 勝率と目数差を組み合わせる? x15 目勝ちは 、など

従来の彩の局面評価(人間の真 似) z 石の死活 y 探索で調べる z 陣地の大きさ y 影響力関数を使う z 石の強さ y 石の連絡 y 陣地の大きさ y 周囲の敵、味方の状況 y 逃げ出せる可能性

影響力関数(陣地の判定) z 石の近くほど点数が高 い z 黒石は+、白石はー z 死石は相手の石として 計算 z すべてを合計して+な ら黒地、-なら白地

陣地の判定の比較 従来の地の評価モンテカルロによる地の評 価 モンテカルロの方が右辺の黒地に評価が滑らかに出ている

石の強さ(生存確率)の評価 従来の評価モンテカルロによる評価 従来は 100% 、 68% と大雑把。モンテカルロは滑らか。

シミュレーションの精度を上げる z 囲碁知識を利用 y アタリを逃げやすく、石を取り やすく z 3x3の範囲のパターンを学 習 y 人間の棋譜から統計を取る y 着手確率を求める 高確率 低確率 アタ リ

黒石の着手確率 数値が大きいほど着手確率が高い

パターンを利用したサンプル サンプルを再生

単純乱数(上)と囲碁っぽい乱 数 単純乱数(上)は途 中図がひどい。最後 はどちらも同じ感じ

石の強さ(生存確率)での比較 単純乱数囲碁っぽい乱数 単純乱数は本来生きている石が不安定になっている

局面評価の結果(極端な例) 単純な乱数パターンを利用 単純な乱数は上下の黒石が接続しているのが分かってな い パターンを利用した方がより正しく局面を理解でき る

単純乱数と囲碁っぽい乱数の棋 力 z9 路盤では 100 回対戦させて 99 回囲碁っぽ い乱数が勝つ z19 路盤では 100 回全部勝つ z 囲碁の知識をシミュレーションに組み込 むことは非常に効果がある!

9 路盤と 19 路盤での違い z 探索速度 y 9 路盤 6300 playout/ 秒 Core Duo 1.83GHz y19 路番 1600 playout/ 秒 1 core のみで y それほど速いわけではない z9 路盤では枝刈しなくてもそこそこ強いも のが作れる z19 路盤では可能な手の数が多いため「手 をしぼる」作業を行わないとあまり強く できない。

19 路盤での候補手の選択方法 z 全ての手に確率を与える y3x3 のパターン y 盤の端からの距離での確率( 3 線、 4 線が高確 率) y 直前の相手の手からの距離(近いほど高確 率) y 連の死活探索の結果 x 「死んだ」石が動き出す確率を極端に下げる y 眼形の急所(中手や欠け眼) yAMAF で評価が高い手 z 上位 20 手程度だけを探索

得意と苦手 z モンテカルロ法とはいえ万能ではない! z 手順が形によらず強制されるケースに弱 い y 隅の死活 y 攻め合い z ぼんやりした判断は強い y 石の連絡 y 石の強さ y 厚みの評価(中で生きられない、中央の地)

以前からの局面評価も無駄ではない z モンテカルロ法に以前からの局面評価を 組み合わせると効果的 y 部分的な死活探索 y 眼形認識 x 中手 x 欠け眼の判断 y セキの認識 z 重要な手を素早く抽出できる

シミュレーション(playou t)の手順 1.全ての可能手から乱数で手選ぶ 2.自爆する手? ( アタリに突っ込む手 ) 中手は OK セキ? 確率を下げて別の手を選びなおす 3.着手 4.可能な手の確率表を更新 5.1.に戻る

可能な手の確率表更新(パター ン) 3x3 のパターンの更新 今打った手の周囲 確率を上げる 1 手前の相手の手の周囲 確率を下げる

可能な手の確率表更新(囲碁知 識) 今打った石が 1 手で取れるか? 今打った石の修正の敵石がダメ 2 で取れるか? 局面を動かさすに取れるか調べる 自分の石がダメ 1( アタリ ) にされた 逃げる手 ( 確実に逃げれる手のみ ) 自分の石がダメ 2 にされた 周囲のダメ 2 の敵石を取りにいく 自分の石がダメ 3 にされた 周囲のダメ 2 、ダメ 3 の敵石を取りにいく 1 手前がコウなら埋める 2 手前がコウならコウを取り返す 三目中手の形が出来たら中手を打つ などなど

可能な手の確率表更新(その他) UCT で黒 A と打ったときの最善手が白 B 、の場 合、 playout の中で 黒 A と打った場合、白 B と打つ確 率を上げる。 元々死んでいる石が次に生きよう、とした場 合に殺す手の確率を上げる。(Aと打たれた らBと打て、という規則を事前に調べておく ) 黒にここに打たれた ら 白はここに(黒は死んでい る)

Playoutに行く前の処理 今打った手で死んだ石は動かないように ( 死石のダメに打つ確率を下げる ) 今打った手が死石が動く手なら、ちゃんと殺 す手の確率を 1000 倍に(地平線効果対策) セキの場合は自爆しないように確率を 0 に セキ。黒も白も生きてい る 水色には黒も白も打たないよ うに

AMAF(All Moves As First) 1 手の評価速度を速くする工夫 (All Moves As First 、 AMAF ) 仮に黒 D5 白 E7 黒 E6 ・・・と playout で打った場合に、最初 の黒 D5 と黒 E6 の順番が仮に変わっても結果は一緒だろう。 だから黒 D5 と打って勝ったのなら、黒 E6 と打っても勝った 、として 計算してしまおう、という手法です。これを拡張してもし 黒が 勝った場合、黒が打ったすべての手を「最初に打たれた」 と仮定して全部更新してしまおう、という非常に乱暴な手 法です。 9 路なら半分の 50 手ぐらいが 1 回の playout が更新できるので 50 倍くらい手の評価速度が上がります。

AMAF(All Moves As First) 2 実際は各手ごとに、「通常の UCB の値」と「 AMAF での値 」の 2 つを持ち、下の用にミックスさせて一番値が大きい 手を選びます。 ucb_value = child->GetUcbValue(); // 通常の評価 amaf_value = child->GetAmafValue(); // AMAF での評価 beta = sqrt(K / (3 * node->visits + K)); // K=100, ミックス定数 ucb_amaf = beta * amaf_value + (1 - beta) * ucb_value; 探索回数が少ないうちは AMAF の評価を重視するように。 Rave ( Rapid Action Value Estimate )も同じ意味で使われて います

メモリの節約1 z 基本はまだ一度も探索したことのない局 面で 1 回 playout を行う。 z 既に 1 回でも playout を行った局面ではそ こで可能な手をどれか選び、その手に対 して playout を行う z この方法だとメモリを非常に食う

メモリの節約2 zCrazyStone ではある手に対して 81 回 playout を行った後に、初めて次の局面に 移り、そこで手を選ぶ。 z9 路では 81 回、 19 路では 361 回。 y メモリは少なくて済む zMoGo は 1 回でも playout を行ったら、次の 局面に移り手を選ぶ。 z どちらが良いかは不明。

playout を増やしたときの勝率 GnuGo 相手に 9 路盤で

時間をかけると強くなる? z レーティング(強さを点数化) y100 点で 1 段差 y100 点上がると勝率は 0.64 上昇 z2 倍の思考時間を使うとレーティングは y 将棋 63 点上昇(将棋プログラム YSS の場合 ) y 囲碁 65 点上昇(囲碁プログラム彩の場合 ) z 囲碁も将棋も同じ程度強くなる y しかし並列化した場合は … ?

並列化がしやすい z 将棋 yαβ 法は並列効率が悪い z 囲碁 y モンテカルロ法は並列効果がよい! y マルチコア化が進む現在のCPU事情を考え ると未来は明るい!

並列化の方法 zplayout のみを並列化 z 探索木の情報を一つのハッシュ表に保存 z 読み書きするたびにロック zA-B-C-D-E と読む場合は、局面 A をロック、 アンロック、局面 B をロック・・・と進む z Eまで来たらアンロックして playout を行 う

Virtual Loss 1 z 並列の効率を上げるテクニック y 最善応手手順が A-B-C-D-E の時、すべてのス レッドが同時に A-B-C-D-E と読もうとすると ロックが頻発して効率が下がってしまう。 y そこで最初のスレッドは A の手を選んだとき、 この手を「 1 回負けた」として点数を下げる ( 後で戻す ) y 同様に B,C,D,E でも下げる。 yD の手と F の手が同じくらいだった場合は、 2 番目のスレッドは A-B-C-F-G と F の手を選ぶ。

Virtual Loss 2 y こうして別の手を探索しやすくなることによ りロックの回数が減って効率が上がる。 y シングルスレッドと比べて本質は変わってし まうが影響は小さい。