藤井四段と羽生三冠のどちらが強いか、流行の人工知能に聞いてみました

藤井四段がデビュー開始から連勝を重ね、遂に連勝記録を塗り替えたようです。想像を遥かに超える強さに将棋民は大いに盛り上がっています。

 

ここまで来ると藤井四段がどのぐらい強いか。もう少し俗な言い方をすれば、将棋界の新スター藤井四段と、将棋界のレジェンド羽生三冠とどちらが強いのかが気になることでしょう。

両者の直接対局はAbemaTVの炎の七番勝負ニコニコの獅子王戦の2局で成績は1勝1敗。拮抗した実力を見せているようにも見えます。

 

が、どちらが強いかという問いに答えるにあたり、2局はあまりに数が足りていません。人間同士の戦いだから仕方ないにせよ、統計学的な観点からは少なくとも1000本勝負位はして貰いたいところです。

しかし、そんなことは流石に出来ないので、今話題の人工知能にどちらが強いか聞いてみることにしました。

 

【実験方法】

※:数理的な詳細は次の記事で扱う予定です

今回の解析方法について簡単に解説します。両棋士は直接対局をしたことはありませんが、他の棋士との対局データであれば数十局(羽生三冠についてはもっと沢山あります)程度の棋譜を集めることが可能です。

これらの棋譜から、各々の棋士がどういった局面でどういった手を選ぶ傾向があるのかを解析します。と言っても私は将棋は殆ど解らないので、プロに近い力持つというコンピュータソフトに、局面の互角、有利、不利を分別してもらい、各々の状況でどういった手を指す傾向にあるかを計算してもらいました。

 

【藤井四段、羽生三冠の手のアンサンブル】

藤井四段

f:id:qhapaq:20170701214444p:plain

羽生三冠

f:id:qhapaq:20170701214500p:plain

その他の棋士

f:id:qhapaq:20170701214817p:plain

グラフは横軸xが自分の手番での局面の有利/不利度(右に行くほど有利)、縦軸yが手を指した後の局面の有利/不利度です。各々のドットは各棋士が実際に指した手に相当します。x=yの直線から下にあるほど、悪手を指しているということです。なお、コンピュータは基本的に自分が指す手が一番だと思っているので、余程の手を指さない限りはx=y(図の中の黒線)より上にはドットは行きません。

 

これらのグラフを見比べると、藤井四段、羽生三冠ともに、悪い局面(x=-500付近)での粘りが強いことが解ります。また、良くなった局面については、優位を逃すことはあっても不利には繋げない傾向が強いことが解ります。意外なことにも有利な局面で優位をキープできる確率は三者とも大差はないようです(ソフトとの手の一致率も似たようなものです)。どちらかというと、手を誤ってイーブンに戻すことはあっても不利にはさせない、上手にリスクを背負う技術に差がでるようです。

 

藤井四段と羽生三冠のグラフを比較すると、形状はよく似ていますが、序盤は少し藤井四段が良いように見えます。羽生三冠の相手の得意を受ける棋風が出ているのかも知れません。また、藤井四段の詰将棋で鍛えた読みの精度からくる、相手玉を寄せる技術(+1000点ぐらいからの手の正確さ)は流石の一言に付きます。

一方、羽生三冠は中盤の構想力が光ります。ソフトは基本的に自分の手が一番という傾向にあるとは言いましたが、それでもソフトの読みを凌駕する手が散見されます。

 

【解析結果を用いたエア対局】

解析によって、自身の有利不利によってどんな手を指しやすい傾向にあるかを取得できたので、このデータに基づいて戦った場合、両者の勝率がどのぐらいになるかを測定してみます。といっても、面白いグラフとかは出てきません。

結果:

藤井四段(65%)- 羽生三冠(35%)

 

意外とそれっぽい.... いや、流石に藤井四段を強く評価しすぎ?

 

【もう少し技術的な話】

