Hatena::ブログ(Diary)

やねうらお−ノーゲーム・ノーライフ このページをアンテナに追加 RSSフィード

GT-Rの買取ならここですわ。どこよりも高く買取ってもらえるはず。お勧め!GT-R 買取
電王戦出場記念! 書籍化されたで! 監修したで!(`ω´) 絶版なってしもた Kindle版で復活!! 記事書いたで!
解析魔法少女美咲ちゃん マジカル・オープン!

YaneuLabs / やねうら王公式 / やねうらおにメール / twitter / プロフィール

 | 

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

[] やねうら王開発実況用スレッド その3  やねうら王開発実況用スレッド その3を含むブックマーク  やねうら王開発実況用スレッド その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を借りて棋譜から学習をして強くしているという次第なのである。限られた時間内でやれることはすべてやったが、これで強くなってるかどうかは正直わからん…。

玄関口王玄関口王 2014/10/31 09:45 結局のところ、電王T版のやねうら王はレートいくつなんですかね?
後、羽生さんの対局は個人的には見てみたいです。

yaneuraoyaneurao 2014/10/31 09:59 ↑私にもレートがいくらかよくわかりません。200〜500局ぐらいさせないと勝率が判明しないのですが、その時間がないためです。ただ将棋倶楽部24に参戦していたとき(4コアPCでR3300前後)からは多少は上がっていると思います。仮に+100ぐらいとしましょう。あと今回はPCが8コアなので+200ぐらいあって、トータルではR3600相当だと思います。

しかし、これでも予選通過できるかどうか…。

お 2014/10/31 10:44 学習の件、ものすごく興味深いです。「学習をPC的力技ではなく、効率化できるか」という発想が魅力的です。とても汎用性の高い議論だと思いました。むちゃくちゃ基礎スペックの高い人(ミスしないとか思考が深い、早い)に将棋を覚えさせるのに100局でプロレベルというのなら夢があります(笑)人間にしてもそれなりの実戦経験や学習など考慮しなければならない変数があるわけで、その学習方はとても非効率ですものね・・・。あ・・・羽生さんのチェスも(ry

かず@なのはかず@なのは 2014/10/31 18:50 *1の内容と本文で1つずれているのでは?

ジャックジャック 2014/10/31 21:24 電王トーナメントの直前ってどんな気分なんですか?
山本さんはPonanzaが勝てるか心配で心臓割れそうらしいです。
やねうらさんも割れそうですか?

り 2014/11/01 07:54 > 何故depth = 2にするとそんなに強くなるのでしょうか。

将棋ソフトでdepth = 2で読むと、誤った評価値を出してしまう局面の割合が多いのでしょうね。
その価値が理解できない手はノイズにしかならないし、
ノイスが多いと学習効果も減るのでしょう。
depthが深すぎてもいまいちな理由は良くわかりませんが。

いよいよ電王戦ですね。頑張ってください!

Ta(ryTa(ry 2014/11/01 09:25 来年がその年と言ってしまった人を引っ張り出す訳ですね?

トラックバック - http://d.hatena.ne.jp/yaneurao/20141031
 | 

1900 | 01 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 06 | 08 | 10 | 11 | 12 |
2015 | 01 | 02 |


Microsoft MVP
Microsoft MVP Visual C# 2006.07-2011.06