コンピューター将棋の定跡をデザインする


電王戦に向けていまやねうら王に定跡を搭載するための作業をしている。


本電王戦はソフトを事前貸出をしてソフトの穴を探すためにプロ棋士側が研究するという、非生産的な行為にプロ棋士の多くの時間が消費される。電王戦は全くの茶番劇である。


このようなプロ棋士側の非生産的な行為をなんとか生産的な行為に変換できないものかと考えて誕生したのが、やねうらおもてなし定跡である。「やねうらお」を「もてなし」する定跡ではなく、「やねうら」「おもてなし」定跡であり、「田村ゆかり、さんじゅうななさい」ではなく「田村ゆかりさん、じゅうななさい」なのである。(なんのこっちゃ)


早い話、多少不利になるような変化であれ、プロの実戦に出てくるような形をたくさん入れて、せめて事前研究のときに将棋を少しでも楽しんでもらおうと思ったわけですよ。ところが、これがとてつもなく面倒なんすよ。


まず定跡をどうやって自動で生成しますか?


1) プロの棋譜から32手目ぐらいまでを定跡として登録する手法


これは去年の電王トーナメントでAperyがやって、富岡流の必敗局面に自ら突っ込んだ。


2) 1)の手法+出現頻度をカウントして出現頻度の低い定跡は採用しない


これはBonanza6がやっている。narrow book(狭い定跡?)にしたときは、出現頻度の低い定跡は使われない。ただ、それでも必敗と結論付けられているような不利な変化に自ら飛び込むことは避けられない。事前貸出がなければこれでも現実的には十分だが、事前貸出ありの状況ではこれが避けられない。


3) 1)の手法 + 出現頻度に比例した確率でランダムに指し手を選ぶ


Stockfishはこうなっている。悪くないアイデアではあるが、低確率で不利な定跡に突っ込むことには違いないし、序盤でわざと定跡を外して、そのあとに不利な変化に行くような定跡に合流されると困る。


また、「おもてなし」の心でありたいので、narrow bookにしたくないというのもある。広い定跡を搭載したい。しかしそうすると3手目で角をタダ取りされるように変化も(プロ棋士の実戦にあるので)、やってしまいかねない。一つ一つの定跡を目でチェックすればいいのだが、「おもてなし」なので1万通りぐらいの定跡を搭載したいわけで、その全部を目視でチェックすることは棋力の問題もあって私には不可能だ。


4) 1)の手法 + 探索して評価値を見る


そこで習甦の方法。定跡の指し手で進めた局面をdepth=12で探索させてみて、マイナスが大きな指し手ならばbook(定跡DB)に登録しない。一見、うまくいきそうではあるが、やねうら王でやったとき、先手76歩に対して後手の初手は次の通りであった。


・42玉(棒銀の餌食にならないか?)
・72銀(鈴木英春さんか?)
・94歩(また挑発だと言われるぞ?)
・74歩(いつぞやのツツカナか?)
・32金(振り飛車にされて作戦負け模様)
・54歩、32飛、42飛、52飛(悪くはないんだろうけど…)
・34歩(普通)
・84歩(普通)


と、34歩・84歩以外の手が糞すぎて困る。当確率に定跡DBの指し手を選ぶとしたら、後手の初手で糞みたいな手を引く確率が高すぎる。後手の初手なので、一番いい指し手で -70 程度。一番悪い指し手で -150程度。そんなわけで、-200 以下の指し手は定跡DBに登録しないという仕様で定跡を生成していたのだが、上記の指し手がごっそり定跡DBに登録されてしまっていた。


後手の初手ぐらい、人間の目で見て排除すれば良いのだが、しかし初手でこのような問題が発生する以上、手法自体に欠陥があるのではないかと私は考えた。


5) 4)の手法 + 最善手との評価値の差が一定以内である


そこで、せっかく探索しているので最善手の評価値との差(evaldiff)が一定以内であるという条件を追加した。


定跡DBのbestの指し手のみを選びたいときはこれを0にする。
narrow bookにしたいときはこれを30ぐらいにする。
幅広い定跡を選択したいときはこれを50ぐらいにする。


これだけだと徐々に悪くなっていく定跡を選んでしまいかねないが、評価値が -200 以下の指し手は採用しないというルールを加えることにした。


しかし、これだと
・narrow bookにしても先手76歩に対する後手の初手32金、62銀や42玉が選ばれることがある。
・後手パックマン戦法を選んでしまう。(44歩と突いて、歩をタダ取りされる戦法) 44同角のあと後手、定跡DBから外れて乱戦にせずに62玉。プロ相手にこれでは勝てませんわ…。
のような指し手が選ばれてしまう。


6) 5)の手法 + もっと探索!(depth = 18)


結局、探索深さが足りないという結論に至った。そこでdepth = 18で32手目まで探索させてみた。あまりにも時間がかかるので並列化した。正確には、探索するときにどのdepthで探索したかをDBに記録しておき、定跡DBをマージ(合併)するコマンドを追加した。マージは、このdepthを比較して、その指し手でより深いdepthで探索した評価値が記録されていれば、その情報を優先するようにした。


これでも後手の初手の問題は改善しなかった。また、「評価値-200以下の指し手は記録しない」というルールにしていると、


a) 62玉 depth = 12で探索 評価値 -100なので記録
b) 42玉 depth = 12で探索 評価値 -180なので記録
c) 62玉 depth = 18で探索 評価値 -1000 なので記録しない
d) 42玉 depth = 18で探索 評価値 -180なので記録


のようにc)の指し手が記録されない。c)の指し手は、a)の指し手と同じだが、深くまで読むと悪くなるということがわかったわけであるが、このc)が記録されない。b)よりはd)が探索深さが深いのでb)がd)で上書きされ、結果、a)とd)だけがDB上に残る。そうするとa) = c)は悪手なのに、この定跡DB上ではa)とd)が残っているから評価値の -100 と -180と比較してa)のほうが大きい(narrow bookで許容する評価値の差は30以内!)のでa)が採用される。これは間違った定跡である。


このように考えると「評価値-200以下の指し手は記録しない」というルールは間違っていることがわかる。DB上に記録自体はよほどのことがない限りはしておくべきなのだ。


7) 6)の手法 + もっともっと探索!(depth = 24)


depth = 24で1スレッドだと1手の思考に数秒要する。これをプロ棋士棋譜4万数千局に対して32手目までやるとなると…えーっと..


いま、ドワンゴに貸してもらってるガレリアPC(今回の電王戦出場ソフトの開発者は全員申し出をすれば1ヶ月ほど借りらる)と自分のPC 4台とでこれをぶん回しているんだけど、大丈夫かな…。(俺の家の電気代が)



しかし、残念なことにこれでも後手初手62銀は選ばれてしまう。おい、どんだけ62銀好きなんだよ!ちなみに、そのあと先手の飛車先が伸びてくると後手は32金〜41玉とするので完全に守勢に立たされる。こんなので勝てるの鈴木英春さんだけだよ…。


8) 7)の手法 + もっともっともっと探索!(depth = 30 , moves = 2)


あまりに頭に来たので、2手目までだけ探索深度をかなり深くしてみた。depth = 30である。やねうら王の場合、1スレッドだと1手に15分〜30分ぐらいかかる。まあいい。そんなに組み合わせはないはずだから…。


その結果、ご覧の有様だよ!!



evaldiff = 30(最善手の評価値と30の差まで許容する)とした場合、後手の初手として32飛・84歩・54歩・62銀・34歩・42飛が選ばれる。


うーん。そうなのか…。ここまでしても後手の初手62銀は消えないのか…。


ならば、やねうら王には後手の初手62銀をやって、公式戦において最後に負けたコンピューター将棋として将棋界の歴史に名を残してもらうことにしましょう…。


※ 手番が決まるのは11月26日の記者会見です。まだ先後決まっていません。


ちなみに、やねうら王の先手の場合は、こんな感じになっております。



76歩・26歩・68玉・48銀のいずれかになるかと思います。68銀と48銀は正直、やめて欲しい…。でもこれも、やねうらおもてなし定跡だから仕方ない…のか…な…。ここは変に手心を加えず、やねうら王が自ら判断したありのままの定跡で臨みたいと思います!


みんなも「やねうらおもてなし定跡」をハラハラしながら見守ってくれ!!


・追記


9) 8)の手法 + 自ら思考させその指し手を定跡DBに保存


いま、生成された定跡を確認してたら68玉34歩38銀84歩76歩85歩78玉86歩同歩同飛22角成という先手の糞定跡が見つかった。誰が指したのかは知らんが(プロの棋譜以外も混じっているので)*1、38銀は趣向だと思うけど、せめて48銀にしてくれよ。そして22角成もどう見ても悪手。85歩に78金とでも我慢しとけば少し作戦負けながらもまだまだやれるのに…。こんな出だしじゃ絶対勝てないわ。


そんなわけで、8手目あたりまではdepth = 26ぐらいで思考させた指し手も定跡DBに登録しておこうかと思います。うちの電気代大丈夫かな…。


10) 負けたほうの指し手は定跡登録しない


富岡流のような定跡もあるので、長い手数まで定跡化するのであればワンサイドで負けたほうの指し手は定跡登録しないということでそういう定跡を回避できる可能性があります。昨年のやねうら王が搭載していた、やね裏定跡がそれです。今回は採用しませんが。


・追記


ねとらぼで取り上げられました!


将棋電王戦出場のやねうら王 プロ棋士の研究を無駄にしない「やねうらおもてなし定跡」を搭載
「公式戦において最後に負けたコンピューター将棋」になるかもとのこと。
http://nlab.itmedia.co.jp/nl/articles/1411/14/news106.html


・追記 先手の初手の最善手は?


depth = 32で調べてみました。数時間かけてやねうら王に思考させたところ、58金右。この手はそんなに悪くない気はしますが(もしかすると本当に最善手の可能性がなくもなく…)、プロの実戦例にはないようで、今回の手法だとそのあとの展開が定跡化できないため、3手目から定跡を外れます。これだと今回の趣旨である“おもてなし”に反するのでこの手は指さないように何か対策します。

*1:コメント欄でKCC将棋の棋譜だと教えてもらいました

人間の棋譜を参考にせずに評価関数パラメーターを学習させる件


少し誤解している人がいらっしゃるようなので補足します。


まず、人間の棋譜を参考にせずに学習させようとした場合、探索で正しい手が指せるのは詰みの絡む局面(≒終盤)だけなので、終盤の指し手から(開始して、それを前倒ししていき、最終的に序盤の指し手を)学習させるというのは当然のことです。これは私のアイデアではないです。オセロのロジステロなど先行事例(10数年以上前から!)は多数あります。


この部分、誤解している人が多いので、以下に「ひまわり(将棋)」の山本さんのツイートを紹介しておきます。


https://twitter.com/kyamamoto9120/status/529958077491970049


