アピール文から読み解くWCSC27の見どころ(Apery編、書きかけ)

久々のシリーズ物として、WCSC27に参加しているソフトのアピール文を、私、Qhapaqの開発者が読解/解説していきたいと思います。本シリーズを通じて、皆様がコンピュータ将棋を好きになってくれれば、そして、人工知能の織りなす科学を楽しんでいただければ幸いです。

前回記事:アピール文から読み解くWCSC27の見どころ(大将軍編) - qhapaq’s diary

 

 注:以下の考察はQhapaq開発者の予想です。開発者に確認をとっているわけではありません。あくまで参考として楽しんでいただけると幸いです。

 

・コンピュータ将棋界の正統派ヒーロー Apery

Aperyのアピール文:http://www2.computer-shogi.org/wcsc27/appeal/Apery/appeal_wcsc27.html

電王トーナメントシーズンがもし少年漫画だったら、間違いなくaperyが主人公でしょう。WCSCでの優勝、bonanza以来の強豪ソフトのオープンソース化、チャリティーオークションによる命名権販売、ボランティアを募っての教師データ生成と、多くの歴史を作ってきたソフトでもあります。

WCSCにおけるaperyの現状は「半年前の成果はライブラリとして公開しているので、今の所アドバンテージがゼロですので、今から何かしら改良して勝とうと思います。(既に3月31日)」(原文ママ)。ライブラリの提供元だからこそ言える(ライブラリ勢がこれ言ったらリジェクトされそう)ことですね。

以下、電王トーナメントでaperyがどういう進化を遂げたのか、復習を兼ねて見ていくことにしましょう。

折角有名なソフトの解説をするというのに、やたらとマニアックな記事になっています。まあ、このブログ自体が極めてマニアックなので今更ですか。

 