ソフトの読みが人間より正確かという最強の問題以外にも、今回作ったデータでは矢倉、振り飛車といった棋風の考慮がされていないなどの問題があります。ソフトの評価が基本減点方式なので、自分がミスをするリスクを犯してでも、相手のミスを誘うような危険な局面へ誘導する棋風の人は評価を低くされがちです。こうした問題を回避するには戦型毎に解析を加えるなどの工夫が必要となるでしょう。

# 藤井四段の対局相手のレートは他の人に比べ低く出すぎる傾向にある気がします。仮に藤井四段が危険な局面を好む棋風なのだとしたら、レートはもう少し上がることになります...恐ろしや

 

【最後に】

ソフトによるレート測定は飽くまで一つの指標に過ぎません。上記問題の他にもソフトに理解できない人間の強さ、弱さは沢山あります。ただ、機械学習人工知能を駆使した数理的な指標を礎にすれば、人間は更なる高みに到達できると思っています。藤井四段の30連勝、大台が見えた一番のおつまみとして楽しんでいただければ幸いです。

 

【ちょっと宣伝】

人間将棋が大盛り上がりですが、コンピュータ将棋界も此処最近、とても盛り上がっています。第27回世界コンピュータ将棋選手権では佐藤名人に勝ったという最強ソフトponanzaが新星elmoに敗れ、長かったponanza絶対王権に穴が開く結果となりました。そのelmoの学習ルーチン、評価関数がソースコードと共に公開されたことを契機にコンピュータ将棋は驚くべき速さで強くなり続けています。

そんなコンピュータ将棋ソフトたちが戦う次の舞台が第5回 将棋電王トーナメントです。まだ大会予定も決っておらず、予算が出るのか今からヒヤヒヤしていますが、皆様が盛り上げてくれれば、当日きっと美味しい弁当にありつけると期待していますのでどうぞよろしくお願い申し上げます。

ちなみに私もqhapaqチームとして参加します。alpha go的な数の力を前提とした学習の時代に真っ向から逆らった、数理ベースの学習アルゴリズムを用いて今回も最終日生存を目指して頑張るつもりです。

最悪、qhapaqのことは応援しなくていいので、どうかコンピュータ将棋を盛り上げてくれると幸いです。

【今日のゆるふわ出張版】 atcoderのbeginner contest 64に殴りこんでみた話

ponanzaチームがPFNの精鋭を加えてから暫く。競技プログラミング勢をもっとコンピュータ将棋に引き込みたい、それならまずはコンピュータ将棋勢が競技プログラミングに手を出してみるべきだということで、将棋ソフトレーティングサイトの自称上位ランカー(笑)である"qhapaq"の中の人が敢えて爆死しに行ってきました。

 

問題は此方からどうぞ:

AtCoder Beginner Contest 064 - AtCoder Beginner Contest 064 | AtCoder

 

結果概略:

全問正解はできましたが、問題の読み間違いや調子こいて変なコードを書いたせいでコンパイルエラーを喰らったりして順位的にはなんとも微妙なものになってしまいました。

f:id:qhapaq:20170610230141p:plain

 

【得られた知見1:思考停止も立派な戦術】

問1:

1-9の数字が3つの標準入力で与えられ、その3つをつなげて作られた3桁の数字が4の倍数か判別する問題。

例: 1 6 8 が与えられた場合、168は4の倍数なのでYES、4 0 1が与えられた場合401は4の倍数ではないのでNO。

少なくとも百の位は数字が何であっても影響はありません。十の位もmod4では2, 0, 2, 0を繰り返すだけです。故に、十の位の数☓2 + 一の位のmod 4をとることで高速に判別が可能です。.....が、そんなことを考えないほうが問題は早く解けます。計算条件的には1 * 100 + 6 * 10 + 8のmod 4を計算するので十分です。

変な数理に目移りして暫く手が止まりましたが、ぐっとこらえて100の位だけ無視して10の位☓10+1の位のmod 4を計算させて撃破。

 

【得られた知見2:言語の仕様に精通しよう】

問2:

1次元空間上のN個の家の位置が標準入力で与えられ、好きな場所からスタートして全ての家を通る際の移動距離の総和を計算する問題。