https://twitter.com/kyamamoto9120/status/529960169023631360



その上で私のアイデアは、二点あります。


一つは、学習に強化学習(TD法など)を使わないということです。普通の棋譜からの学習はボナメソで成功することが保証されているのだから、わざわざ他の方法を持ち出さないということです。


もちろん、TD(λ) 法やQ学習などを用いても成功するとは思います。しかし、Bonanzaのlearn.cを見てもわかるように、ペナルティのかけかたや、シグモイド関数の使い方に独特のテクニックのようなものがあり、TD(λ) 法やQ学習を用いる場合も、それに相当する独特のテクニックを開発しないといい値に収束しないのではないかと思うのです。私は強化学習を専門にやっているわけではないので、そのへんの事情は知りませんが、ボナメソで出来るとわかっていることをわざわざ他の方法でやるのは遠回り以外の何物でもないと思っています。


ボナメソであれば、プロの棋譜から学習させる場合、どれくらいの数の棋譜でどれくらいのイテレーションをどれだけ回せばそこそこの値に収束するのか(どれくらいの棋力の評価関数パラメーターになるのか)がわかっていますから、それと比較しながら実験が出来ます。だから、この部分をボナメソ以外でやるというなら、そもそもその手法を用いてプロの棋譜からボナメソより早く学習でき、ボナメソでやるのと同等以上の棋力になることを証明してからでないとその手法を使う価値がないと思うのです。


また探索部についても同様で、きちんと探索部が書けていること(少なくともボナ6のfv.binを使用したときにボナ6と同等の性能が出ていること)が必須条件だと私は考えています。この部分がきちんと書けていない場合、この手法で学習させた評価関数パラメーターとの比較実験自体がまっとうに出来ないからです。


二つ目は、学習の時の次元下げです。終盤に出てくる特徴から序盤に出てくる特徴を学習するためには、学習時の次元下げが行われていない限り、厳しいというのが私の考えです。


そのために相対KPPによる次元下げ(や、その他の次元下げ)を用います。それなしではうまく終盤から序盤の形を学習させられないと私は考えています。例えば、自己対戦で生成した棋譜からのみ学習させることを繰り返すと、棋力がサチらず(飽和せず)、どこからか棋力が下がっていきます。それは序盤を誤って学習してしまうためです。このような(自己対戦棋譜からのみの学習という)フィードバック型の学習において、サチらない状況(条件下)では、終盤から序盤を学習させるのは厳しいというのが私の考えです。


つまり、フィードバック型の学習で棋力がきちんとサチるように次元下げをして、まずサチることを確認する。サチらないなら次元下げの方法を工夫してやる。これがまず最初にやるべきことであり、これをやらずに、終盤から序盤を学習させようと努力するのは、努力の方向性が真逆であるというのが私の考えです。だから、私は、この部分でサチる」のを確認できたら、この手法に取り組むつもりです。


オセロで成功して将棋で成功しないのは、以上の2点に起因する問題だと私は考えています。


つまり典型的な駄目な研究の進めかたとしては、探索部=独自に書き起こしてバグ有りかも、評価関数の形=独自、評価関数の学習メソッド=強化学習、次元下げ=やってない、というやり方です。このように未知の要素が多い状況では比較実験自体が成立しないので、成果を出すのに相当な腕力が必要になります。そのような状況下では私ですら全く成果は出せないでしょう。(※ ひまわり将棋がどうやっているのかは私は知らないので、この話はひまわり将棋や特定の将棋ソフトのことではありません。)


人間の棋譜を用いずに評価関数パラメーター学習する件について、私の考えおよび、私の提案する手法は以上です。

電王トーナメントその後


昨日までの記事で、書き忘れていたことがあるので、いくつか補足しておきたいと思います。


SeleneはBonafishか?


Bonafishというのは、評価関数がBonanzaのfv.bin相当で、探索部をStockfishに差し替えたものを言います。


西海枝さんに聞いてみたところ、「Bonafishも、実は作ったんですけどねー(あんまり強くなくて、いまはBonafishではない)」とのことです。


私もBonafish作りましたが、PonaX相手に3割勝てなかったので、西海枝さんのほうは評価値の差分計算の方法がまずく、npsが私のBonafishより2割ぐらい遅いようなので、おそらく25%ぐらいしか勝てないでしょう。


SeleneがPonaXに4割勝つ」ということの意味するところは、つまり、そこからの改良(主にNDFの相対KPPでの学習をしたことによる棋力向上)でしょう。


■ mate 63 ≠ 63手詰の件


まず、AWAKEの「mate 63」の件ですが、「mate X」については以前から何度か書いているので、今回は詳しく定義を書かなかったのですが、間違って理解している人が多いので補足します。


mate 63は63手詰めではないです。63手詰めというと、連続王手で63手で詰み、それが詰ませるときの最短手数であるという意味ですが、そうではないです。また、mate 63は王手 or 詰めろの連続でもないです。


「相手がどのように応じても最長でも63手で詰ませることが出来る」ということです。無駄合いが含まれますし、迂回手順での攻め方も含まれます。


詰将棋を考えてみるとわかると思いますが、相手側の応手はすべて読まないといけませんが、こちらの応手はその手で詰むのであれば他の指し手を読む必要はありません。(最短手数を目指さないでいいならば)


実際にはAWAKE側が最善を尽くせば20手ぐらいで寄るのでしょうが、たまたま読めたのが63手かかる手順だった、ということです。やねうら王のほうもAWAKEの「mate 63」を認識した局面から数手進んだところで「mate 43」を認識しました。


それでも「mate 63」はやっぱり凄いなー(部分的であれ、そんなに深く読んでいるのかー)というのが私の感想です。


■ AWAKEのseldepth = 50の件


部分的にでも50手も読んでるということは、1手ごとに2通りの指し手を考慮するとして、2^50 = 1,125,899,906,842,624局面も読んでいるのかー。と思っている人がいるようなので、これに関しても補足します。


seldepthというのは将棋所で動かしたときに、探索深さのところに「15/30」のように表示される右の数字(「15/30」の「30」のほう)です。


これは何の数字かと言うと、PV node(最善応手列に関わるnode)での読みの深さです。PVは最善応手列ですので1本道です。


PVを作るためには、当然、それ以外の指し手もそれなりに読まないといけないのですが、そのへんはざっくりとしか読んでいないのがいまのコンピューター将棋でして、seldepth = 50を読むための必要なnode数は、2^50というよりは2^25より少し大きいぐらいと考えたほうがいいでしょう。


探索部の作りにより、seldepthが伸びやすいソフトと、seldepthが伸びにくいソフトがありますが、seldepthを伸びやすくしておいたほうが超部分的にですが深く読めて、深く読まないと形勢が判断できないような局面においてはそれが正しい形勢を反映していることが統計的に多いので、seldepthを伸びやすくするほうが有効なのではないか、と私は思ったのですが、真偽のほどは実験してないのでわかりません。


■ やねうら王は電王トーナメント期間中に強くなっていた?!


初日のバージョンでPonaXに少し勝ち越す程度。3日目のバージョンで初日のバージョンに5%程度勝ち越すようになっていたようです。参考まで。


■ やねうら王はこのあとさらに強くなる?


平岡「やねさんなら、このあと1ヶ月あればAWAKEのKPAとかやれるんじゃないですか?」
やね「私なら1週間あれば余裕ですね。1日で実装して6日で学習を回す、みたいな…」
平岡「ひえー。そんなことより、秒読み(のバグ)直しましょうよ!」
やね「は、、はい。すみません。」


そんなわけで強くするのはさておき、秒読みのバグなおしてきます…。
あと、置換表上限も修正しておきます…。


■ やねうら王は定跡を入れる


習甦の方法で定跡を1万通りぐらい入れておきます。なかには損な定跡も多分にあるでしょうけど、多少不利な定跡でも中終盤で盛り返せるかも知れませんし、プロ棋士の先生には勝負にこだわらず、いろんな戦型の将棋を楽しんでもらえればと思います。


■ やねうら未来定跡はどうだったのか


やねうら未来定跡は、予選1回戦でPonanza相手にやって一方的に作戦負けになったため、そのあと定跡オフにしていましたが、思うところあって、最終局(3位決定戦)だけやねうら未来定跡をオンにしました。


オンにした理由は、3位決定戦だったので負けても4位であり、電王戦出場には響かないということと、Seleneに搭載されている定跡を本大会での棋譜から調べたところ、やねうら王側がそれで暴発してしまうような変化にはならないと判断したからです。


やねうら未来定跡は、事前にやねうら王が自ら長い考慮時間を費やして考えだした定跡です。
本局は矢倉模様になりました。序盤のわずかな形の良さを活かしてSelene相手に作戦勝ちになりました。


コンピューター自らが矢倉戦法(とその早囲い)を再発見し、そして、自らの思考により、端歩を突き越しあってそれで作戦勝ちというのを意識し、端攻めから快勝しました。一昔前のソフトは端歩のタイミングがおかしいことが多々あったのですが、今回のやねうら王は端歩を突くことの必然性(相手玉のほうが端に近いので端歩を突き合うのは自分が有利!)を理解した上での端歩突きだったわけで、序盤はともかく、中盤に関してはコンピューターが長時間考えれば、中盤の定跡を自ら開拓できるだけの力をつけてきたということは言えそうです。


■ やねうら王の不安定性について


同じぐらいの棋力のソフトと互角の勝率だからと言って、下位のソフトに同じぐらい勝つとは限らないのが将棋ソフトで、そういう取りこぼしが少ないように探索部を調整するのが普通なのですが、やねうら王はそういうチューンは一切してないです。AWAKEなんかは比較的取りこぼしを少なくするように調整しているそうです。


探索部の調整は結構難しいのですが、やねうら王も、調整していきたいですね…。


■ AWAKE、PonanzaとApery、やねうら王の差


AWAKEやPonanzaは探索部をかなり調整しています。


巨瀬「探索部、半年ぐらいかけて(Stockfishの探索部から将棋向きに)調整してR50〜100ぐらい」
「半年かけてR50〜100上がる」を肯定的に捉えるべきか、否定的に捉えるべきかは私にはわかりません。


AWAKEもPonanzaもそのへん力を入れているので当然長い時間を費やして調整しています。
やねうら王やAperyは、評価関数の改良に期待をかけています。評価関数のほうが伸びが顕著なので(ちょっとした改良でR200や300ぐらい伸びかねない)、まずはこちらを改良するほうが(少ない時間で)強くできそうだからです。


やねうら王も探索部を調整したいのですが、半年も費やすのはちょっと…。


■ AperyがSelene相手に金のタダ捨てをして連続王手の千日手に誘導して勝った件


相手による連続王手の千日手を勝ちだと判定しています。どのソフトでもそうなっています。Seleneはそこ、きちんと実装していなかったようですが…。