ソースコードから見るaperyの雑巾絞り

 sdt4でのapery(浮かむ瀬)は雑巾絞り勢(除 ponanza)の中で最もうまく雑巾を絞ることが出来たソフトと言えます。ソースコード(https://github.com/HiraokaTakuya/apery/blob/master/src/usi.cpp )を見る限り、apery式の雑巾絞りは以下の手順に要約できそうです(間違ってたらご指摘いただけると幸いです)。

 

---雑巾生成部---

1.自己対戦(?)などの棋譜で初期状態を指定

2.初期状態からランダム(単純なランダムムーブに加え、玉を周囲25マスに動かす措置あり。また、ランダムで手を選ぶ確率は1手ごとに下げる)で手を動かし雑巾局面を作る(この実装はやねうら王と大きく異なる)

3.depth6で手を読む(6手先まで通常探索させる)

4.depth6で読んだ評価値とbestmoveを保持する

---雑巾学習部---

1.雑巾局面でqsearch

2.qsearchと教師(depth6で読んだ値)の差を縮めるようにKPPTを発展させる

3.このとき、教師データの次元下げを行う

4.100ステップごとぐらいに、過去100ステップの結果を重みつけ平均させたものに評価関数をすげ替える

 

やねうら王の学習部とは雑巾の作り方、学ばせ方で幾つかの違いがあります。やねうら王と特に違うのは既存の棋譜をスタートに教師を作っていることと次元下げの有無でしょう。気になるところは幾つかありますが、この辺のチューニングは開発チームによって十分されているだろうことを考えると、レートを上げる際には「これは既に十分検討された」程度の理解でもいいかも知れません...

 

・雑巾絞りの性質とソフトの棋風の関連性

雑巾絞りによってコンピュータ将棋が攻めの棋風になるか否かで嘗て平岡さんとディスカッション(on twitter)したのですが、あまりに書くことがない折角なので、もう少し細かく踏み込んでみたいと思います。

 

1.ランダムムーブが含まれる将棋では攻め将棋が勝ちやすい

xxする一手という展開が受け側に多いから。統計的なソースはありませんが、これについては正しいと仮定しておきます。

2.KPPT評価関数は駒の並びの線形和なので、ある形の静的評価値(evaluateの値)が大きくなれば、似たような形の評価値も高くなる

3.本来無理攻めな局面が受側の悪手で攻めが通ってしまうと、無理攻めの局面の評価値も上がってしまう。結果、攻めを優先して読むソフトになるのではないか(私の仮説)

4.雑巾絞りは浅く読んだ値(≒evaluate)と深く読んだ値の差を使って評価値を変えるのだから、無理攻めが通る棋譜が多くても、evaluateの値が攻めに偏った上昇を起こすことはないのでは(平岡さんのご指摘を私が意訳したもの)

 

結論から言うと平岡さんのご指摘は正しいと思います。故に、3の理論を成り立たせるには、2に加え「2+.攻めが通るような局面では深く読むほど評価値が良くなる確率が高い」という仮説が成り立つ必要があります。

ただ、2+の仮説もあながち間違ってはおらず、やはり雑巾絞りをやると棋風が攻めになるのではないかと私は思っています。

さらに言えば、特定の戦型(例えば後手番四間飛車)で相手の悪手の確率がより高くなるように雑巾を作れば、特定の戦型に特化した評価関数も作れるのではと期待しています。

 

・魔女との比較で見るaperyの探索(執筆中)

 # done is better than nothingの精神だ...

 

・Qhapaq的総評

aperyが3月時点のままであれば、sdt4からライブラリを強化したであろう多くのソフトがaperyを上回ることができるはずです。しかし、これまで多くの手法を開発してきたaperyチームを以てすれば、ライブラリ勢全てを上回るような成果を1ヶ月で出せてもおかしくはありません。

半年間全力で開発すれば、大会の上位争いにも参加できるようにしたい、というのがapery公開思想だった気がする(twitterでそんな意図のことを仰ってた気がしますが、元ツイを見つけられなかったので勘違いかも知れません)ので、本大会ではキッチリ巨人の肩の上から巨人を倒したいところです。

 

以下余談:

WCSCでponanza_chainerが引くほど強かった場合、外チームの開発者は一致団結してDNN将棋を開発するぐらいの覚悟を決めないと、そろそろponanzaの勝ち過ぎがコンピュータ将棋界の危機(興行的な面での)につながりかねません。ジャパリaperyパーク(*)を出て暫く立ちますが、パークの危機にはチルドレンの一人として私も馳せ参ずる所存です。余裕があったらディープ平岡さんも連れてきます...

(*) 狸、兎、鯨、コブラ、蛸あたりが居ると言われていますが、コブラと蛸はソフト名を動物から取ってるわけではないとのことです...

アピール文から読み解くWCSC27の見どころ(大将軍編)

久々のシリーズ物として、WCSC27に参加しているソフトのアピール文を、私、Qhapaqの開発者が読解/解説していきたいと思います。本シリーズを通じて、皆様がコンピュータ将棋を好きになってくれれば、そして、人工知能の織りなす科学を楽しんでいただければ幸いです。

 

前回記事:アピール文から読み解くWCSC27の見どころ(技巧編) - qhapaq’s diary

 

注:以下の考察はQhapaq開発者の予想です。開発者に確認をとっているわけではありません。あくまで参考として楽しんでいただけると幸いです。

 

機械学習の一流トラブルシューター 大将軍

 大将軍(たいしょうぐん)のアピール文:

http://www2.computer-shogi.org/wcsc27/appeal/taishogun/appeal.txt

sdt4のアピール文:

http://denou.jp/tournament2016/img/PR/Daishogun.pdf

# 運営さーん、DaishogunじゃなくてTaishogunですよー

 

大将軍はWCSC26では3位、sdt4では5位と非常に強いソフトの一つですが、そこに至るまでには多くの苦杯をなめたソフトでもあります。四駒を用いた盤面評価など、独自性豊かな挑戦にも取り組んできたソフトであり、大将軍が結果を残し優れたソフトとして評価されることは大変喜ばしいことであります。

 

http://denou.jp/tournament2016/img/img_result_02_after.png

こうして見直すと、大将軍 vs Qhapaq(たいしょうぐん ばーさす かぱっく)なんて、初見じゃ誰も正しく読めないんじゃないか...

 

以下、私怨をできるだけ抑えながら、将軍の名を冠するほどに挑戦的な大将軍の今回の試みを読み解いていきたいと思います。

 

・kkpt を用いた評価関数

注:幸運なことにもQhapaqの敗戦後、和服を畳んでいたら遅めの休憩を取りに来た大将軍チームと一緒になりました。折角だからと開発の手法などについてディスカッションさせていただきました。以下の考察には横内さんから教えていただいた情報も含まれていますが、あくまで私の記憶が元であることをご承知おきください。

今回の大将軍の最大の試みはなんと言ってもkpptからkkptに評価関数を切り替えたことでしょう。玉以外の2駒の並びを使わずに盤面を評価するのは流石に厳しい(駒の取れる取られるの関係を直接扱えなくなる)ので、3駒についてはkkpt + kppで盤面を評価するという意味なのではないかと予想しています。

aperyややねうら王が用いている、NineDayFever式のkpptでは、kppの素の値に手番ボーナスを加えることでkpptを計算していきます。Qhapaqの手元の実験ではkppの手番ボーナスには全部で(1局面で出てくるkpptのボーナスの総和で)100-200点程度の値が付いており、これを0にしてしまうことで盤面評価の質が落ちる危険性は十分にあります。高速化の割に合うかは謎です。

また、大将軍のsdt4のアピール文には少し詳しく書かれていますが、大将軍は3駒に加え「利きをまとめて学習」、「駒の位置関係の相対位置による評価」(原文ママ)がなされているようです。盤面評価に効きを使っているのか、学習時に効きを加味した計算を行っているのかは定かではないですが、効きの計算はコストが高いこと(参考:魔女をめぐる冒険 | やねうら王 公式サイト)、sdt4で大将軍のNPSがQhapaqより高かったこと、そして、sdt4のアピール文のviewer(pp-5)を見る感じでは、sdt4までは純粋なkpptを評価に用いており、効きは学習用のパラメタとしてのみ用いているのだと予想しています。

大将軍の評価関数においてもうひとつ特徴的なのが、今なおプロの棋譜から学習をさせていることでしょう。3駒のような広大なパラメタを最適化するにはプロの棋譜は圧倒的に数が少ないのですが、駒の相対位置などを駆使して少ないデータから情報を抽出する、評価関数を可視化することで過学習を避けるなどをしているのだと思います(あと、やねうら王ライブラリの雑巾絞りは使ってるとのこと)。

# 昨年のWCSCではponanzaの棋譜から学ばせたら強くなるんじゃないか仮説を立てて、Qhapaqも色々試してみたのですが、駒の相対位置の学習の実装は想像以上にしんどく、また、ノートPCでは相対位置の計算に死ぬほど時間がかかることが発覚したので諦めました

 

・大将軍の弱点?

大将軍は非常に強いソフトですが、序盤運用には若干の難があると思います。sdt4の棋譜だけではサンプル不足は否めませんが、定跡が終わった時点で、消費時間、評価値において大将軍が有利をとっているケースは少ないです。また、大将軍は角道を塞ぐことが多いようですが、これはプロ棋士棋譜はコンピュータに比べて矢倉率が高い(*,**)のが影響しているかも知れません。または、定跡はプロ棋士棋譜を評価し、評価値が悪くないものを用いているかだと思います。

やねうら王ライブラリを用いているなら、やねうら王定跡にシフトすることは可能ですが、公開されている定跡は狙撃されるリスクが高く、序盤の安定化は課題が多いです。

 

(*) 最近は矢倉率は減ってきていると言います。NHKで勝又先生が非常に解りやすい解説をしてくれたのですが、残念ながら手元に資料は残っていません。

(**) 最近の棋譜を集中的に使えば矢倉率は減りますが、そうなると今度は棋譜の数が足りなくなると思います。

 

・Qhapaq的総評

評価関数の可視化や、kkptへの移行による評価関数の作り直し(やねうら王を改造するのも面倒だし、それ以上に学習をちゃんと回すのが大変)など、大将軍は挑戦的な試みを続けているソフトであり、その開発技術はもっと評価されるべきだと思います。

Qhapaq的には死ぬまでに一度は倒さねばならないソフトです。大将軍側は評価関数の作りなおしにリソースを割いている以上、特に序盤には付け入る隙があると思っているのですが、有志による定跡開発も進んでますし、最終的には評価関数の質勝負になるでしょう。河童絞りがうまく行くよう、今からお祈りしておかねば。

 

将棋電王トーナメントPonanzaが連覇。コンピューター将棋界の進化が止まらない - Engadget 日本版 より。5位決定トーナメントの貴重な資料......?

http://o.aolcdn.com/hss/storage/midas/ee2484231c177f463a5f3197a0241bd/204437913/IMG_0972.jpg

余談ですが、大将軍はaperyの1期後輩でNDFと同期(旧名はN4) だそうです。

アピール文から読み解くWCSC27の見どころ(技巧編)

久々のシリーズ物として、WCSC27に参加しているソフトのアピール文を、私、Qhapaqの開発者が読解/解説していきたいと思います。本シリーズを通じて、皆様がコンピュータ将棋を好きになってくれれば、そして、人工知能の織りなす科学を楽しんでいただければ幸いです。

 

前回記事:アピール文から読み解くWCSC27の見どころ(ponanza_chainer編)

 

注:以下の考察はQhapaq開発者の予想です。開発者に確認をとっているわけではありません。あくまで参考として楽しんでいただけると幸いです。

 

・新境地を切り開く孤高のマイスター 技巧

技巧のアピール文:

http://www2.computer-shogi.org/wcsc27/appeal/Gikou/gikou_appeal_wcsc27.pdf

floodgateに彗星の如く現れ、ponanzaを四間飛車で倒すという鮮烈なデビューを果たした技巧。その伝説は、当時(2017年時点では今も)最もメジャーだった3駒ではなく、2駒と効きを使った評価関数を編み出したこと、突然(?)オープンソース化されたことなど枚挙に暇がありません。技巧が切り開いた将棋は、開発者のみならず、将棋界全体に多大な利益をもたらしています。

以下、技巧がどれだけ偉大であるかをできるだけ解りやすく(?)解説していきたいと思います。

 

・2駒と効きを用いた評価関数

注:幸運なことにもsdt4でのQhapaqのテスト対局の相手は技巧でした(結果は途中終了)。ソフトが無事に稼働するかを眺める間、やることがないので開発者の出村さんと色々ディスカッションをさせていただきました。以下の考察には出村さんから教えていただいた情報も含まれていますが、あくまで私の記憶が元であることをご承知おきください。

技巧を語る上で欠かせない特徴は、評価関数が2駒と効きで表されていることでしょう。効きを評価に組み入れたのは「数の攻めによる突破」や、「玉は包み込むようにして寄せる」といった人間的な将棋の考え方を将棋に取り入れたかったからだと聞いています。

例えば、矢倉の86の地点は歩と銀が効いており、これを突破するには3つ以上の駒で攻める(棒銀なら飛銀歩)必要があります。従来の3駒の評価関数では、関与する駒が4個以上ある形を直接扱うことが出来ないため、実際に駒を動かして検証する他ありませんが、効きを使えば静止探索でもある程度正確に評価できるという寸法です。

こうした特徴から、技巧は駒がぶつかってからが強いと予想することが出来ます。手前味噌の解析で恐縮ですが、技巧 vs silentmajority(浮かむ瀬のバイナリが8月頃のものであり、勝率はほぼイーブン)でのソフトごとの評価値と勝率の分布も似たような現象を示唆(技巧のほうが評価値がより正確に勝率を示している)しています。

jtapi-public-4.appspot.com

 

イデアとしては割と人間的なものである一方、それをゼロから実装するとなると地獄が待っています。技巧のソースコードは非常に解りやすく、美しく書かれていますが、読んでいると段々と怖くなってくることがままあります。

 

・技巧の抱える幾つかのアキレス腱

技巧は特に中終盤の盤面を正確に表せる一方、序盤で形勢を損ねがち(特に6月技巧は)という弱点を抱えているようです(sdt4でのQhapaq vs 技巧も50手目ぐらいで終わったけど、その時点ではQhapaqが少し有利をとっていました)。これは、囲いを評価するときには3駒関係が便利だからではないかと私は予想しています。

例えば、横歩で玉を52においた場合、61金+72銀型や、62銀+72金型などが囲いの候補になります。3駒関係を使えば、これら玉形の点数を変数一つで決められますが、2駒+効きではこうした囲いを評価するのに複数の変数が必要になります。

また、技巧は他のKPPT型のソフトとは評価軸が異なるため、良くも悪くも力にブレが生じがちです。sdt4で技巧は真やねうら王に勝ち、白美神に負けていますが、他のKPPT型ソフトがだいたいレート通りの勝敗をする中で、技巧だけはレートの特異点的な振る舞いをしています。

 

・今回技巧がやって来そうなこと

技巧のアピール文で特に目が行くのは前年度比4倍のXeon軍団です(技巧の技術力を買ってスポンサーが付いたのだと思いたい)。6月技巧のクラスタは短い持ち時間で読んだ良手の候補を、1ノードに1手ずつ割り振るという手法でしたが、64台もあると64位の手はめったに仕事をしないと思うので、1つの手に2つ以上のノードを割り振って楽観合議制にしてくるのかなと予想しています。

学習部について、技巧は実現確率(棋譜から出やすい手筋を学習させているようです。学習部のための学習部は6月技巧でも公開されており、初めて読んだ時は思わず「oh、クレイジー...」とツブヤキました。)を使っていると書いてますが、multipvなどを駆使した実現確率もどきの雑巾ではQhapaqは強くならなかったので、それ以上の工夫を仕掛けてきてると予想しています。ポーカーの論文で話題のQ-learningとかは技巧が組み入れてきそうです。

あと、出村さんがこの記事を読んでいる可能性は低いと思いますが、勝率は自己対戦ではなく浮かむ瀬ややねうら王の勝率ベースでチューニングしたほうがいいと思います。本大会も大半はKPPT勢のようなので。

 

・Qhapaq的総評

独自技術を貫くと、ユーザが多い技術の数の攻めに苦しむことが多々あります。技巧は優れたソフトである一方、独自性に由来した苦戦(前回みたいにponanza以外には全勝とはならない)もすると予想しています。

ただ、ponanzaを倒せる確率が最も高いソフトも技巧だと思います。アンチ雑巾絞りを掲げるライブラリ勢のQhapaq如きが言っていい言葉だかは知りませんが、理論やくざ仲間として技巧のことは応援しています!

前回のWCSCでは当たることが出来なかったので、今回はぜひ戦ってみたい(できれば2次予選の突破を確定させた後で)です。

 

 

アピール文から読み解くWCSC27の見どころ(ponanza_chainer編)

コンピュータ将棋選手権(WCSC27)まであと半月。最年少棋士の躍進によってすっかり忘れられがち(当社比)なコンピュータ将棋ですが、今年も実に面白い独自性を発揮したソフトがWCSCに参加しています。そこで、久々のシリーズ物として、WCSC27に参加しているソフトのアピール文を、私、Qhapaqの開発者が読解/解説していきたいと思います。

 

本シリーズを通じて、皆様がコンピュータ将棋を好きになってくれれば、そして、人工知能の織りなす科学を楽しんでいただければ幸いです。

 

注:以下の考察はQhapaq開発者の予想です。開発者に確認をとっているわけではありません。あくまで参考として楽しんでいただけると幸いです。

 

・コンピュータ将棋業界の絶対王者 ponanza

ponanza_chainerのアピール文:

http://www2.computer-shogi.org/wcsc27/appeal/Ponanza_Chainer/Ponanza_Chainer.pdf

sdt、WCSCを連覇し続ける絶対王者ponanza。その後につく恐るべきchainerの文字。そう、彼らは遂にディープラーニングを将棋に取り入れてきました。ponanza開発陣、PFNの精鋭、超高火力ハード。一つだけでも即死級のヤバさですが、そんなのが3つも4つもくっついています。そこまでしなくても勝てるのに。独創賞まで狙ってこなくてもいいのに。

以下、怨嗟の声をぐっとこらえて、ponanza_chainerのアピール文を読み解いていきます。

 

ディープラーニングを用いた完全情報ゲーム

ディープラーニングを使って完全情報ゲーム(将棋、チェス、囲碁etc)の盤面を評価させる際には、まず最初に、局面をネットワーク(以下DNN)に入れた時に「その局面の点数を出力する」か「指すべき手の確率分布を出力する」かに注目する必要があります。

例えば、DNNを用いたチェスの研究では、局面をinputにして評価値をoutputにする学習がなされています(web上のチェスの棋譜と勝ち負けの結果を教師に作っているようです)。

https://erikbern.com/2014/11/29/deep-learning-for-chess.html

DNN自体は悪くない精度で局面を評価できるようですが、計算コストが割に合っていないらしく、既存ソフト(sunfish。どのぐらい強いかは知りません)に勝ち越すことはできていないようです。

チェスや将棋のように駒得が勝敗に強く響くゲームでは、ある駒が別の駒を取れるという位置関係がとても重要で、逆に、それさえ抑えればある程度の精度で盤面を表せる(KPPTとかはそういった発想から来ています)ため、DNNにしたときの計算コストが割に合わないことが多いというわけです(ゲームによってはこれでも割に合うとは思いますが)。

 

一方、alpha goなどでは、局面をinputに評価値ではなく指すべき手の分布を出力してくれます。こうすることで、局面毎に合法手全ての分岐を扱う必要がなくなるので探索の効率がぐっと上がります。

AlphaGo の論文をざっくり紹介 - technocrat ←有志による読みやすい解説

アピール分などの言い回しから推理するに、今回、ponanza_chainerが成功させたDNNによる局面評価もalpha go型(局面をinputに指すべき手の分布を出すタイプ)であると考えられます。

注:DNNの学習方法については私個人の知識+集められる情報だけでは判断できませんでした。alpha goのような棋譜の再現率を上げる→その後にTD学習、または、ポーカーの論文のようなreinforcement learningである可能性は高いと思ってますが...

しかし、DNNが高精度な局面判定ができる(アピール文によると54%当たるらしい)としても、将棋によくある長い変化手順を静止局面判定だけで扱える見込みは低いです。故に、開発者的にはどうやってDNNを使って深く読むかが気になります。

 

・alpha goの方法 + ponanzaによる補正と予想

DNNを使った探索方法。私は基本的にはalpha goの方法(木探索モンテカルロ法。良さ気な手を実際に指させてみて、勝率が一番高い手を採択する)を使ってくると予想しています。

合法手の読む順番を決める(良い手を先に読んだほうが探索効率が上がる。既存ソフトでは相手の駒を取る手などが優先的に読まれる)のにDNNを使うなど、既存の探索に組み込むのもアリですが、枝狩りとDNN双方で新しいアルゴリズムを使うと、仮に強くならなかった時にその原因が枝狩りにあるのかDNNにあるのかが解らず、開発の難易度が指数関数的に上昇するからです(業界用語で次元の呪いと言います)。

また、ponanza_chainerが用意しているという高火力ハードは特にgpuが強い(知人からの又聞きですが)らしく、並列性の高い木探索モンテカルロ法と相性がよいのもポイントです。

さて、DNN+モンテカルロベースの探索には、不利を認識すると良く解らない手を指す(alpha goもセドル戦4戦目で引っかかった)などの弱点がありますが、ponanza_chainerの場合、こうした弱点をponanzaで埋めあわせてくる可能性があると思っています。

例えば、開始局面で浅く読ませることで局面の有利さを大雑把に見積もる。終局まで指させず、50手ぐらいでponanzaの評価値を参照し、有利な方を勝ちとするなどは比較的実装が容易なのではないでしょうか。

ponana_chainerはponanzaによるダブルチェックが使える分、alpha go以上に隙がない作りになっていると予想しています。

 

・Qhapaq的総評

今回もponanzaが優勝候補なのは間違いないでしょう。普通に戦ってきても優勝候補なのに、DNNという新しい概念を持ちだしてくれたことには尊敬の念を抱かずにはいられません。

ただ、KPPT型の評価関数と評価軸(読み筋)が変わるのであれば、その分付け入る隙もあると思っています。浮かむ瀬ややねうら王を相手にそのへんの穴も埋めてるとは思いますが、諦めずに挑戦していきたいところです。

 

ちなみに、Qhapaqは昨年のWCSCでもponanzaにあたっていますが、多分誰も覚えていないのではないかと思います。

 

 

【将棋は】台湾人に日本アニメの説明を求められた件【一切関係ない】

海外出張中は流石に将棋の開発のしようがないので、おとなしくアピール文を書いています。さて、台湾の学会ということで台湾の学生と喋る機会があったので、今日のゆるふわ拡大版ということで此方で紹介します。

 

【以下、完全なる駄文です】

【結論を言うと「けものフレンズの面白さがわからない」と言われたので、その面白さを如何にして説明したらいいか助言が欲しいという話です】

【締切は3/28昼まで。海外からは最終回を見られないので、最終回に関するネタバレはおやめください> <】

 

# 実際は英語で会話してるので意訳が入ってます

# あとストーリーのわかりやすさ重視で順番とか調整してます

 

台1「台湾はどう?」

私「良いところですね。蛙を食べたり蛇を食べたりしてエンジョイしてます」

台1「わおスゴイ」(スゴイは日本語で言ってる)

私「え、日本語喋れるのですか?」

台1「ええ、授業で少しやりました」

台2「まて、お前が日本語喋れるのは動画見てたからだろ」

台1「ああ、バレてしまった」

私「www」

台1「最近みた日本の有名な動画はこれです」

www.youtube.com

私「・・・・なんぞこれ?」

台2「え、知らないのですか?」

私「遺憾ながら」

台1「じゃあ、遊戯王は知ってます?」

私「ええ。遊戯王は遊んでたので」

台1「あ、でしたら海馬解ります? 私の友人は海馬のモノマネができるのですよ」

私「HAHAHA。信じませんよそんなの」

# おもむろに友人を召喚し中国語でなにか喋ってる

台3「え、何、海馬のモノマネ?」(地面でカードを引くモーションをしながら)

私「オベリスク

台3「そう、オベリスクwww」

台3「リバースカードオープン(日本語で)」

私「エネミーコントローラーッ」

# 何かに満足し役割を終えた台3は元居た机に戻った

台2「じゃあ、これは?」(恋ダンスのポーズをしながら)

私「ああ、恋ダンス!」

台1「これは日本でも有名ですか?」

私「はい。有名です。ちなみにこの役者はアイマスシリーズが好きなことでも知られています」

台1「え、ミキミキですか?」

私「いえ。アイマスには事務所が2つあるのでそっちじゃない方です」

台2「シンデレラのほうですか?」

私「ええまあ」

台1「シンデレラの誰ですか?」

私「みくにゃんですね。猫の頭を被ってる人です(モーションしながら)」

台2「ああ、これかあ(ググりながら)」

台1「そういえば、アイマスラブライブはどっちが強いんですか?」

私「コンピュータ将棋業界では拮抗してます」

# Nozomiちゃんと必ずや倒すという鉄の誓いを立てながら

台2「じゃあ、アイマスと艦これは?」

台1「艦これはアニメ爆死したやん」

私「いや、あれは本当に嫌な事件でしたね。」

台1「今季のアニメのオススメってあります?」

私「一番バズったのはけものフレンズですね」

台1「うーん、あまり聞かないですね(ググりながら)。ああ、これか」

私「わーい、たーのしー」

台1「心がピョンピョンするんじゃあ」

台2「で、けものフレンズは何が面白いんですか?」

私「IQが下がることとか、全てを受け入れる精神に疲れきった日本人が魅了されたとか、雨後の筍的に議論がされてますね。私としては仄かに香るディストピアの香りが好きなのですが」

台湾1・2「うーん、ちょっとわからん」

私「ちょっと時間をください。私のタイムライン上には優れた研究スキルと下がりきったIQを両立した達人がいますので、彼らにアドバイスをもらってきます...」

 

親愛なるフレンズの皆様。

このままで良いのでしょうか。

 

どうか私に力を貸してください。

 

あと、只管私のことを白い目で見ていた後輩諸君、国際交流というのはこういう小技を蓄えることから始まるのだよ。

両成将棋における腰掛け馬のススメ

ponanzaに勝ったら300万円貰えるチャレンジが今年も始まったようです。特に目新しいのがオプションとして選べる飛車、角の両方が初手から成っている+先手というハンディキャップでしょう。

この初期局面は先手が既に1000点前後良いことに加え、コンピュータ将棋は平手で他のソフトを殴り倒せるようにチューニングするので、相手の評価ミスを誘えるのではないかと、検証部隊が動き始めているようです。

www.fgfan7.com

fg_fanさんが検証してしまっている以上、私の記事にどれだけの価値があるかは謎ですが、Qhapaqの検証によるとオススメの指し手が少し異なるようなので此処に記録しておきます。

 

Qhapaq側の検証では手が短いこと、手のバリエーションが少ないことを特に重要視しています。具体的には持ち時間を変えたりmultipvによる検証をすることで、ponanzaが未知の手を指してくる可能性を少しでも下げようとしています。故に、最終的には先手が+1500-1700程度になっているとはいえ、もしかしたら人間的な勝ちやすさは伴っていないかも知れません。

 

1.66歩、78馬の構え

初手から66歩、84歩、68馬、85歩、68龍

f:id:qhapaq:20170312010921p:plain

一目珍妙な構えですが、Qhapaq的にはこれがベストのようです。34と23の拠点を睨むことで、相手の玉形に大きな制約をかけると同時に、6筋攻めも見せています。相手は23の地点を金駒で守りたい関係で、相振り飛車にしにくくもなっています。戦型絞るの is 大事。

振り飛車模様にしたので、ここから暫くは玉の整備になります。相手の陣形は23を守らなければならない+此方が振り飛車の関係で32銀からの居角美濃になる見込みが高いです。こちらもとりあえず美濃にしておけば安心でしょう。

 

2.銀と腰掛け馬による速攻

図1から32銀、48玉、86歩、同歩、同飛、88銀、82飛、58金、42玉、38銀、72銀、39玉、31玉、28玉、52金、76歩、64歩、77銀、63銀、75歩、74歩、同歩、34歩、76銀、74銀、56馬、75歩、74銀、89飛成、75銀

f:id:qhapaq:20170312011018p:plain

玉を整備したら(整備しなくてもいいのでしょうけど、玉は固めておいたほうが人間的には安心)銀を76に繰り出し馬を56に据えて6筋を攻撃します。この時点でQhapaq的には1600点程度の先手有利。初期陣形と違って駒がさばけていて玉が硬いので、人間的にも割と勝ちやすい局面だと思います。

 

3.7筋に龍を振り直すパターン

図1から32銀、48玉、86歩、同歩、同飛、88銀、82飛、58金、42玉、38銀、72銀、76歩、64歩、77銀、63銀、75歩、34歩、39玉、74歩、同歩、72金、76銀、74銀、77龍、88歩打、56馬、73歩打、75歩打、65銀、同歩、89歩成、67龍、65歩、同龍、51金、45馬

f:id:qhapaq:20170312011117p:plain

相手が早めに34歩から此方を牽制してきた場合、34馬として歩得することも可能ですが、相手の牽制を無視して攻めるのが早いようです。

攻め駒の並べ方は先ほどと同じで、76歩、77銀、75歩、76銀、56馬から攻めを組み立てていきます。腰掛け馬によって、6筋の突破を見せると同時に、相手の74歩を強く牽制しています。7筋の駒を牽制するだけなら55や46に馬を置く手も考えられますが、相手から角交換を見せる手があるせいか、短い持ち時間でやると逆転されてしまうことがあるようです。

 

4.まとめ

Qhapaqで検証する限りでは、66歩、78馬、68龍から美濃囲いを作り、88銀、76歩、77銀、75歩、56馬の形で攻めるのが手の変化が少なくて良いようです。この他の変化としては、77銀から86歩打、56馬、88龍と向かい飛車にする手も有効なようです。

飛車同士の睨み合い自体は角交換四間飛車でもある形ですが、56の馬が相手の78筋を牽制しているため、飛車同士の睨み合いを有利に進めるという寸法です。

ただ、この戦型は相手の82の桂馬の活用を許してしまいがちであり、手の変化が豊富になりやすいので人間がponanzaを倒す上ではあまりよろしくないと思います。

 

使って負けても責任は取れませんが、戦型の一つとして覚えておいていただけると良いかと思います。

Futility marginがdepthの線形でいい理由

定跡研究の知見をまとめつつある裏で、WCSCに備えて探索部の改造にも手を出しています。

評価関数は億単位の局面を使って億単位のパラメタを最適化するという人間の直感に反するものである一方、探索部は「まずは取る手から考える」とか「この局面は仮に盛り返しても、今考えるベストな展開に及ばないだろうから探索を打ち切る」とか「ある程度考えたらそれ以上考えても仕方ないので指して相手の手を見てから考えよう」とか、割と人間的にも納得の行く理念で作られています。

しかし、その理念をコンピュータの思考に焼きなおすには、幾分かの数理的な小技が必要となります。昨今のコンピュータ将棋の探索部はstockfishから引っ張ってきたルーチンが多く、よもすれば、式の意味を解らずに枝狩りをしている人、いるのではないでしょうか?

今回はstockfishの数あるルーチンの中からfutility marginについて考察していきます。

 

1.futility margin/pruningってなんぞ

futility pruningはn手以内に今考えてる最善手のスコアを追い抜けそうにない手を枝狩りする探索ルーチンの一つです。例えば、横歩取りで横歩を取る手の暫定評価値が+100だったとします。

暫定評価値は所詮は暫定であるので、他の手(例えば飛車を引いて相掛かり風味にするなど)に抜かれる可能性があります。故に、他の手を今の点数が低いからと枝狩りするわけには行きません。しかし、見込みのない手(飛車をただで捨てる手とか)はさっさと枝狩りしてしまったほうが、有力な手に費やせる時間が増えて、レートが上昇します。

28飛車は読むとして。96歩や98香はどうだろう。どこから枝狩りすればよいのだろう。こうした判断をするときに使うのが、futility marginです。

具体的には、其の局面の浅く読んだ時の点数(score)が

bestscore - score > margin * depth *const

となった時に枝狩りを発動させます。depthは残り探索深さで、仮に読むとしたらdepth手先ぐらいまで読むということを意味します。

marginがdepthに比例するのは、将棋の局面は深く読めば読むほど評価値が変わりうるからなのですが、さて此処で問題。なぜdepthに比例なのでしょうか。やねうら王も読み太も線形にしていますが本当にこの形でいいのでしょうか?

 

2.点数の変化度はdepthではなくdepthのルートに比例する

まず、depthが1の時について考えます。1手深く読むことで評価値はずれますが、概ね(99%ぐらい?)X点以下に収まるとしましょう。

depthが2の時はどうでしょう。2手先の手の点数のブレは「1手先の点数のブレ」+「1手先の局面から見た1手先の点数のブレ」で表されます。futility margin的にはブレは概ね2X点以下に収まるとのことですが、実際に2Xが出る確率はもっと低いはずです。というのも、2手連続でめったに出ないX点を出さねばならないからです。1手深く読むことでX点点数がずれる確率が1%だとすれば、2手深く読むことで2X点点数がずれる確率は0.01%です。

細かい導出はおまけに任せますが、stockfishさん、深く読むときにビビり過ぎなのではないでしょうか?

 

3.枝狩りする局面の数を考えると釣り合う

ある局面からd手離れた局面の評価値がxずれる確率は

 e^{-x^{2}/d}

で表せるとしましょう(実際は規格化係数などがいるけど)。このとき、点数の変化値がαd以下になる確率=futility pruningして問題ない確率は

 \int_{0}^{\alpha d} e^{-x^{2}/d} dx = 1 - Z e^{-\alpha^{2} d}

で表されます(αはfutility marginの係数とする、Zはdに依存しない定数)。ガウス関数積分ガウス積分の公式 [物理のかぎしっぽ]あたりを参照してください。

しかし、d手読む予定だった局面を読むのをやめるということは、 A^{d}局面分の読みを省略するということを意味します(Aは各々局面の合法手のようなもの)。

即ち、futility pruningに失敗しないためには、上述の賭けに A^{d}回連続で勝つ必要があります。

 (1 - Z e^{-\alpha^{2} d})^{A^{d}}に対して1次のテイラー展開を用いると

適切なαを選ぶことでdによらず上記の式が一定になることが確認できます。

 

 

 

おまけ.点数の変化度はdepthではなくdepthのルートに比例する(小難しい補足)

depth手先まで読むということは

 1.1手深く読むと、前の局面に比べて駒が一つ動きます(そりゃそうだ)

 2.駒が動くと、評価値は動いた駒の分だけ変化します

 3.深く読むと2のプロセスを何回も重ねあわせることになります

ということを意味します。駒を一つ動かすことによって生じる評価値の差分の分布はKPPTのパラメタで特徴つけられた関数になります。深く読むことでこの分布関数に従って、何度も評価値が変調されていきます。

実は、分布関数の形が何であろうと(例外はあるけど)、十分な数depthを重ねると、最終的な分布はガウス関数に収束していきます。中心極限定理と呼ばれる定理であり、大学初頭の統計などで出てきます。中心極限定理を用いれば半値幅はdepthのルートに比例すると予想できます。