読者です 読者をやめる 読者になる 読者になる

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

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

 

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

 

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

 

【とりあえず試作品をう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対他ソフトを逐一手元でやるのしんどいので...

Qhapaqの評価関数を公開します

WCSC27の最終日が終わるのを待ってから公開しようと思っていたら、elmoが最終局開始と同時にバイナリを公開してくれたため、恐らく出番がなくなってしまったQhapaqのバイナリですが、公約通り(?)公開します。

 

注:onedriveにアップしていた時はonedriveの不具合でDLできなかったようでしたので、バイナリはgithubに引っ越しました。現状、DL障害は生じてないようです

 

github.com

 

qh.zipが本体です。
 

河童全力定跡 (Qhapaq_z.db)

 

【使い方】

最新版のやねうら王のバイナリを上記バイナリにすげ替えていただければOKです。Qhapaqは定跡採択とクラスタ化とtimemanを改造していますが、持ち時間固定対局に於いてはやねうら王と動作は同じです。

 

【定跡を使う際の注意】

定跡については、量子焼きなましで作っているため時々ゴミが入っています。narrowbookをonにしてゴミ手を回避するようにしてください。

 注:やねうら王のnarrowbookはデータベース上での採択率が10%以上の手を等しい確率で選ぶ仕様ですが、河童全力定跡はデータベース上での採択率にそのまま従って手を選ぶ仕様になっています。どうしようもないクソ手の大半は採択確率が10%以下になっているため、棋譜を楽しむ上ではさほど問題はないと思いますが、レートをできるだけ正確に測定したい、河童定跡を狙撃したい場合には適さない可能性があります(やねうら王のnarrowbook上でのQhapaqの勝率は未検証)

 

【現在解っているQhapaqのスペック】

有志の皆様、検証誠にありがとうございます。取り急ぎ、本ブログで私の手元PCでの測定結果について公開していきます。

 

1.1手1秒4スレ、やねv_441 河童バイナリ+真やね定跡 vs 真やねバイナリ+真やね定跡

461 - 3 - 226(レート差約120)

 

2.1手1秒8スレ、やねv_441 河童バイナリ+真やね定跡 vs 真やねバイナリ+真やね定跡(上記実験は自作の自己対局スクリプトでやったため信用できぬと将棋guiで再測定)

113-5-51(レート差約130)

追加実験結果

491-11-228(レート差約130)

 

3.1手1秒8スレ、やねv_441(ただし定跡探索は河童仕様) 河童バイナリ+河童全力定跡 vs 真やねバイナリ+真やね定跡(現在測定中)

85-3-26(レート差約200。流石に測定誤差が載ってると思う)

追加実験結果

 536-8-203(レート差170)

 

実験結果を眺めて思うこと:

Qhapaqについては、どうやら、評価関数でレート+130、定跡でレート+40程度のようです。

Qhapaq同士の対局では vs 真やね定跡への勝率が56%(ただし、0.1秒対局)だったので、意外と綺麗にレートの足し合わせができているようにみえます。

有志によるvs elmoの実験(本当にありがとうございます!)でelmoがQhapaqに6割ぐらい勝つようなので(持ち時間依存性があるようですが)、単純に考えればelmoと真やねのレート差は200ぐらいです。

elmoの登場によって評価関数作りが急激に進むのと同時に、評価関数の品質評価にも長い持ち時間が必要であることが示唆されて無課金勢的には辛い話です orz

 

Qhapaqの今後について:

私がgithubとかの使い方を覚え次第、河童絞りとやねうら王のクラスタ化部分についても公開していきます。学習やクラスタ化の理論についてはコード公開の際に書いていきたいと思います。

今後はQhapaqの各種ツール、バイナリなどのデータをライブラリとして公開していきたいと思います(評価関数はapery、探索部はやねうら王と依存関係がかなり面倒くさいですが)。

他にも優秀なライブラリ公開者がいるので、Qhapaqについては理論説明がしっかりしていること、更新頻度が高めなことを売りにしていく......予定です。