それで、相手からの連続王手の千日手が勝ちなので、その局面に誘導したほうが短手数で勝てるなら当然その局面に誘導します。それが金のタダ捨てだったというだけです。


連続王手の千日手Seleneがきちんと実装していない&金のタダ捨てで最短手順でその局面に誘導できたという二つの偶然によって発生した現象です。やねうら王でもこの局面なら金をタダ捨てする手を候補に挙げます。


ただ、こういう大会の場でこれが起きたのはドラマであり、また「金のタダ捨てで勝ち」という手順の妙もあって、この局面図はコンピューター将棋史に確実に残るでしょう。


https://twitter.com/shogi_pineapple/status/529485798182100992/photo/1


■ 今回のマシンは本当に速いのか?


先日発売になったばかりの8コアCPU、Core i7-5960XなのでPCを提供しているドスパラさんはよく頑張ったなという印象なのですが、このPC、8コアの割に定格が3GHzしかないので、遅いです。やねうら王のベンチマークで1スレッド当たりの探索速度は800knpsしか出なかったです。(Core i7 4771で1Mnps超え) 2割ぐらい遅い計算ですね。コンピューター将棋の通常探索のときの性能で考えるなら6コア 3.5GHzとあまり変わらないように思います。


■ 準決勝AWAKE vs やねうら王を見守る山本君に聞いてみた


大会最終日、準決勝AWAKE vs やねうら王を見守る山本君。


やね「山本君は、やねうら王のほう応援してくれてるんでしょ?」
山本「なんでっすか?」
やね「だって、やねうら王のほうがAWAKEより弱いとしたら、やねうら王が勝ったほうが、Ponanza的には優勝しやすいでしょ?」
山本「そんなことは考えてないです。強いほうが勝ち上がってきてもらえれば。」
やね「(おお、これが、王者の風格か…)」


その後、AWAKEがやねうら王に勝ち、決勝でPonanzaはAWAKEに負けはしたものの、山本君の姿勢には敬意を表します!

やねうら王 対局 実況用スレッドその3


■ 2014/11/3 7:53 会場到着


マリーアントワネット「パンがなければお菓子を食べればいいじゃない」


訳 : 私は早く着きすぎて朝食のパンがまだ用意されていないので、昨日の残りもののお菓子を食べて過ごしています。


※ ドワンゴの人より。朝食は8:30ごろにいつものところに置いておきますとのこと。


■ 2014/11/3 8:00 今年のAperyは何が改良されたのか?


やね「評価関数の学習に多項式近似を使う件、成功したんですね?」
杉田「あれね、うまくいかなかったんですよー」
やね「そうなんですか?」
杉田「多項式だと、サンプルがないところに極端に大きな値がつくことがあって…」
やね「な、、なるほど」


■ 2014/11/3 8:01 Aperyのいまは?


やね「ということは、相対KPPを取り入れたわけですか」
平岡「そうですね」
やね「手番評価、結局入れなかったんですよね?」
平岡「なんか入れても強さが微妙だったので…」


※ NDFがやっているような手番評価*1、うまく拘束条件を入れたり何か工夫するとうまくいくのかも知れないが、このへんは開発者の間でもよくわかっていない問題。


■ 2014/11/3 8:06 平岡さんのスーパーポジティブシンキング


5位になるには2連勝しないといけない窮地に立たされたAperyについて。


杉田「厳しいですがまあやるしかない。」
平岡「行けるやろ」


■ 2014/11/3 8:08 Aperyとやねうら王とではどちらが強いのか


やね「(ということは、選手権のAperyからR150〜200ぐらい上がっている として、それなら)やねうら王のほうがAperyよりは強いのかな?」
平岡「Aperyのほうが強いでしょ。だって予選でAperyはやねうら王に勝ってますよ?」
やね「そやな…。一事が万事やしな…(平岡さんの、このポジティブシンキングを見習わないとな…)」


■ 2014/11/3 8:10 floodgateのtestとは何者か


floodgateで以前からレーティングが高すぎるソフトとしてこのソフトがどのソフトであるか話題になることが多かった「test」というソフトですが、AWAKEであることが判明。


そして、現在、floodgateの短期(2週間)レーティングでAWAKEが堂々の1位に君臨。


その実力はPonanzaと比肩することは間違いないでしょう。


■ 2014/11/3 8:13 AWAKEの棋譜からの学習マシン


4コアPC×2台 + 6コアPC1台の3台構成。MPI*2を使用。(このへんAperyと同じ) バッチ型学習(≒たぶんボナメソ)で3日程度で完了とのこと。


やね「学習、1からやって3日で終わるんですか。早いですねー。」
巨瀬「次元下げをしているので…」(分解された一つ一つの値は小さな値しかつないので少ないイテレーションで完了するの意味)


■ 2014/11/3 8:30 今日のやねうら王


やねうら王「やねうら王は変身する度にパワーが遥かに増す。その変身をあと2回も俺は残しているフッ、その意味が分かるかな?」


※ 「変身」とは、AWS(アマゾンのサーバー)を使って、棋譜からの学習をしているので、その評価関数パラメーターに差し替えること。


とは言うもののもうそろそろ(棋力の向上は)サチってくると思うけども…。


※ 「サチる」 = サチュレーション(飽和)するの意味。


■ 2014/11/3 8:30 毎日が席替えです


当日の対戦相手が席の真横にくるように毎日席替えが行われます。PCも新しい席に移動して自分の使っているPCの中身は変わらないので、開発者的には何も問題はないですが、ドワンゴのスタッフは大変そうです。


■ 2014/11/3 8:35 AWAKEのPR文は嘘か?!


やね「評価関数の共通点を括り出してR200上がったと書いてありますが、200だと計算合わないですよ。450ぐらい上がってるでしょ?」
巨瀬「Bonanzaのfv.binを差し替えて、(Bonanzaの)勝率を計測したらそれぐらいの向上だったので」
やね「ああ、それだと、いまのAWAKEの探索部を用いて学習させている以上、Bonanzaの探索部とはマッチしてないので200ぐらいしか上がってないように見えるだけで、いまのAWAKEの探索部に組み込んで比較した場合、もっと上がってるんじゃないですか」
巨瀬「そうかも知れません…」


■ 2014/11/3 8:35 やねうら王はどれだけ上がっているのか


やねうら未来学習メソッドは、NDFのやっている相対KPPの次元下げをさらに一般化したものをベースとする。


また学習は従来のバッチ型の学習であるが、ボナンザメソッドの実装(Bonanza6のlearn.c)にある致命的欠陥を修正している。これにより、他の相対KPPの次元下げをしたソフトよりはさらに棋力が向上していると私は考えている…が、本当にそれで上がっているのかはよくわからない。


何せ時間がなくて比較テスト等、一切していないからである。


■ 2014/11/3 9:40 強くなってるかテストとか一切してませんけど何か?


やね「評価関数バイナリをAWSから落としてきて…差し替える…っと」
平岡「それって本当に強くなってるんですか?」
やね「そんなテスト(自己対戦100回とか)、できるわけないじゃないっすか。これで強くなっていると信じてますよ!?」


■ 2014/11/3 10:10 やねうら王の昨日からの修正点


・置換表サイズ → 最大8GBしか確保しない問題は変更後のテストが大変なので修正せず
・持ち時間配分 → まあ、あまり序盤の時間を減らすと弱くなる気がするので、これも変更せず。200手オーバーにならないことを祈ります。
・秒読みの修正 → 秒読みの修正は、変更後の動作テストにいろんな条件があって、テストサーバーなしにはテストができないので千日手にならないことを祈って修正せず。
・定跡の修正 → 代わりの定跡を用意するのは大掛かりなので定跡オフのまま。


読者「要するに何も修正してないのか?」
やね「は、、はい…」


■ 2014/11/3 10:20 習甦の定跡


習甦は定跡を棋譜(プロの棋譜?)から序盤の32手目までを定跡とするらしいです。ただし悪い手もあるので実際にdepth = 12で探索してみて、その評価値を記録しておき、評価値が悪い手は採用しないとのこと。複数の指し手の候補がある場合、評価値のいいほうを採用するなどしているとのこと。(たぶん、複数の候補がある場合、評価値が一定のマージン内であれば乱数で選択?)


そうすると、指し手がそこそこばらけて、いろんな戦法を採用するので、前回、プロの先生には好評だったとのこと。


な、、なるほど。それなら速攻、実装できそうですね。参考になりました。


■ 2014/11/3 10:23 やねうら王 vs AWAKE


上位の順位のソフト開発者が振り駒をすることになっているので、私の振り駒。


相手のソフトはAWAKE。巨瀬さんは奨励会出身。そんな人相手に自分が振り駒なのは緊張しますが、まあ、指すのは私ではなく私の作ったソフトですしね…。


そして、私の振り駒の結果、やねうら王の先手となりました。


さっきAWSから落としてきたバイナリに差し替えたら、後手だと62銀を選んでしまうようだったので(一方的に守勢に立たされる)、ここで先手を拾えたのは大きいです。



■ 2014/11/3 10:30 AWSは高くない!?


平岡「AWS、高くないですよ。1ヶ月に3万ぐらいしか、かかりませんよ」
やね「あれ?そうなの?」
平岡「spot instanceとかreserved instance活用して…」
やね「活用してないです…」
平岡「複数の安いspot instance借りて、PC並列化して…」
やね「学習の並列化してないです..」
平岡「借りるOS、Linuxの場合なお安く」
やね「Windows借りてます…」


同じリージョンに借りればリージョン内のネットワーク転送には料金は発生しないので、安いinstanceを借りて学習のPCの並列化をするのが常套手段のようです。してません。Linux?なんですかそれ。


そんなわけで今日は少しでも勝ってAWSの料金を回収したいです。


■ 2014/11/3 10:35 N4Sは自己対戦ができない!?


杉田「(改良後の)自己対戦ってどれくらいやってます?」
横内「(ほとんど)やってないです」
杉田「え」
横内「1台でできないので…」


メモリを46GB程度使うので1PCで2つ思考エンジンを立ち上げるにはその2倍のメモリが必要だという…ことのようです…。


■ 2014/11/3 10:40 いまAperyの5位力が試されている


なぜか平岡さんがAperyが5位になると信じて疑っていない感じがするのだが、「やねうら王 > 習甦」(昨日の私の生放送での発言より)で、「Apery > やねうら王」(だと平岡さんは信じている)ので、つまり平岡さんの頭のなかでは


Apery >>>(越えられない壁)>>>習甦


ということなのかな…。私もそのポジティブさを見習いたいと思います!


■ 2014/11/3 10:45 やねうら王側の作戦?


やねうら王、先手が引けたので普通に戦えば善戦が期待できると思ってます。


たぶんAWAKEはPonanzaよりR100ぐらい強いと思うのですが、Ponanzaとやねうら王はそんなに差はないと思うので、AWAKEにも3,4割ぐらいは勝てると思うんですが…。