家の座標をsortして、最大値と最小値を計算すればいいので、vectorのsortでOKと思ったのですが、ここでまさかのコンパイルエラー。どうもvectorのsortにはalgorithmが必要だったようです。

コンパイルを通してsubmitしたら、ジャッジはまさかのエラー。なぜだなぜだとコードをいじくり回した結果、悪ふざけでreturnの値を-1にしていたのが不味かったことが発覚。コードに必要のない /*  let's try computer shogi ! */という遺言を残す暇はなかったようです。

 

【得られた知見3:問題文をよく読み、必要なら質問をしよう】

問3:

競技プログラミングにおけるN人のプレイヤーのN個のレートが与えられ、プレイヤー全体が作る色の種類の最大/最小値を求める問題。各プレイヤーの色はレートによって定められているが、一定の値を超えると"好きな色"にできるとのこと(atcoderの仕様かな?)。

所謂場合分けをしっかりやらねばならない問題。N-M人のレートの色が固定されてる人が作る色の種類は固定(Aとする)であり、M人の好きな色を設定できる勢が作る色の種類は1-M種類であるため、答えは最小値はmax(A,1)、最大値はA+Mです(ただし、参加者が0人の場合は0を返す必要があります!)

が、"好きな色"の定義が本当に好きな色(ビリジアンとかも選べる)なのか、色固定組が持っている色の中から好きな色を選べるのかが解らず、誤った解釈(=後者の解釈)をしてしまったため、物凄く時間を消費しました。よく見れば入力例で色固定組の色以外の色が出てきていたのですが、30分以上費やして、漸く問題の解釈ミスの可能性に気づき、質問掲示板で同様の質問と回答を見つけ、解釈ミスに気付いて撃破。

# 序に、レート色の境界線の以下と未満も読み違えてたのでメッチャ時間使いましたorz

 

【得られた知見4:消費時間のバランスと問題の解ける解けないの判断を正確にやろう】

問4:

"("と")"からなる文字列に"("と")"を付け足してカッコが閉じた文字列を作る問題。stringの使い方がよく解らず、延々とコンパイルエラーを出し続けましたが、アルゴリズム自体を偶然一発で導出できたのもあり、なんとか10分以内に通すことが出来ました。今回は問3も解けた+問4との相性が良かったからあまり気にする必要はないですが、もう少し時間がタイトな大会などでは、早い段階で問3に見切りをつけるべきだったろうなと反省してます。

 

【得られた知見5:競技プログラミング強い人は凄い】

アルゴリズムを思いつくスキルもさることながら、高い文章整理スキル(日本語や英語の問題を正しく理解するスキル)やコンパイルエラーを出さないスキルの必要性を強く感じました。

私自身はその手の作業は正直あんまり好きではなく、得意でもないので今まで競技プログラミングを避けてきましたが、自分を鍛える意味で今後も続けてみたいと思います。

 

競技プログラミングは楽しいから、将棋勢ももっと殴りこみましょう。あと逆もしかり。

シンデレラ定跡に嬉野流(先手のみ)を追加しました

シンデレラ定跡(プロジェクトについてはこちらをご覧ください)プロダクションに新しいアイドルが加わりました。その名も嬉野流(ただし先手番のみ)です。

 

ダウンロードは此方からどうぞ

Release シンデレラ定跡 · qhapaq-49/qhapaq-bin · GitHub

 

作っていて、嬉野流は今までの定跡(袖飛車、中飛車)に比べると狙撃の成功確率が高い(相手を狙撃して勝ちに持ち込める確率が高い)ことに驚きました。

 

elmoやエロ河童の評価値はとても低いのですが、意外と戦える戦略なのかも知れません。

 

次回は作業用PCが生きていたら雁木を作る予定です。

# 最近稼働してるPCがみんな雑巾を作っていて、定跡作る余裕が意外と無いという...

シンデレラ定跡 はじめました

長らく放置されていた戦型毎の定跡を作ってみようプロジェクト(名づけてシンデレラ定跡プロジェクト)が漸く胎動しました。

 

シンデレラ定跡の名前の由来はシンデレラたちが将棋を指すシリーズ