Qhapaqの定跡とtimemanを公開します

WCSC参加、ご視聴の皆様、お疲れ様でした。

Qhapaqは大会を10位で終えました。無課金でもできる学習理論の構築を目指し、色々頑張ったのですが、残念ながら負けてしまいました。応援してくださった皆様には心よりお礼申し上げます。

さて、私の大会は終わりましたが、まだやることはあります。そう、やねチルとして同じ釜の飯を食う仲間達を応援する必要があるのです。

というわけで、今からできる微調整としてQhapaqの定跡とtimemanを公開します。

# でも実際使えうるのは定跡だけだと思う

 

河童全力定跡 (Qhapaq_z.db)

timeman.cpp

 

・森久保量子ガシャを駆使した河童全力定跡

Qhapaqの定跡はメタ対象(まふ定跡、やねうら定跡、定跡off)とQhapaqを戦わせ、評価値がそれほど悪くなく、ある程度進めば評価値が高くなるもの(60手目以内に評価値がある一定値以上になるもの)を選んでいます。相手を悪い手が出やすい局面に誘導する。相手の悪い手を咎めるのが主な目的であるため、相手の持ち時間は短め(5-10秒。定跡を作ってる方は30秒-1分)としています。なお、Qhapaqが悪手を指しているが、相手も悪手を指していたため勝ってしまったという自滅を防ぐために、短い消費時間側が勝った局面はストックし、その局面から短い持ち時間で自己対局をさせて勝率を測定し、勝率が芳しくない場合は削除するという調整も行っています。

広い序盤の変化の枝をネガティブかつ効率的に探索するという意味で森久保量子ガシャと名付けました。

 

・timemanはoptimum timeが一定になるように調整すべし

理論の詳細はコンピュータ将棋流の時間攻めと電王戦の攻防 に任せますが、stockfishの時間制御はbestmoveの変化する確率の時間微分を敷居値にして行われます。

実際は局面の難しさやponderの当り具合によって持ち時間は動的に変化するため、手を読み始める前に「恐らくこのぐらいの時間を使っていい」という仮想消費時間(optimum time) を決め、

 消費時間 ☓ bestmoveの変化確率 > optimum time ☓ 定数

となった時に読みを打ち切るようにしています。やねうら王では持ち時間を80で割った値をoptimum timeに用いていますが、この実装は序盤から終盤になるにつれ、optimum timeが減るため良くありません(終盤になるほど局面の複雑さが落ちるチェスの影響だ多分)。理論的にはoptimum timeは対局開始から終局まで一定であるべきです(机上の空論ではありますが、0−30手目、30手目-60手目、60手目-90手目の持ち時間を倍にして勝率を測定すると、どれも似たようなレート上昇になるのであながち間違いではないと思います)。

Qhapapのtimemanはoptimum timeをできるだけ一定に保つように実装しています。実際、WCSCの棋譜でも、ある程度均等に時間を消費できていると思います。ついでに、浮かむ瀬がやっていた序盤の時間節約ルーチンも実装(最初20手は長くてもoptimumの2倍程度しか時間を使わないようにする)しています。

 

・timemanはハードや評価関数に依存して地味に面倒

 消費時間 ☓ bestmoveの変化確率 > optimum time ☓ 定数

という式をじっと眺めると、stockfishの実装だと、ハードが強くなればなるほど消費時間が短くなることが解ります。また評価関数の質を高めるほど、変な勘違いが減る分、消費時間が減ることが期待されます。elmoは殆どやねうら王の実装そのままだと思うのですが、Qhapaqよりも消費時間が短めでしたし......

Qhapaqのtimemanはtimemanに使うノートPC用にチューニングしたので、恐らく直接使うと時間が余り気味になると思います。

 

・定跡とtimemanのご利益