■ 2014/11/3 10:50 コンピューター将棋ソフトの棋力上昇バブル


平岡「ここにきて1年間のソフトの棋力上昇バブルが来てますねー」
やね「この調子だと来年はどのソフトも飛車一枚ぐらい上がるんじゃないですか?」
平岡「飛車一枚というとどれくらいのレーティング?」
やね「R600〜1000ぐらい」
平岡「上がりますかねー」
巨瀬「600はきついかな…上がってもせいぜい400ぐらいじゃ…」
平岡「400はいけるんだ!?」


■ 2014/11/3 11:56 AWAKEの読み筋に千日手


AWAKE側、若干不利だと見たのか、AWAKEの読み筋に千日手に持ち込む手順が..。


■ 2014/11/3 12:10 AWAKEが千日手に持ち込みます


40手目AWAKEの65銀は千日手狙い。やねうら王は自分がやや有利と見ているのでこれを打開する手順を必死に読んでいますが、マイナスになる変化を見つけてしまうと、打開せずに千日手を選んでしまう可能性があります。いま、そのギリギリの局面。評価値は8〜50あたりで若干プラスと読んでいますが..


やねうら王は43手目、角で銀を食いちぎって手をつなげる道を選びました!これで千日手は回避されました。私としては一安心。


AWAKEはこの千日手の打開は無理と見て、やや自分が有利だと見ているそうです。さて、この勝負、どちらの主張が正しいのでしょうか…!?


■ 2014/11/3 12:15 持ち時間が逆転しました


やねうら王側、定跡をオフにしていたため15分ほど序盤でロスしましたが、AWAKEの指し手がponderで当たり続けたため、残り持ち時間が逆転しました。


やねうら王 残り持ち時間 1:39:04
AWAKE 残り持ち時間 1:16:23 考慮中


■ 2014/11/3 12:30 つづき


現在、57手目。やねうら王は互角と見ていて、AWAKEは自分がやや有利と見ているようです。


やねうら王側はponderが当たり続けて、思考時間的にだいぶ得しました。形勢はともかく、これはとても幸運でした。


やねうら王は60手目〜120手目あたりの思考時間を(他のソフトより)少し多めに設定しているので、このへんからねじりあいになるなら、持ち時間がたくさんあるのが生きるかも知れません。


やねうら王 残り持ち時間 1:33:31(序盤で15分ロスしたにも関わらず)
AWAKE 残り持ち時間 1:08:41


■ 2014/11/3 12:45 やねうら王やや不利


88手目。やねうら王側の評価値(自分から見て) -300ぐらい。AWAKE側の評価値(自分から見て) + 500。AWAKEはseldepth(探索時の選択読み深さ) = 50手。やねうら王は42手ぐらい。こういう局面ではseldepthが深い設計になっているほうが、斬り合い後の形勢が正しく判定できることが多いみたいですね。うーん、そうか…。


■ 2014/11/3 13:00 やねうら王側のponder


やねうら王側のponderが当たり続けます。思考時間的にはすごく得をし続けています。じっくり考えれているので、いきなり形勢を大きく損ねることはないのかも知れません。不利ながらも、これ以上差をつけられないようにぴったりついていっています。


ponderが当たり続ける局面 = 読みが一致する局面 = 一直線の変化 = seldepthが大きくなるような探索の設計にしているほうが得な局面


ということでponderが当たり続けるやねうら王の得と、AWAKEのseldepthが当たり続ける得とがあって、この展開はどちらにも得があります。


■ 2014/11/3 13:30 やねうら王負けました


AWAKE側が次の一手問題集のような手を連敗して鮮やかに寄せ。102手目で2分46秒の考慮時間でAWAKEが読みきりました。mate 63。どう応じても63手以内に詰むということです。すごすぎ。


AWAKEはこのあと決勝でPonanzaと当たります。ここでPonanzaを倒せば最強の名を欲しいままにできます。AWAKEの優勝に期待してます!


■ 2014/11/3 13:50 AWAKEは受け棋風か?


やね「AWAKEって棋風的に受けが好きですよね」
巨瀬「floodgateだとPonanzaとかが攻め好きなので結果的に受け将棋になるだけで、受けが好きというわけでもないです」
やね「そうなんですか。攻め棋風と受け棋風とでは探索パラメーター調整の仕方が違ってきますよね?」
巨瀬「そうですね。受け棋風で危険な枝刈りをやりすぎてしまうと、見落しが発生しやすくなるので…(受けでの見落しは頓死につながるので)」
やね「なるほど。そういう意味ではPonanzaは攻め向きに探索パラメーターを調整してるんですかね」
巨瀬「そうでしょうね」


■ 2014/11/3 13:52 AWAKEの寄せがおかしい件


AWAKE vs やねうら王戦の、最後の寄せ、114手目、直前の手が王手になっていないので同玉と応じる必要はないのですが、ここを同玉と応じているのは、勝ちを読み切った時点での置換表の指し手を信じているからなのだそうです。


やね「それ、置換表のエントリー、ハッシュ衝突で破損している可能性が極めて低い可能性ながらあって、危険だから読み直したほうがいいですよ。」
巨瀬「そうですか…」


■ 2014/11/3 14:30 やねうら王 vs Selene 3位決定戦


私の振り駒の結果、Seleneの先手に決まりました。やねうら王のほうは、後手で自ら考えさせると変な手を指しやすいので、定跡を使おうかと考え中ですが、定跡を使う場合、76歩に対しては62銀と指しやすく、一方的に守勢に立たされる変化になりやすいようです。26歩としてくれれでよくある形になりやすいのですが…それでもなかなか互角の局面にもなりにくく…。


いまSeleneの過去の棋譜を確認しながら、定跡をオンにするのが得なのかどうかを考え中。


→ 定跡をオンにすることに決めました。


この選択が吉と出るか凶と出るか…。


■ 2014/11/3 14:40 Ponanza vs AWAKE 決勝


振り駒の結果、AWAKEの先手。本局、AWAKEの攻め将棋が初めて見れるかも知れませんね。


さきほどのやねうら王戦のときに書くのを忘れていましたが、巨瀬さんは、AWAKEの後手は乱戦になりやすい定跡を手で入れているそうです。


※ 乱戦にしたほうが後手という手番の損がぼけやすいので、という意味。


やねうら王は横歩を取らなかったため、乱戦にはならなかったようですが。


さて、AWAKEは先手はどんな定跡が入っているのでしょうか。対局を見守りましょう。


■ 2014/11/3 15:15 やねうら王 vs Selene戦つづき


やねうら王側の定跡で矢倉模様に。互角ぐらいに進行して一安心。Seleneの指し手がやねうら王のponderで当たり続け、やねうら王の消費時間5分に対してSelene25分以上の消費。


手数もそこそこ伸びそうなので、この進行ならやねうら王側、後手番の損ぐらいは取り戻せそう。


■ 2014/11/3 16:55 やねうら王優勢


現在80手目。やねうら王、かなり優勢。


ただし、やねうら王は攻めを切らせて安全勝ちを狙っているようなのだが、入玉も見えていて、下手すると入玉を目指して256手に達する恐れが出てた。


あと、手数が伸びてきたので消費時間的な部分でも切れ負けになる可能性が。また、相入玉になって、CSAルールによる宣言勝ちになるかも知れないが、そのへんの動作チェックあまりしてない&本対局の設定をCSAルールにしてたか覚えてない。(やねうら王は24点法・27点法・トライルールを設定で切り替えることができる)


やねうら王の作者的には、この状況、何も楽観できない。


■ 2014/11/3 17:16 やねうら王の寄せが怖すぎる


102手目。安全な簡単な勝ちがありそうだが…。


評価値上はやねうら王+1900なのだが玉を上空に逃す変化。これ、寄ってるのかなぁ。入玉される対策してないんだよな..。(前してたけど、今回評価関数を変えたときにやめちゃった)


駒をぼろぼろ取れるだけにやねうら王はえらい変化に飛び込んでしまった予感。


Seleneの評価、マイナスながら少し点数が戻ってきたらしい。なにこれ、やばい..


このまま256手にいく可能性、相入玉の可能性、CSA宣言ルールの説定ミスで負ける可能性、時間切れ負けの可能性、いろいろ見えてきた。


124手目、やねうら王、本局はじめての5分以上の大長考。ど、、どうしたのだ…。


■ 2014/11/3 17:45 やねうら王勝ちました


危うく入玉させるところでしたが、やねうら王、なんとか寄せ切ることができました。Seleneに勝って、やねうら王3位確定。


応援していただいた皆さん、ありがとうございました!!


■ 2014/11/3 17:55 AWAKE vs Ponanza戦


AWAKEがPonanzaを制して優勝!
AWAKEの巨瀬さん、おめでとうございます。

やねうら王 対局 実況用スレッドその2


■ 2014/11/02 8:31 無料飲み物きぼんぬ


さあ、今日もお腹を空かせたハイエナどものお出ましだ!


訳:私は無料の飲み物があると聞いて昨日から水分を摂っていないので、早めに水分補給をしないと脱水症状になって、また倒れます。


※ ちなみに今日は無料朝食はないのだそうです。


■ 2014/11/02 8:35 Calamityはそんなに強くない!?


昨日、私がmtmtさんに今回10位までに入るソフトはBonanzaに圧倒的に勝ち越すでしょう*1と話していたことを受けて。


かず(Calamityの作者)「CalamityはBonanzaにはそんなに勝たないと思います」
やね「あれ?そうなの?どれくらい勝つの?」
かず「Bonanzaとはやってないので詳しいことはわからないですが…」


だそうです。


そんなわけで本件については謹んで訂正させていただきます。


■ 2014/11/2 8:45 fv.binの追加学習はしていないです


「fv.binから追加学習したものであるならボナンザライブラリの申請が必要」という話があるので、書いておきますが、まず、やねうら王2014(今年の5月のバージョン)はBonanzaのfv.binからの追加学習ではないです。


KPPの駒番号を整理したときに、以前の形式から変換するプログラムを書くのが面倒だったので、まあいっかーと棋譜からの学習を最初からやったためです。


本大会、別にボナンザライブラリに対して制限があるわけではないので、使っていても事前申請していれば問題ないかとは思いますが、上の理由によりライブラリ申請はしていません。


■ 2014/11/2 8:50 やねうら王の修正作業


今日・明日は秒読みルールではないので、秒読みの修正はしません。
置換表が8GBまでしか確保できない問題は、いろいろ絡むので十分なランニングができない環境だとこの修正は怖いので、この修正もしません。8GB確保してうまく動作するかどうかはしばらくランニングしてみます。(昨日は4GBの確保で動かしていました)


ちなみに置換表使用率は30秒で8GBの20%程度使用します。2,3分考える場合、相当置換表のエントリーが衝突することになりますが、それによってどれくらい弱くなるのかはデータがないのでよくわかりません。そこまで影響しないものだと思っていますが…。


