やねうら王開発実況用スレッド その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