盤上のシンデレラとは (バンジョウノシンデレラとは) [単語記事] - ニコニコ大百科

不屈のシンデレラ by 嘉肴(おつまみ) - ニコニコ動画

です。諦め悪く定跡を作り続けたら再びシンデレラが将棋を指し始めるのではないかとこっそり期待しています。

 

【とりあえず試作品をうp】

試作品として袖飛車と中飛車をアップロードしました。

Release シンデレラ定跡 · qhapaq-49/qhapaq-bin · GitHub

dbファイルが本体で、何れもやねうら王形式の定跡です。

 

今まで公開してきた定跡が量子ガシャベースのなんとなく勝率の高い局面集だったのに対し、シンデレラ定跡シリーズでは定跡スナイパー理論をベースとした作りになっています。

そのため、定跡としては狭い作りになっています。狭いゆえにすぐ定跡から外れてしまう代わりに、特定の戦型への誘導を激しくしてくるため、研究用途には適しているかも知れません。また、最近のコンピュータが死ぬほど振り飛車を苦手としている関係であんまり強くないかも知れません。

 

ユーザが使ってて楽しい定跡が何であるかイマイチ掴みかねているので、使用感などの感想お待ちしております。

elmo型学習の特徴と短い持ち時間で強くない理由 in elo河童理論

# elmo-qhapaq将棋理論。略してエロ河童理論ですね

elmoの学習部が公開になりました。秘密にしておけば次の大会でも勝てる見込みが高いにも拘わらず、公開してくれた開発者の方には感謝してもしきれない気持ちでいっぱいです。

 

さて、elmoの学習部の特徴はやね師匠のブログ(elmoがもたらしたオーパーツについて | やねうら王 公式サイト)などでも言及されている通り、浅い局面での評価値を、従来の深い局面での評価値ではなく、深い読みの評価値と、その局面から指させた時の勝敗を使って補正することにあります。

 

開発者の多く(?)が数式を見て最初に思ったのは「勝率の補正項大きいなあ」であったことでしょう。また、elmoの評価関数は浮かむ瀬に比べレート+200程度と強烈に強いにも拘わらず、持ち時間0.1秒の将棋などではあまり強くならないという特徴があります。

 

こうした不思議はなぜ起こるのか、elmoよりも強い関数を作ろうとするなら、まず知っておきたいことです。今回は特別に(?)私が導き出したelmo学習部の理論的な側面を解説していきます。

 

1.真のゴールは各局面の勝率を教師にすること

評価値とはつまるところ、詰みを読めなかったから嫌々呼び出している値に過ぎません。「詰みが見えれば勝ちだけど、それは出来なかったから局面の勝ちやすさを点数にして、高得点な局面に誘導しよう」と呼び出されるわけです。

評価関数が強いとは、この勝率の予想が正確であることを意味します。欲を言えば不完全情報ゲームの神のように、XX必勝とか引き分けとか言ってほしいのですが、それもできないことなので、嫌々何らかの方法で局面の勝率を定義します。

深い読みの評価値に浅い読みの評価値に近づける手法(雑巾絞り)は、歴史的には評価関数のブレを減らすためのものだといいますが、上記観点に於いては、深い読みの評価値の方がより真の勝率に近い値を出してくれているから、それに近づけていると解釈することが出来ます。

しかし、深い読みが浅い読みに比べて常に正確である保証はありません。同じ評価関数で長い持ち時間と短い持ち時間で対局させても、長い側が必勝とはならないですし、幾つかの戦型(例:qhapaqの対藤井システム)では広範囲にわたって評価値が勘違いをしていることがあります。

 

すなわち、elmo学習の真髄は実際に指し継がせた場合の勝率を教師にすることで、大局的な誤差を補正することにあるといえます。

 

# 指し継がせた勝率が深い読みの評価値より教師として適切であることは、実は自明ではないのですが、elmoが強くなっている以上、正しいと見なすことにします。

 

2.それならなぜ、勝率補正だけでやらないのか

勝率ベースの学習が深い読みよりも正確に学習できるのだとしたら、なぜ、elmoは未だに深い読みの評価値を加えているのでしょうか。