定跡は今日もオフで戦います。昨日、習甦と激指には定跡なしで勝っているので、どちらかと対戦するなら、昨日と同じく定跡なしのほうが同じ進行になる意味もあって、そこまでのマイナスではないと思います。


■ 2014/11/2 9:20 朝食ありました!


平岡「今日は朝食ないって本当ですか?」
やね「さっき、ドワンゴの人に聞いたら、そう言ってはりましたけど?」
平岡「ドワンゴからのメールには飲み物・朝食・昼食は用意してありますって書いてありませんでしたっけ?」
やね「そうですよね…。じゃあ、私が言ってきましょうか?」
平岡「お願いできますか?」
やね「はい、平岡が朝食がないぞ!と発狂してて、堪忍袋の緒が切れそうだと言ってると伝えてきますが?」
平岡「え。それはちょっと待って」


などと馬鹿なやり取りをしてると朝食が来てました!


ありがとう、ドワンゴ。今日もただ飯に群がるハイエナ乞食どもお腹を空かせた開発者さんたちは餓死せずに済むよ…。


■ 2014/11/2 10:05 先後は振り駒で


今日は先後は振り駒(開発者の?)で決めるそうです。よくわかりません。


■ 2014/11/2 10:10 インターネットきぼんぬ


対局中はインターネットはできません。また、対局中以外でも朝の放送開始1時間ぐらい前まで以降はインターネットできないです。申し出れば、特別にインターネットできるように計らってもらえるようですが、ネットワークの設定切り替えなどいろいろ手間がかかるようなのであまり気軽にお願いするのもためらわれます。


私は開発環境をノーパソには入れてないので昨日は、自分のiPhoneテザリング+Splashtop経由で家のPCでプログラムを修正 → Dropbox or GoogleDrive経由で自分のノーパソに転送 → 自前のUSBメモリで電王トーナメントのPCに転送


という手順でやっていました。すこぶる手間がかかります。来年以降、初めて参加される方は開発環境をノーパソに入れて持って行ったほうがよろしいです。


追記) 会場で、無線LANは使える状態になっていました。対局設定表として現地でもらった紙に書いてありました。し、、しらなかった…。


■ 2014/11/2 10:20 千日手ルール


実行ファイルを差し替えました。千日手局面になったときは、予選ルール(15分+秒読み10秒)で指しなおしとなるみたいなんですが、そうなったらお終いです( ; ; ) 千日手ならないで…。


■ 2014/11/2 10:54 もうすぐ開始


やねうら王はシード枠なので2戦目からです。持ち時間2時間なので双方2時間使い切ると4時間の対局となります。ということは、最大で15時までかかることになります。やねうら王はそれまで暇です。


■ 2014/11/2 10:56 Seleneの強さをPonaX基準で言うと?


Selene側、PonaX(≒去年の電王トーナメントPonanza)に対して勝率4割程度だそうです。


■ 2014/11/2 11:00 やねうら王の強さをPonaX基準で言うと?


昨日のやねうら王は一応PonaXにはわずかに勝ち越します。(昨日対戦させておいた結果を見る限りは)


また、今日のやねうら王は昨日のやねうら王より強い…と信じてます!


■ 2014/11/2 14:50 激指敗退


激指が習甦に負けてまさかの本戦1回戦敗退。習甦は、評価関数のパラメーターを前日と差し替えたのだそうです。それが効いたのでしょうか。


実力的には激指のほうがかなり上だったはずで、この結果は意外です。


■ 2014/11/2 14:55 やねうら王 vs 習甦


やねうら王は習甦と当たることになりました。私が振り駒したところ、やねうら王が後手になりました。やねうら王の後手は糞戦法を選んでしまいがちで、立ち上がりで不利になることが多いので、これは辛いです。


やねうら王、中終盤はそこそこ強いと思うんですが、序盤が本当に糞なんですよね…。習甦が咎めようとして無理攻めしてくれるといいのですが…。


なお、置換表は8GBモードでいきます。置換表が小さいのは棋力にそこまで影響しないと私は考えています。


例によって定跡はオフです。


あと千日手になったら、15分+10秒の秒読み条件での再戦となるのでこれもやねうら王の終わりパターンです。


そのへんを踏まえて、対局をご覧いただけると…。


■ 2014/11/2 16:33 習甦が大長考


やねうら王、定跡をオフにしていたが、思考時間的にはそれほど損しなかったのでラッキーな展開。しかし、やねうら王、変な序盤で守勢に立たされる。


そして習甦が41手目で10分33秒の大長考。やねうら王側、ponder中にハッシュ使用率98%。だから置換表サイズはもっと大きくしておけと…。


これはいろいろやばいかも知れない。


■ 2014/11/2 17:06 つづき


やねうら王側、居玉の習甦がどこかで69玉と寄る手ばかりを読んでいますが、習甦が一向にその手を指さないため、読み筋が合わず、読み抜け状態となっています。


こういう、読み筋が合わなくて読み抜けになるパターンはまずいです、、。評価値的には双方のソフトがほぼ互角と見ているようですが…。


■ 2014/11/2 18:05 つづき


習甦が寄せで日和ったので逆転模様。やねうら王優勢かつ、時間をたっぷり残しての終盤。これは勝ったか?


■ 2014/11/2 18:35 つづき


やねうら王、大優勢なのに手駒が少なく、手数がかかりそう。切れ負けルールなので、これ、下手すると…。


■ 2014/11/2 19:10 勝ちました


やねうら王が256手引き分けになってしまうか、そして残り時間を使い切ってしまうか(やねうら王は256手までに時間切れにならないような調整はしていないため)など、ハラハラする展開でしたが、習甦が指す手が少なくなってきて自爆しはじめたため、やねうら王からの寄せが発生し、どうにか寄せ切れました。


これでやねうら王の電王戦Final進出が確定!!


昨日と今日で寿命が10年は縮んだよ…。明日も今日より強くなったやねうら王をお見せできるように頑張ります(AWSのサーバーが)


そして、応援してくださってる皆さん、ありがとうございます。

やねうら王 対局 実況用スレッドその1


■ 2014/11/01 9:40 朝食きぼんぬ


Aperyの平岡さんが、朝食が出るらしいので食べずに出発とかツイートしてたのを見て、ああ、ドワンゴからのメールにそんなこと書いてあったなーと思って、私も食べずに出発したんですけど、何の手違いか、ドリンクはあるものの朝食はありませんでした。同じ考えで会場に臨んだ乞食ども開発者の皆さんがお腹をすかせておられます。


■ 2014/11/01 9:45 やねうら王セットアップ


やねうら王の最新の評価関数バイナリをAWSから持ってきました
イテレーションを繰り返した結果、指し手一致率はじわじわ上がっているようです。


io_log.txt(62): << Prediction(%) = 41.6054, 61.9203, 72.6732, 79.4686, 84.0842, 87.3918, 89.838, 91.6833,
io_log.txt(1755): << Prediction(%) = 41.9246, 62.4112, 73.2154, 80.0171, 84.6325, 87.9142, 90.3201, 92.1287,
io_log.txt(3448): << Prediction(%) = 42.1614, 62.7542, 73.6011, 80.4009, 85.0059, 88.2706, 90.6613, 92.4509,
io_log.txt(5141): << Prediction(%) = 42.3413, 63.0117, 73.8808, 80.6795, 85.2874, 88.5317, 90.8986, 92.6651,
io_log.txt(6834): << Prediction(%) = 42.4897, 63.2272, 74.0991, 80.915, 85.5045, 88.7343, 91.0797, 92.8262,
io_log.txt(8527): << Prediction(%) = 42.6249, 63.3802, 74.3008, 81.1083, 85.7, 88.916, 91.2505, 92.9872,
io_log.txt(10220): << Prediction(%) = 42.7127, 63.5457, 74.4652, 81.2769, 85.8503, 89.0635, 91.3745, 93.1004,
io_log.txt(11913): << Prediction(%) = 42.8187, 63.692, 74.6055, 81.411, 85.975, 89.1824, 91.4833, 93.207,
io_log.txt(13606): << Prediction(%) = 42.9036, 63.7816, 74.7375, 81.5363, 86.0963, 89.2827, 91.5799, 93.2872,
io_log.txt(15299): << Prediction(%) = 42.9647, 63.9085, 74.8365, 81.6498, 86.1959, 89.3866, 91.6706, 93.3685,
io_log.txt(16992): << Prediction(%) = 43.0124, 63.9985, 74.933, 81.7517, 86.2941, 89.4678, 91.7522, 93.4477,
io_log.txt(18685): << Prediction(%) = 43.082, 64.0796, 75.0252, 81.8341, 86.3674, 89.5391, 91.8177, 93.5024,


■ 2014/11/01 9:45 やねうら王、過学習っぽい?


指し手一致率43.082%。候補8つまで入れると棋譜の指し手と一致している率は93.5024%。高すぎます。どうも過学習っぽい気もしますが…。本当は対局して前のバージョンより勝率が上がっていることを確認すべきですが、その時間はありません。これで驚異的に強くなっていることに賭けるより他ないです。


■ 2014/11/01 9:50 なのは(Calamity)が止まる


なのはの作者が自己対戦中に止まるとか言ってます。「calamity」の名の通り、「大きな災難」がやってきたんでしょうか…。


Calamityは、Stockfishの探索部になっており、評価関数の学習も1からやっているので、Bonanza6には8割以上勝ち越す強さでしょうし、Calamityが優勝する確率も5%〜10%ぐらいあると思うんですよ。みんなノーマークみたいですが…。逆にこの大会のルールだとPonanzaが5位にさえ入れない確率が10%ぐらいあると私は思ってます。


今回はCalamityと同じ強さのレベルのソフトがたくさんあるので、今回の大会は荒れそうです。


■ 2014/11/01 10:25 朝食きました!


お腹をすかせた乞食ども開発者の皆さん、歓喜
いまから対局のテストが始まります。


■ 2014/11/01 10:30 対局テスト中..


やねうら王、置換表のメモリ確保に失敗してることに気づきました。4096MBより大きなメモリを指定すると確保に失敗します。Windows8がらみの問題なのかなぁ…。うーむ..64GBあるのに4GBしか使ってないという…。まあ、動くだけマシか。あとで原因を調べよう..


■ 2014/11/01 10:47 うわ!


やねうら王がおかしい手を指してます。明らかにバグってます!
将棋所がらみかWindows8がらみかわかりませんが…。


Windows7に変えるにはインストールDVD持ち込み(or 明日以降)とのことだそうです。あわわわわ。


→ 評価関数のテーブル自体は読み込めているようなので、まあ…このまま頑張りましょう…。


頑張れ、俺(のソフト)。負けるな俺(のソフト)。


■ 2014/11/01 11:05 バトンタッチ将棋


