言うまでもなくNDF(NineDayFever)は、評価関数の学習においてとても優れたソフトであり、去年、一昨年のWCSC(世界コンピュータ将棋選手権)では大活躍を見せた。今年も選手権の3日目まで残れば、選手権でトータル9日戦った結果となるので、そのソフトの名の通り、9日間、フィーバーしたことになる。
そのNDFがfloodgateに戻ってきた。floodgateの状況は昔とは違う。大樹の枝やら、うさぴょん2やらがたくさん参戦している。NDFは16コアのXeonE5-2690を使うも、圧倒的に勝ち越すわけでもなく、(少しの対局のあと)R3294。どうもNDFが使っている定跡がまずく、それが敗勢を導いたようではあるが、ここ1年間の他のソフトの進化の速さには驚かざるをえない。
NDFはもともとPonanzaと同じ学習メソッドを用いている。というか、発明の順番で言うとNDFが先でPonanzaが後なのであるが。なら、もうちょっと強くても良さそうなものであるが、そうはならないのは何故なのか。Bonanzaベースでnps(探索速度)が出ていないことに関係しているのだろうか。(おそらくStockfish7ベースに比べると1/3程度しかnpsが出ていないと思われる。)
ともかくNDFに関しては定跡をきちんと整備し、探索部以外もStockfish風にするのが大切なのではないかと私は思うのだが、選手権までにもう時間もあまり残されていない。果たしてNDFは、ナインデー(9日間)、フィーバーを果たすことが出来るのだろうか。
追記 2016/4/14 15:00
NDFはすでにフィーバー済みだった模様。(コメント欄)
定跡となるとNDFマニアの千田五段とタッグ組めばもっと強くなるのでは
まあ定跡抜けた局面で一定時間かけて思考させて、評価値つけておけばこういう問題はそこそこ回避できると思いますよ。定跡は膨大にありますし、プロ棋士の方がやるほどのことでもないかなと。NDFは計算資源は潤沢に持っているようですしね。
NDF、3年前のWCSC23が初出場で決勝まで行ってますから、もう9日間フィーバー済みなので、修正された方が。
定跡については去年の段階ですでにいろいろ修正されてるはずですよ。去年もfloodgateであえて変な横歩取りの定跡ばかり指して負け続けたことありましたし。
Oh..。NDFはすでにフィーバー済みでしたか…。
じゃあ今年はフィーバーしなくてもいいのかな(^^;
一昨年と去年は二次予選シードだから今年決勝に進出して初めて9日間フィーバーでは?
おお!それだ!私が言いたかったのは、それだ!(適当)
NDF、評価関数バイナリが公開されれば1年後には優秀な定跡やStockfish7を取り入れたソフトが出てきそうですけど、さすがに現実味は薄いですかね。
計算機や電気代、電王トナメの賞金を考えると、100万円払っても欲しい開発者はいるような気がしますw
まあ、NDFの評価関数、大駒の利きとか入れてあって、それをきちんと差分計算できる形で再実装するのは結構手間なような気がしますけども。大駒の利き入れて強くなっているかも怪しいですし。
あとは、探索部に合った評価関数パラメーターでないときちんとそのポテンシャルを活かせないという問題もあって…。
最近の情勢はよく知りませんが、
定跡の学習で矛盾点を指摘して学習するとかいう妙な機構だったと思うので、変な棋譜がたくさんあるほど強くなるんじゃないですっけ。
どういう理論なのかはさっぱりですが。
定跡部に機械学習は使ってないのでは。
NDFの定跡については、wcsc25のアピール文書にBonanzaのBook.binをどう改善するかの記載がありました。
http://www.computer-shogi.org/wcsc25/appeal/NineDayFever/NDF-2015.txt
自己対戦結果の勝率から取捨選択をするこの方法は、やねさんが行った定跡を抜けたところの評価値によるものとは異なると思いますが、やねさんから見て、この方法の妥当性はどうなんでしょう?
せっかくNDFの評価関数があるなら評価値で取捨選択すればいいのにとは思いますが、なにかデメリットを感じていらっしゃるのか、実は計算機資源と金銭資源をそこに振り分けられるほどには潤沢でないのか。
(自己対戦結果の勝率なら、余計に資源は使わないでしょうし)
自己対戦の勝率で定跡を選択するのであれば、確かに追加のリソースは要らないですが、十分なデーターを取るためには数がかなり必要なので、普通に短い時間で探索して評価値をつけたほうが幾分マシなように感じますけどね。
bonanzaを知り尽くしているやね大先生に質問です。
bonanzaのlearn1.cを読むと定跡ファイルに登録されている局面も学習の対象みたいですが、例えばbonanzaで自己対戦させた棋譜をApery等で終局から逆順解析させて、悪手や疑問手の局面があったら正しい手を定跡に登録して、機械学習させる時に自己対戦棋譜を使用せずにfloodgate上位の棋譜のみと、悪手修正したbook.binを使用して追加学習した場合、悪手を指した局面をbook.binを教師に学習してくれるんでしょうか?
いまひとつ内容が理解できないんですけど、とりあえずBonanza6は、学習時に用いる棋譜は定跡ファイルとは別なのでは…。
あと、棋譜上に出現する悪手とかあまり気にしなくていいのではないかと思いますけども。どうせボナメソでは探索窓の範囲から離れた指し手(≒悪手)は学習に使いませんし。
bonanzaは学習時にrecord.csaの他にbook.binも必要になるんですけど何に使用しているんでしょうか?learn1.cの中に
/* input */
tree_t *ptree;
book_entry_t *pbook_entry;
FILE *pf_tmp;
record_t *precord;
unsigned int max_games, id;
int nworker;
とか、ほかに
static int
book_probe_learn( const tree_t * restrict ptree,
book_entry_t *pbook_entry,
int ply, unsigned int move )
とかあって、自分でも意味分がからず定跡の局面を学習の為に読み込んでいるんだなあと勝手に解釈していました。
あまりきちんと追いかけてないのですけど、bookに登録されている局面、除外しているだけでないですかね。初期局面付近は何度も出現するので過学習になりやすいので。
実際に条件をかえて比較実験してみたら、やね先生のおっしゃる通り、定跡局面が除外されているようでした。
くだらない質問に答えてくださり有り難うございました。
おお、そうでしたか。なるほど。
1つ疑問に思ったんですが、別のソフトや人間が指した悪手ならFV_WINDOWの範囲から外れてくれるかもしれないですが、自己対戦の棋譜だと自身がベストと判断して指した手なので、FV_WINDOWの範囲に残ってしまう可能性が高いと思うんですが…。
平岡さんが「自己対局の棋譜で学習するとめっちゃ弱くなる」とツイートされてたのも、それが原因かなあとか思ってました。
自己対戦棋譜の学習でそれを回避したいなら、NDFの学習メソッドを使うしかないのかなあと感じました。
> FV_WINDOWの範囲に残ってしまう可能性が高いと思うんですが…。
まあ、そうなんですけど、別にそれを教師にして良いと思いますよ。Ponanzaが80億局面作るときはもっと質が悪い棋譜を自己生成して、そこから学習させているので…。