なんのことはない。その方がより真の値に近づくからです

 

以下、ちょっと面倒な数学的導出:

特定の局面xについて、指し継がせることによって得られた勝率をp(x)、深い読みから得られる勝率をq(x)、真の勝率をP(x)とします。q(x)P(x)の間には評価関数の勘違いに由来する誤差が、p(x)P(x)の間には測定回数の不足に由来する誤差が生じています。

我々はp(x)q(x)を使ってできるだけ正確にP(x)を復元したいとします。すなわち

 \sum_{x} ( P(x)-\alpha p(x)-(1-\alpha) q(x) )^{2} ..★

を最小にしたいわけです。p(x)は測定誤差であるため、ガウス分布に従う乱数であることが予想されます。一方、P(x)-q(x)は局面に応じて変化する何らかの(恐らく、なだらかな)関数であると予想されます。

一つ、シンプルなケースを考えてみましょう。とある戦型について、P(x)-q(x) = aである(評価関数が戦型の価値を一律で勘違いしている)としましょう。

問題を更にシンプルにするためにP(x)-p(x) はaか-aを等しい確率でとるとします。このとき、p(x),q(x)を単体で使った場合、P(x)に対する誤差の2乗期待値はa^2になります。

しかし、(p(x)+q(x))/2を使えば、誤差の2乗期待値は0.5a^2になります。複数の情報を用いた合議制を行うことで、より正確に真の値を見積もることができるわけです。

 

3.エロ河童理論によって予見されるelmoの現象論と今後の開発指針

elmoは持ち時間が長いほど強くなることが知られていますが、これは深い読みの評価値から得られる勝率q(x)は教師とした棋譜に似た局面(=短い持ち時間でよく出る局面)のほうが正確である(従来手法でも十分な教師が得られるため)からと思われます。

深い読みの評価値が正確であるなら、深い読みの評価値のウエイトを大きくしたほうがその局面の最終的な誤差は減るのですが、恐らく、elmoは教師とした棋譜からは遠い局面での学習の正確さを優先したのだと思われます。

また、指し継がせて得られる勝率p(x)の誤差の大きさは、教師データの数に依存します。★式からわかるように、教師データ数が少ないうちは、勝率の含有率を下げたほうが全体の誤差は下がるので、少ない局面で試し撃ちする場合は、配合率を徐々に上げるなどの調整をする必要があるはずです。elmo理論を改良して強くする場合は注意したほうが良い(複数の配合率で試したほうが良い)でしょう。

# ガウス分布に従うと考えれば、適切な含有率は教師局面の数の平方根に依存するはずですぞ...

elmo-qhapaq評価関数(ver1.1)のリリースのお知らせ

タイトルの通り、elmo-qhapaq評価関数(通称エロ河童評価関数)の最新版を作りましたのでアップロードいたします。

Release elmo-qhapaq評価関数(ver 1.1) · qhapaq-49/qhapaq-bin · GitHub

 

前回からの相違点:

version 1.0に比べelmoの棋譜を2万局程度増やしました。また、ver1.0が定跡off状態ではそんなにelmoに勝ち越さないとの報告を受け、elmo定跡offでよく出てくる戦型(相掛かり)を特に強化しました。

早繰り銀大好き問題などの問題も報告されていたので、学習率を下げたりもしてみたのですが、総じて弱くなってしまったので、学習率に変更はありません。

ただ、教師に使った棋譜が増えているため、原理的に過学習の影響は減ったものと思われます。

 

超雑な測定結果:

手元PCでの実験(最新のやねうら王、0.5秒将棋、regisnvalue=1000、定跡off)ではversion1.0に対して
184-6-160(レート差25弱)

で勝ち越しています。

 

ver1.0の測定結果はこちらを参照してください

 

ちょっとした言い訳:

vs elmoでのレート測定、真やねうら王定跡での vs elmoのレート測定、vs gikou2へのレート測定などが残っていますが、所持ハードの関係で測定データの提供が難しくなってしまっています。

 