一昔前は将棋ソフトは序盤が初段、中盤が県大会優勝レベル、終盤がプロ級で、棋力の違う3人に次々とバトンタッチしていく、バトンタッチ将棋だと揶揄されたものですが、最近はソフトのほうも強くなってきて、序盤県大会優勝レベル、中盤プロ級、終盤宇宙人(人外の勝負!)となっているのではないかと思います。


■ 2014/11/01 11:10 今回はAWAKE・Aperyが優勝候補だと思います


AWAKEの作者に尋ねたところ、AWAKEはKPPを次元下げでKPA(A=利き)をやっているらしい。あー、その発想はなかったわ…。そうか…これには脱帽。今年AWAKAが優勝したら来年はみんな次元下げKPAをやるだろう…。これはビッグウェーブだ。


Aperyのほうは、KPPに手番を考慮するようにしたが強さは微妙だったので手番の考慮はやめたとのこと。


■ 2014/11/01 11:12 いきなりやねうら王 vs Ponanza!


いきなり今年のPonanzaの本気が見れるのか!!!なんぞこれ!!


■ 2014/11/01 11:16 つづき


やねうら王側は定跡手順(やねうら未来定跡)。後手の初手32銀。遠山五段いわく「人間なら、これで先手良しですが…」とのこと。ずいぶん変則的な形だがさすがにPonanzaはきちんと対応してくるのな…。これでPonanzaが対応してくるなら、予選抜けてPonanzaに当たったらこの定跡採用しないほうがいいな…。やねうら王側は予選抜けれるかどうかすら怪しいが。


そうこうしているうちに角・銀交換に。


遠山五段「やねうら王、序盤・中盤・終盤、スキだらけですねー」


やねうら王側はまだ形勢をほぼ互角と見ています。果たしてどうなのか…。これは過学習の結果なのか?


52手目でやねうら王の長考。やねうら王はまだほぼ互角と見てます。本当、なんなのか、この将棋…。Ponanzaも傷があってもしかして難しい形勢なのか?


やねうら王のほう、そろそろ時間を使い切りそう。10秒での秒読みのテストしてないんですが、今回は大丈夫なんでしょうか…。例によって、事前にその部分テストできなかったので、わからないんですよね…。


■ 2014/11/01 11:40 やねうら王、秒読みきちんと動いてます


9.7秒まで思考してます。秒読み切れ負けしないかヒヤヒヤします。


やねうら王は形勢をまだほぼ互角と見てます。しかし秒読みなので指し手が乱れてきそうです。


遠山五段「Ponanzaは+793。Ponanza優勢でしょう」


やねうら王側、評価値-410。やっと形勢が悪いことに気づいたみたいです。遅すぎ。


■ 2014/11/01 11:47 やねうら王側、(去年に続き)また時間切れ..


9.7秒まで読むと時間切れになってしまいました。
9.0秒に変更してみますが、これまた例によって駄目なような気が…。


対局のときにサーバー側から持ち時間設定が送られてくるので、こちらで秒読みの設定がUIから出来ないんですよね。プログラム書き換えて、強制的に9秒と解釈するように変えてしまうぐらいしか…。


サーバー側、ネットワーク遅延とか考慮して時間切れに対して0.数秒のマージン用意して欲しいです..。


とりあえず、今回駄目なら、コンパイルしなおして秒読み8秒設定に変更します。



■ 2014/11/01 12:10 ネットワークトラブル


ネットワークトラブル(サーバートラブル)があって、開始の合図が二回送られてきたようです。5分後にやりなおしということになりました。


やねうら王のほうは、"byoyomi"を8秒と強制解釈するように修正してコンパイルしなおした実行ファイルに差し替えました。動作テストのための時間が1分もなかったので、これでうまく動くかどうかはわかりませんが…。


これでうまく動くなら、このネットワークトラブルはやねうら王を差し替える時間が出来たので幸運でした。


またやねうら王のやねうら未来定跡はオフにしました。Ponanzaに通じなかったので萎えました…。ああいう変な局面にも初見で対応してくるPonanzaの対応力は、さすがですね。次は正攻法でいこうと思います。


■ 2014/11/01 12:25 全対局再スタート


サーバー側のトラブルのため全対局再スタートだそうです。


やねうら王、定跡を切ったので初手から考えてます。思考時間的にはめっちゃ損です。こりゃ下手するとCalamity相手に負けもあるでー。(笑いごとじゃない)


なんかメモリ確保に失敗しているっぽいので評価関数のファイルのいずれかが読み込めてない可能性も…。うーむ。Windows8めー。



■ 2014/11/01 12:28 思考時間5分無駄にした


Calamityは定跡手順のようで19手目まで1手1秒。やねうら王のほうだけ一方的に5分ほど損しました。これ負けたら、もう帰りたい…。もう今日は大惨事ですわ…。


■ 2014/11/01 12:53 Calamityに勝利


やねうら王側、飛車をタダ取りできたものの、形勢は互角ぐらいだったようです。(ソフト的には)


やねうら王側は時間的にも危なかったみたいですが、やねうら王なんとか勝ちました。やねうら王、秒読みで1手8秒(計測)で指せてたので修正は正しく出来ているようです。



定跡このあと使うかどうかは考え中..。


■ 2014/11/01 13:20 将棋所もWindows8悪くなかった


原因がわかった。将棋所もWindows8悪くなかった。悪いのは私だった。開発環境が16GBしかメモリ載ってないので、8GBまでしか置換表を確保するテストしてなかった。16GB確保できないのはコード上の問題で、以前この部分書いたときに高速化のために8GBを上限として設計したのだった…。つまり、私の意図通りだった。ここのコード書いたときには64GBもメモリがある環境で動かすことは想定してなかった。


そんなわけで置換表は8GBを指定するとちゃんと確保できた。さっき欲張って32GBを指定して確保に失敗して首を傾げてた。また評価関数はたぶんちゃんと読み込めている。たぶん…。


■ 2014/11/01 13:40 秒読み8秒で指す部分


0分10秒設定でやると、なんか初手で10数秒思考して時間切れになる。初手の処理おかしいな。突貫工事で修正したのでなんかおかしいのだろう。今回は15分10秒設定なので問題ないと思うが…さすがに自信なくなってきた。もうしんどい…。帰りたいでござる…。


余談ではあるが会場が辺鄙なところにあって、近くは安いホテルがカプセルホテルしかなかったんだよ。周りのいびきがうるさくて眠れないんだよ。初日から疲労マックスなんだよ。お腹痛いでござる。もう帰りたいでござる。


■ 2014/11/01 14:10 やっぱり原因わからんでござる…


開発環境(Windows7)では問題なく動いているのでWindows8のスレッドスケジューラーが関係しているような気はするが他のソフトはみんなきちんと動いている(?)ようなのでやっぱりそのへんの私の書き方が悪いんだろうな…。


うさぴょんの作者は、Windows8だと独自UIが動かなかったらしく、自前のWindows7をインストールしていた。いろいろ大変そうである。


タスクマネージャーで見たらAntimalware Service ExecutableとかMicrosoft Windows Search Indexerとか悪さしそうなプロセスが走っている。これ大丈夫なのかな…。


やねうら王側のponderが絡む秒読み計測のバグのような気もする。これで駄目だったら次はponderやめる。もうgdgdだよ。疲労マックスなのでもう寝たいよ…。ponder+秒読みのテストって普段やらない組み合わせなので何かバグがあったんだろうな。


■ 2014/11/01 14:12 やねうら王 vs labyrinthus


labyrinthusは筋違い角。しかも定跡に入っているようで、ここまでずっと1秒。やねうら王は例によって5分消費。5分消費は痛いが、それより、秒読み入って切れ負けバグで負けそう。


あれ…。labyrinthusずっと思考時間1秒だぞ…。ずっと1秒思考ってこと?なにこれ??


こういうソフトなの?


これ逆に、やねうら王、なんか切れ負けバグが出そう。相手が10秒以上思考してくれると切れ負けにならないが、相手が即指しだとさっきのバグが出るような気がするんだよな…。


これ負けたら棄権して帰ろうかな。もうしんどいよ…。


■ 2014/11/01 14:20 秒読み=0と解釈するように修正する


いまのうちに秒読み=0と解釈するように修正する。


■ 2014/11/01 14:30 labyrinthusに勝利


バグはおきなかった…が、やねうら王、思考時間8秒で停止するはずが9秒使ってるところあるぞ..。これ、持ち時間が切れて秒読みに入るときのバグか..。思考時間、秒読み5秒設定に変更する。


最後まで無事指せたらなんでもいいや…。


■ 2014/11/01 14:40 labyrinthusの作者に聞いてみた


labyrinthus、作者の方に尋ねたところ1秒思考は「負けるのわかっていたので時間攻め」をしたとのことでした。いやー、本当に危なかった。(バグって負ける的な意味で)


本当、やねうら王に時間攻めは、最高の作戦だしたぞ!


■ 2014/11/01 14:55 AWAKE vs Aperyは引き分け


AWAKEが必勝のまま256手ルールに引っかかり、引き分け。
Aperyの平岡さんは少しニヤけ顔。


個人的には、256手ルールと秒読みはなしにして、15分切れ負けにしてもらえたほうが時間がスケジュール通りに進行していいかと思うんですけどねー。


15時なのにまだ3回戦が終わったところです。(本日、残り5回戦あります)
4回戦は15:10から。


■ 2014/11/01 15:00 今日のやねうら王はもしかしてラッキーだったのか?


時間切れ負けのバグを初戦のPonanza(もともと実力負け)で起きたことで、そんなに痛くないマイナス。そのあとバグが出ずに2局拾えて、裏街道ルートに入ったのかも知れない。


このあとの試合次第では本戦進出、あるで〜。(秒読み、1手5秒にしてあるけどな…)
もう最後まで指せれば何でもええのや〜。


※ 眠さと疲労が限界に達したので精神的に壊れております。



■ 2014/11/01 15:00 きふわらべの人


きふわらべの人が左の席にいるんだよ!
聞いてみたところ、「きふわらべ、まだ将棋のルール通りに指せない」とのこと。


お、、おい、そんなソフト出てきていいのか!


この大会、ちゃんと事前に思考エンジン送って審査すべきじゃないか。
秒読みとかちゃんと守れないソフトはお呼びじゃねーんだよ!(俺のソフトのことだよ、俺の…なんかごめん…)


■ 2014/11/01 15:10 メカ女に入りたいです…


メカ女、なんか無料キャバクラみたくなっているのが非常に羨ましいので「メカ女に入って開発のお手伝いしたいです!」と言ってみたところ、「女子枠でいいならどうぞー」とのこと。女装しろってこと?え、、あ、、ごめん。やっぱいいです。


■ 2014/11/01 15:15 やねうら王 vs N4S


N4SはKKPPの学習をされているそうです。評価関数は15GB。三角配列を用いて節約しているものの学習には45GB(48GB搭載マシン or 64GB搭載マシン)積んでいないといけないそうで…。