一応、定跡+timemanを搭載したやねうら王 vs まふ定跡/真やね定跡を搭載した魔女、やねうら王の対局 in WCSC型の持ち時間では、河童側が7割弱勝てているようでした(ただし、50試合ぐらいしか出来ていませんが)

 

最近は自己対局の勝率が探索部以外も持ち時間依存する説が囁かれており、私の行ったテストに意味があるかは謎ですが...

 

まあ、そのままコピーして使えるかは激しく疑問ですが、盟友たちの最後の抵抗の小さな支えになればと思います。

アピール文から読み解くWCSC27の見どころ(大合神クジラちゃん編)

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

 

前回記事:アピール文から読み解くWCSC27の見どころ(うさぴょん2’TURBO編) - qhapaq’s diary

 

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

 

・オープンイノベーションの先駆者 大合神クジラちゃん

大合神クジラちゃんのアピール文:

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

aperyの公開以降のコンピュータ将棋界において、第三勢力としてのオープンイノベーション勢を無視することはできません。最新のstockfishをaperyシリーズに組み込んだsilent majorityや、既存定跡を狙撃するまふ定跡、mizar氏による定跡データベースの拡張などが一例です。

その点に於いてクジラちゃんはニコニコチャンネルを駆使したコミュニティー作りと、共同開発を続けており、オープンイノベーション勢の先駆けとも言える存在です。

以下、クジラちゃんが本大会をどう盛り上げてくれるのか予想してみたいと思います。

 

・合議制の難しさ

クジラちゃんの探索部は視聴者の数だけ火力が出るわけですが、アピール文によれば与えられた局面から1手分岐した状態で割り振る仕様だそうです。読むべき局面から1手進んだ状態を読ませ、それらを統合して指し手を決めることで、読みの深さを実質1手深くすることができます。

クジラちゃんの視聴者数的には、2手以上深く読ませることも可能だとは思いますが、手の割り振りが面倒(将棋では合法手の数は局面に応じて激変する)なのと、ユーザとの接続が切れた時、他に当該局面を読んでいるユーザがいないと読み全体が死んでしまう危険があるので、これは茨の道であると言えます。

クジラちゃん式の合議将棋には幾つかの興味深い問題があります。例えば、貧弱なPC2台と屈強なPC1台で局面を読ませた際に、貧弱PC2つの意見と屈強PCの意見が合わなかった時、何方の意見を採用するべきでしょうか。

他にも、幾らたくさんユーザがいても、皆が全く同じ局面を読んでしまえば合議制は意味をなしません。それを避けるには評価関数に乱数を加えるなど、読み筋に多様性を与える必要があります。スペック、数ともに不確定な状態でどのように手の分散具合を制御すればいいでしょうか。

 

・スペックはXeon以上、apery未満と予想

合議制の魅力を諦める(ユーザPCのスペックを測定し、最も強いPCの意見だけを採用する)なら、ユーザが使ってくるPCの中で最も強いPC達+depth1程度の読みができることになります。ユーザのPCのスペックや、クジラちゃんがどういった合議制をしてくるかは謎ですが、12スレッド級のPCを各々の手に割り振るぐらいはできると予想しています。

12スレッド+depth1なら、凡そ、大将軍やNDFのハードと同じぐらいの読みができるのではと思います。逆に巨大なハードを複数台連れてくるようなaperyのような相手には視聴者の数でNPSを稼ぐだけでは探索速度で勝つのは難しいと思います。

 

・Qhapaq的総評

クジラちゃんの立ち回りはハードを大量にこしらえたsilent majorityに近いと予想しています。クジラちゃんがどれだけ勝てるかは加速するオープンイノベーションの強さ、同時に、数の力に抗おうとする開発者個々人の強さをみる良い試金石になると思います。

 

余談ですが、QhapaqはクジラちゃんにWCSC26で2回戦い2回負けています。生放送でひたすら「艦これみたいに評価値に応じてマスコットの服が脱げるほうが面白い」と言いまくった記憶がありますが、果たして実装されたでしょうか。楽しみです。