せっかく色々な方がelmo、elmo-qhapaq関数で実験をしてくださったのだから、此方でも測定することがあれば実験結果はここに掲載していきますが、実験が何時行われるかについては保証をいたしかねます。

 

過学習について:

有志によるレーティングサイト(http://www.uuunuuun.com/)によるとelmo-qhapaq評価関数ver1はelmoとほぼ同等のレートだそうです。

各々の組み合わせの結果まではフォローできていませんが、特定の戦型に対して過学習をしていて、かつ、それが勝率に大きく響いているということはなさそう(過学習自体は幾つかのケースでしてるとは思いますが、それが致命的な動作不良を起こしてはいない)です。

 

次のバージョンアップは大分先になります:

当初の予定ではもう少し綺麗で強い関数にしてアップする予定だったのですが、申し訳ないです。

この一週間で色々なパラメタを試した所、結局エロ河童v1のパラメタが一番強そうという結論が得られてしまいました。加えて、学習方法の最適化のために自己対局を繰り返すうちに、elmo-qhapaq関数の過学習の影響はそんなに大きくはないだろうこともわかってきました(特に有志のレーティング測定が大きいですね)。

どうもエロ河童関数はv1の時点で河童絞り的にはほぼベストな形でチューニングされていたらしく、これ以降のバージョンアップをするとなると、elmoベースの棋譜が大量に(数十万局単位で)必要になるため、次の大幅アップデートは大分先になると思います。

 

当面はsdt5に向けてのelmo型学習機の改造と、先延ばしし続けたシンデレラ定跡作りをすることになると思います。

研究の過程で棋譜が溜まってきたら、それらを使った河童絞りでもう少し強いエロ河童が作れる......かもしれません。

elmo-qhapaq評価関数のレート戦型依存性の実験結果と考察

elmo-qhapaq評価関数(通称:エロ河童関数)をDL、ご利用、検証していただいてる皆様、誠にありがとうございます。

 

皆様の実験結果、及び、手元の実験結果を元に、エロ河童関数の挙動について幾つか知見が得られましたのでご報告いたします。

 

1.実験結果(以下すべて、エンジンはやねうら王v441以降)

エロ河童評価関数 vs elmo評価関数 in 真やね定跡 in 8スレ1秒

267-2-191

 

エロ河童評価関数 vs elmo評価関数 in たぬき定跡 in 8スレ1秒

 280-7-267

 

現在実験中

エロ河童評価関数定跡off vs elmo評価関数 in たぬき定跡 in 6スレ1秒

909-19-742

エロ河童評価関数in たぬき定跡 vs elmo評価関数 in 定跡off in 6スレ1秒

 859-17-784

 

2.実験結果の考察

最初の実験で真やねを使ったのは真やね定跡が局面が広く、スペックも悪くない(狙撃系定跡と異なり、特定の戦型を避けることをしない+定跡offに比べれば狙撃系定跡に強い)からです。

真やねミラーではエロ河童がelmoを大きくリードしている一方で、たぬき定跡などでは殆ど差がついていない(微妙にエロ河童のほうが強い気もしますが)のが現状です。

 

これは河童絞り、またはelmo絞りの良し悪しに戦型依存性があり、河童絞りを入れた結果、真やねミラーで出てくるような超力戦で特に学習の効果が出たからと思われます。

 

3.elmo-qhapaq評価関数ver2に向けて

vs elmoにのみ的を絞れば、エロ河童関数が少し有利であるとは思います(真やねミラーでは有意に勝ち越してるし、その他の定跡でも一応現状勝ち越してるし)。ただ、戦型依存性がある、特定の局面で過学習をしてる可能性が示唆されている(≒他ソフトへの勝率が落ちている)ためその強さは盤石ではないと思います。

そこで、floodgateや手元実験の棋譜を用いてより広い戦型を使う、過学習を起こさないように安全重視で学習を行うという調整をしていきたいと思います。エロ河童関数v2は近日公開予定です。

 

個人的には、その間にelmo関数の他ソフトへの勝率が集まっていてくれると助かります。エロ河童関数v2のスペックを測定する際に、elmo対他ソフトを逐一手元でやるのしんどいので...