とか言ってたら局面は相振り飛車、やねうら王側、穴熊からの猛攻。この攻めは決まってるのかな…?どうなの…。


N4Sのほう、NDFみたく相対にも次元下げすることと探索部を改良して、5月の選手権のバージョンからさらにR100ほど上がっているそうです。


■ 2014/11/01 15:34 やねうら王秒読みに


やや、やねうら王有利?の終盤ですが、やねうら王が秒読みになってしまいました。しかも5秒設定なので1手4秒しか使いません。これではさすがに逆転してしまうのでは…。


秒読みまわりのバグ、本当にもったいないなぁ…。


■ 2014/11/01 15:44 やねうら王、負けました


秒読み4秒 vs 持ち時間残り5分+9秒の違いが出て、終盤の大事なところで逆転したっぽいです…。N4S側の評価でもやねうら王有利となっていたとのこと。


まあ、仕方ないですな…。


■ 2014/11/01 15:55 今回の本戦出場の条件は?


たぶん今回の本戦出場の条件は4勝4敗で、あとはソルコフ勝負。となれば同じ4敗ならPonanzaとかN4Sのような強豪に負けているほうが有利!よしよし、いけるいける!


※ 疲労が限界値を超えたため、謎のポジティブ思考モードに突入。


■ 2014/11/01 16:00 激指 vs やねうら王


今度は激指だと…。やねうら王、強豪ばっかり当たるやないか!


まあ、今回、強豪ソフト多すぎるんだよな…。強豪ソフトとばっかり当たるのは当然だな。


それはそうと、定跡オフにして秒読み1手4秒だとR100ぐらいの差が発生するな。やねうら王にこれを跳ね返すほどの棋力があればいいのだが…。


■ 2014/11/01 16:06 Apery平岡さんのAWAKE評


私   「AWAKEのKPAって画期的じゃないですか?」
平岡さん「利きを評価しすぎるので、自陣に駒を集めるのを高い点数をつけるようになるので(さっきのApery vs AWAKE戦のように)良し悪しあるのでは?」
私   「ああ、受け棋風になっちゃう、みたいな?」
平岡さん「でもやってみる価値はあると思いますよ」


■ 2014/11/01 16:30 激指に勝ちました


激指 vs やねうら王、やねうら王勝ちました。定跡なし&秒読み1手4秒で…。
角換りで短手数の将棋になって秒読みまでに優勢になったのが良かったのかも知れません。


■ 2014/11/01 17:15 習甦 vs やねうら王


習甦の作者いわく、「去年からあんまり強くなってません。強くしたかったんですけどねー」とのこと。


去年の電王トーナメントでは、テストモードの将棋でやねうら王と当たったのですが、そのあとは当たっていないので初めての対決です。


いま、46手目。やねうら王側はずっと+100〜+200の点数がついていますが、ほぼ互角の将棋だと言えるでしょう。


■ 2014/11/01 17:20 習甦戦、やねうら王側の構想


26歩突いて、38銀として39に玉を囲う(28飛のまま)のは、やねうら王がよくやる戦法です。結構やれるようです。今後、こういうの流行るかも知れませんね。(プロの将棋で通じるのかはわかりませんが…)


いま63手目。形勢はほぼ互角と、やねうら王は見ているようです。


いま72手目。やねうら王、ややよし(+200〜+300)と見ていますが、時間が双方なくなりそうです。このねじり合いで秒読み4秒 vs 9秒は勘弁して欲しいものがありますが..


93手目。やねうら王優勢。習甦側、手がかりがないのでこれなら秒読みでも逆転はしにくそう…。


習甦 vs やねうら王、194手にてやねうら王の勝ち。


やねうら王、これで本戦進出ほぼ確定?



■ 2014/11/01 19:00 やねうら王 vs Selene


Seleneのほうは、探索部はStockfishを部分的に参考にしている程度。評価関数はKPP + 相対とのこと。Calamityあたりと同じぐらいの強さなのかな?


序盤でSelene側の模様が取りにくくなったのでやねうら王側、じわじわ良くなったようです。このへん、コンピューターには苦手なタイプの序盤なんでしょう…。


遠山五段「66歩と(先手の)玉のコビンが空いたのは(後手にとって)大きな手ですね。」


そんなわけでSeleneに勝利!


■ 2014/11/01 19:10 秒読み4秒の件


実は今回の対局条件、会場に来るまで知らなかったんだ。朝食なくて、お腹すいて死にそうだったので、そのことしか頭になかった。気づいたらこんな状態だった。「去年と持ち時間のルールとか同じなんだからわかるだろ」と言われそうだが、私はそんなこときちんと覚えている人間じゃないんだよ。(威張って言うこっちゃないが)

ホテルの予約をしたのは1ヶ月前で、今日の会場もどこか忘れてたので今日、「電王トーナメント 住所」でググってここにきた。それが私だ。


■ 2014/11/01 19:30 やねうら王 vs Apery


やねうら王、現在2位。(1回戦で遠山五段からボロクソ言われていたのに、ここに来て「やねうら王、強いですねー」と高評価に!)


Apery戦の局面はほぼ互角のまま斬り合い。現在82手


やねうら王のほうは弱いソフトに千日手で引き分けになるとソルコフで損するかと思い、千日手は無理にでも打開するように設定していた。Apery戦は逆に、千日手は打開は無理せず局面のスコアにゼロ点を付けるべきであった。(Aperyはその設定)


私はそんな設定は忘れていた。中盤で、千日手になる変化を自ら打開してしまった。これで負けたらその設定をし忘れたことが敗因と言えるだろう…。


■ 2014/11/01 20:05 Aperyに負けました


終盤、激戦。やねうら王の17玉とかヒヤっとさせる手。


平岡さん「Aperyの頓死ありえますね…」


と言っていたのですが、Aperyがうまく受けきってAperyが見事に予選2位に!こっちは4秒将棋なのにAperyに3分以上時間が残っていたのも大きいと思うが、しかし形勢はやねうら王が悪かったので、順当な結果だろう。


■ 2014/11/01 20:15 結果


やねうら王は予選3位通過!応援してくださった皆さん、ありがとうございます。


山岡「また明日来てください。明日には、AWSでさらにイテレーションを回した、さらに強いやねうら王を味あわせてあげますよ」

やねうら王開発実況用スレッド その3


■ 2014/10/31 6:30 人間の棋譜からのみの学習


一昨日に書いた、私の対局棋譜16局のみで学習させる件ですが、評価関数パラメーターの初期値はゼロです。やねうら王2014の評価値とは何も関係ありません。 全くのゼロからの学習です。


ついでに言うと「初段〜3段ぐらい」になったと書きました。24のRで言うとR1500〜2000ぐらいという意味ですが、もともと駒得だけの評価関数でもR1600〜R1800ぐらいあるので、別にさほど強くはなっていません。


人間の少ない対局棋譜から棋風を学習するという部分が面白く、また、少ない棋譜から学習できるということがエポックメイキングなのです。まあ、この価値は、わからない人にはわからないでしょうけども…。


人間の場合、子供が将棋を覚えてプロ棋士になるまでに何万局も並べるわけではありません。もっと少ない対局数から学習できます。それは、人間の汎化能力が優れているからで、その源泉がどこにあるのかを私は考えていました。


それはつまり次元下げなのです。


人間の場合、適切に次元を下げ、その下げたパラメーターを適切に学習するのです。IQ(知能指数)によって、その次元の下げ方および学習の仕方に差はあります。それゆえ頭のいい人間と悪い人間とが分かれます。


それはこの次元を脳が下げて学習するというプロセスに化学的な反応が関与していて、その化学的な反応を促進するための物質が適切に放出されるかという点には遺伝子的なものが関与しているからだと私は考えていますが、それは私の仮説に過ぎません。


ともかく、機械学習の場合、適切に次元を下げると人間に近い学習が出来るようになると簡単に言えばそういうことです。


■ 2014/10/31 7:00 評価関数パラメーターの初期値


「評価関数パラメーターの初期値をやねうら王2014のものから学習させたのでは、人間の棋譜を参考にしていないことにはならないのではないか」という意見があります。(特に開発者ではない人から)


開発者の人は、初期値をどうとろうが、ローカルミニマムに落ちない限りは数回イテレーションを回せば値がごっそり変わることは知っています。要するに適切ではない方法で学習させれば、学習のためのイテレーションを数回まわすだけで極端に弱くなります。初期値はあくまで初期値です。step 32なら1イテレーションで最大64も評価因子の値が変動します。10回まわすだけで最大640も変動します。元のものとは全然違ってきて当然です。


逆に適切な方法で学習させれば、学習のためのイテレーションを数回まわすだけで極端に強くなります。その顕著な例はBonanzaです。Bonanza6ではdepth = 1(≒ 読みの深さ = 2手)で3ヶ月ぐらい回してある程度の値に収束させたあと、最後の仕上げだけdepth = 2(≒ 読みの深さ = 3手)で回しています。*1


このdepth = 2で回すことで(これにより前のバージョンからの棋力が向上したのであれば)R150程度向上していることになるとYSSの山下さんが以前、YSSの掲示板に書いておられました。


何故depth = 2にするとそんなに強くなるのでしょうか。「depth = 1から2に増やせば強くなるのなら、depthを上げれば上げるほど強くなるのではないか」という考えも自然なものだと思いますが*2、depth = 3で私がやってみましたが、棋力はわずかに向上するものの、結局は誤差の範疇でした。


2008年ごろ、激指はオンライン学習を用いていて、もっと深いdepth(噂では8手読み)で学習させているという噂もありましたが、私はよく知りません。


現実的にはdepthを1増やすと学習に2,3倍の時間を要するようになるので、ここで2,3倍の時間を使うなら、棋譜の数を2,3倍にしたほうが棋力の伸びは顕著でしょう。


Ponanzaチームの下山さんは「root(探索開始局面)からあまり手数を進めると駒の配置などが全然違う局面になってしまい、その差を学習させるような(ボナメソのような)学習方式では、うまく学習できないのでは」と言っていました。


そのためか、現在ではNDF(たぶんPonanzaも)のように、大量の局面から学習させる方式が上位ソフトでは主流のようです。今後のことはわかりません。いまこのブログを読んでいる読者が新たな手法を開発しないとも限りません。


■ 2014/10/31 7:30 今回のやねうら王のPR文について


1) やねうら未来探索


・探索部は主にStockfishを参考にしている。
・GPSfishを参考にしていた部分(GPSチームの独自実装)は、全部やめた。
Bonanzaの1手詰めをコメントアウト。ただ、R70ぐらい下がるので代わりのものを簡単に用意した。まあ、元の1手詰めと棋力はそんなに変わらないと思う。
Bonanzaの3手詰め(?)、AWAKEは入れているようだが、やねうら王2014には元からそのコードを書いていない。これを入れて強くなるのかどうかは正直私にはわからない。Ponanzaの山本君いわく「(Bonanzaの3手詰めでやっているような遠方から王手して延々中合いして手数が延長されるような簡単な詰みは)どうせただで駒を取れる場合はそちらを優先的に読むのでその3手詰めはあまり意味ないのでは」とのことだが…。


2) やねうら未来定跡


これは今年の5月に将棋倶楽部24に参戦しているときに自己学習で作った定跡を用いる。


3) やねうら未来学習メソッド


これは、何度も書いてきた評価関数の次元下げ。KPPを128通りに分解する。ただ、学習のイテレーションに時間がかかりすぎるので今回は16に変更した。


また棋譜からの学習メソッドは独自のものになっている。ボナメソ(Bonanza6の実装)自体は、機械学習の方法としてはさほど優秀でもないので、なかったらないで特に困らないと私は考えている。


仮に保木さんがいなくて、ボナメソが発明されてなくても、機械学習の手法から似たことをする人は出てきていただろうし(NDFとかボナメソじゃないし…)、「ボナメソが引き起きしたコンピューター将棋のブレイクスルー」という認識自体が間違っていると私は考えている。


無論、保木さんの登場(およびBonanza6のソースコードの公開)で、コンピューター将棋の評価関数のパラメーターの学習に機械学習が使えることが実証され、それによりコンピューター将棋の進歩が加速したことには違いないのだが。



■ 2014/10/31 8:30 将棋所とBonadapter


将棋所、去年の開発時には切れ負けが実装されていなくて、また手数での終局もなかったので連続自己対戦をして勝率を調べようにも試合が終わらないことがあった。これでは将棋ソフトの思考エンジンの開発には使えない。


将棋所の開発者は思考エンジンの開発者ではないから、その必要性がわかってもらえないのかなとも思ったものだったが、その後の将棋所のバージョンアップによって、最新の将棋所ではその二つの機能が完璧実装されている。*3


同じく、去年の開発時には、Bonadapterも初手を返すときにBonanzaが長考することがあり(思考時間を守らないバグのようだった)、これまたBonanzaと連続対戦させるときに困ったものだったが、このバグも最新のBonadapterでは修正されている。*4


どちらも自分的には神アップデートだ。作者に感謝!!最高だ!!
思考エンジン開発者的にはこの2つのアップデートは凄く嬉しい。



■ 2014/10/31 9:00 よわコミュの姫


短い時間で自己対戦させていると飛車が横歩取って狭いところで詰まされて死んだりするのだが(横歩を取る段階では死ぬところまで読み切れてないのだろう)、さすがにアマチュア初段(R1500)レベルでもこれはない。仮にも人類未踏のR3400クラスの将棋ソフトだぞ?ヤムチャとピッコロぐらい違うんだぞ?ありえんだろ…。


こんな負け方をするところをニコ生で配信したら、「よっわwコミュ抜けるわw」と野次られるだろう。次の日には「よわコミュの姫」(やねうら王のイメージキャラクターは女の子なんです)*5という名前がネット中を駆け巡りかねない。



■ 2014/10/31 9:30 羽生さんと対戦したいだと?


なんか、Ponanzaの山本君が羽生善治名人と戦うためにクラウドファンディングで7億集める道を模索したい*6と書いている。


上位のソフトは事前貸出なしの条件であればとっくに羽生さんを超えていることは誰の目にも明らかである。超えているとは言ってもソフト側から見て勝率が50%は超えるだろうという程度の意味で、勝率が90%とか100%とかではないので試合としては成立すると思うが…。


しかし、事前貸出1年間だとか、そういう条件がつくならとんでもない茶番であり、羽生さんがゲーム攻略よろしく将棋ソフトの序盤のあら探しに終始することになる。羽生さんのような優れた頭脳を1年もそんな遊びに投入させるべきではない。それこそ社会的損失である。


とは言うものの、対局自体は旬のうちに見てみたいのでクラウドファンディングでお金集めるなら私も10万円ぐらいなら出すけどナー。でも羽生さんの負けるところは見たくないなぁ。個人的には、羽生さんに対局して欲しい気持ちと、対局せずにこのまま逃げ切って欲しい気持ちと半々だな…。


■ 2014/10/31 10:00 移動しまーす


いまから移動の準備をするので続きは明日!


■ 2014/10/31 13:50 広い概念を先に学習させるべき


保木さんが昨年、KPの学習をさせてからKPPの学習をさせると早く収束するということを学会誌に書いてたのだけど、もっと一般化して言えば、大きな、広い概念を先に学習させて、そのあと小さな、狭い、精緻化された概念を学習させるということだ。よく考えてみれば人間はそういう順序で学習する。例えば、数学の問題を解くときには、なるべく広い概念を適用して、それで解決できないときに、より細分化された、その問題固有の条件などを利用して解いていこうとする。


先手の「78金」の形にしても、まずこの形の部分的な良し悪しがあって、別にそんなに悪い形ではないというのがあるが、しかし、後手が振り飛車のときには、先手は78に金がいると舟囲いに囲えないので損だという、特殊化された概念がある。


まあ、そんな前説はどうでもいいのだけど、次元分解して相対KPPを学習させるときも、相対KPPのほうが絶対KPPより広い概念なので、まず相対KPP(あるいは、相対PP)を先に学習させるべきだった。そうすると早く収束する。同じく、さらにKPPを分解するときも、同じ理屈が成り立つ。また、広い概念ほど一回獲得したらあまり値を動かすべきではない。人間もそうだよな…。KPを学習させたあとKPPを学習させるときもKPを固定しておいてもいいぐらいだ(と私は思う)。


いまごろ気づいても今回は、もう手遅れだけどなー\(^o^)/


もしかして、これって機械学習の基本なの?ごめん、知らなかった。私が20年ぐらい前に概念の帰納的学習とかなんかを勉強してたときに、そんなことが書いてあった気がするんだが、いまにしてその意味するところがわかった。(できれば1ヶ月前にわかりたかった…)


■ 2014/10/31 14:00 お前ら、AWSにいくら使うんだよ!


AWS、電気代の10倍ぐらいする。高すぎる。棋譜からの学習ごときにAWSを使う奴は馬鹿だ。AWSをジャンジャン使っちゃうAperyの平岡さんも馬鹿だ。平岡さん、一体いくら使ってんだよ!あんた、大馬鹿だよ!!


…と思っていた時期が私にもありました…。いまでは自分も大馬鹿野郎の仲間入りです。\(^o^)/


追伸
来月のクレジットカードの請求書が怖いです。



■ 2014/10/31 18:00 人間の棋譜を参考にしない?


今回のやねうら王は人間の棋譜を参考にしないことをコンセプトに開発をしている。


「人間(プロ棋士)の棋譜がなくともコンピューター将棋は強いのだ」、ひいては「人間なんておらんでも良かったんやー」というのを証明したいと思っている。


そのために自己対戦棋譜のみを使い、その棋譜を使って学習し、強くして、その強くなったソフトでまた自己対戦をして、その棋譜で学習しというフィードバックによって強くしていこうと考えている…が、時間的な問題もあってそこまで出来ていない。


使っているのは自己対戦棋譜のみではあるが、その自己対戦のために使ったやねうら王の評価関数パラメーターは以前、プロ棋士棋譜を用いて学習させたものであるから、これだと混血みたいな状態である。純血ではない。繰り返していくうちに人間の棋譜の影響は薄らいでいくかも知れないが、これをもって「人間なんておらんでも良かったんやー」と主張するのはちょっと苦しい。


棋譜からの学習の初期値に以前の評価関数のパラメーターを使っているのも、以前の評価関数のパラメーターの学習自体にはプロ棋士棋譜を使っているわけだから、これも「人間なんておらんで良かったんやー」の趣旨にはそぐわない。


ただ、後者のほうは、評価関数の形が以前のもの(Bonanza相当)とは少し違うので値をそのまま使えているわけではないし、時間さえあれば(+電気代さえあれば)、ゼロから学習させても同じ棋力のものが出来るのは間違いないので、私はこの部分は特に問題としていない。


むしろ、学術的に問題なのは、本当にブートストラッピング*7可能かどうか。すなわち、ゼロからスタートしてある程度の棋力のソフトが出来るのかどうかだ。


ある程度の棋力のソフトがいったん出来てさえしまえば、そのソフトの自己対戦棋譜を使って評価関数パラメーターを学習させ、そのまた自己対戦棋譜で…というフィードバックループに入れる。(NDFはこれに近いことをしていたはず…)


ゼロからスタートする場合、終盤は自己対戦のときに深く読めば詰みが見える局面では正しい指し手を指せるから、終盤の指し手は正しい指し手を生成できる。


となれば、問題は終盤の指し手から中盤、ひいては序盤の指し手を学習できるかである。終盤の指し手や駒の位置関係から、いかにして中盤(序盤)の指し手を学ぶかという話に帰着する。


終盤の指し手から中盤の指し手を学習するためには、終盤に出てくる形をなるべく汎化して学習して、中盤に出てくる形に対応できるようになる必要がある。そのために、ここで次元下げの話に繋がるわけである。


終盤の指し手からうまくKPPの次元を下げて学習すれば中盤がうまく指せるようになる。中盤の指し手からうまくKPPの次元を下げて学習すれば序盤もそのうちうまく指せるようになる…というブートストラッピングの方法を私は考えたわけである。しかしまだそこまで実証できていない。そのへんは今後の目標であり、私の研究課題である。


■ 2014/10/31 18:10 PVの件など..


そういうチャレンジングな部分に私はとても惹かれるわけであるが、視聴者からは「学術的なことなんかどうでもいいしPR文もどうでもいいから、ともかく強い将棋ソフトで出てくれよ」と言う声がほとんどである。


今回の電王トーナメントのPVの撮影のときも、「強くするとか興味ないんです」「この方法でボナンザぐらいの強さになれば大成功なんですけど」と答えたものとか、綺麗にカットされていた。まあ、ドワンゴ的にはそれでは興ざめなんだろうな…。


それでまあ、PVを観た人の期待に応えるために私は急遽予定を変更してAWSを借りて棋譜からの学習をして強くしているという次第なのである。限られた時間内でやれることはすべてやったが、これで強くなってるかどうかは正直わからん…。

*1:http://d.hatena.ne.jp/LS3600/20091130

*2:「depthを上げて学習させたら?」と最初に言い出したのは弓月城太郎だったかと思いますが、彼はソフト開発者ではないのに、そういうなかなか鋭い意見もありました。

*3:http://www.geocities.jp/shogidokoro/download.html

*4:http://www.geocities.jp/shogidokoro/bonadapter.html

*5:http://yaneuraou.yaneu.com/

*6:http://ponanza.hatenadiary.jp/entry/2014/10/29/210812

*7:http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%83%88%E3%83%A9%E3%83%83%E3%83%97%E5%95%8F%E9%A1%8C