タグ

ブックマーク / yaneuraou.yaneu.com (44)

  • magic bitboard論争に終止符を | やねうら王 公式サイト

    今回は、前回の続きとして、遠方駒(香角飛)の利き、いわゆる飛び利きの話をざっと書いていきます。 まず、前々回、私は(0のbitをsetするのは)「orにするかxorにするかは趣味の問題と言えるでしょう」と書いたのですが、唐突にxorのほうがベターだということを思い出しました。 バグが伝播しやすいように、できるだけ(orやandではなく)xorを使うようにしている(それがいいかどうかは知らない)。 — merom686 (@merom686) October 12, 2015 つまり、0だと想定しているbitをsetするのにorを使うと、これが何らかのバグで1だった場合も正しい結果になってしまうので、xorを使ってsetすべきだということですね。以前、どこかでそんな話を自分でしたと思うのですが、すっかり忘れていました。 さて、題。 まず、magic bitboadが登場するまでのbitbo

    agw
    agw 2017/11/22
  • 『Shivoray』(全自動雑巾絞り機)公開しました | やねうら王 公式サイト

    自分で自分好みの評価関数を作って遊んでみたいという人のために『Shivoray』(シボレー)という全自動雑巾絞り機を公開しました。 内容はただのバッチファイルとやねうら王の実行ファイル(OpenMP有効)とやねうら王の標準定跡ファイル + リゼロ評価関数epoch0(すべてのパラメーターがゼロである評価関数)のセットなんですけども。 やねうら王のGitHubのトップページの『Shivoray』のところからダウンロード出来るので興味のある人は、遊んでみてください。解凍するとreadme.txtがあるので詳しい内容はそちらをどうぞ。 このバッチファイルは1回限りの学習ですが、無限に回すには、元の評価関数フォルダに上書きで評価関数ファイルを書き出すように変更して、goto命令で永久ループになるようにしておけば良いかと。 :loop YaneuraOuV471learn.exe threads 8

    agw
    agw 2017/06/26
  • 従来手法に基づくプロの棋譜を用いない評価関数の学習 | やねうら王 公式サイト

    先日、elmo絞りを用いればプロの棋譜から学習をスタートさせなくともプロレベルの将棋ソフトになることを実証したが、実はelmo絞りを用いず、従来手法でも同じことが出来ることをここに手短に示す。 elmo式で、lambda = 0とした場合、プレイアウト時の勝敗しか考慮しない。このとき次式になる。 grad = winning_rate(eval) – teacher teacher : その局面からの期待勝率。その局面の手番側が最終的に勝っているなら1、負けているなら0である。 eval : その局面での評価値。正確に言うとqsearch(静止探索)をした値。 winning_rate : evalの値を勝率に変換する関数。シグモイド関数を用いている。 これをSGDやAdaGradなどの更新式で用いる勾配とする。強化学習の教科書なんかにもよく載っているオーソドックスな手法である。 やねうら

    agw
    agw 2017/06/20
  • 人間の棋譜を用いずに評価関数の学習に成功 | やねうら王 公式サイト

    今回、新たに評価関数をゼロベクトルから学習させた。elmo絞りを使うと意外と簡単にApery(WCSC26)相当の棋力を持つ評価関数にまで出来るようだ。追試できるように記事の前半に手順を記しておく。また、記事の後半には何回目のelmo絞りでどの程度の強さであったかも示す。 elmo絞りを知らない人のために簡単に説明すると、今回、将棋ソフトが人間の棋譜を用いずに勝率の高い形を強化学習でソフト自らが自動的に覚えたということである。今回、1回に生成している教師の数は5億局面。対局回数で言うと400万局程度であろうか。それだけの対局を終局までこなすことで、どういう駒の位置関係だと勝ちやすいのかを学習したということだ。 私は以前、elmo絞りを用いずにある程度の強さまでは到達出来たのだが、計算資源を湯水の如く消費するので途中で断念してしまった。今回はそのリベンジである。題して「Re : ゼロから始め

    agw
    agw 2017/06/13
  • elmoは何故2周目の雑巾を絞れないのか | やねうら王 公式サイト

    WCSC27のelmoのアピール文書より。 ★ 雑記 elmoの評価関数は1月3日以降全く強くなってないです。 (ある程度手応えがあったのでxeon4つ買ってみたのですが、結果に結びつかず) 今回はelmoは何故2周目の雑巾を絞れないのかについて簡単に説明する。elmoの学習式についての説明は前回記事をご覧ください。 (再掲) elmoの学習式 : dsig = (eval_winrate -t) + 0.5 * (eval_winrate – teacher_winrate); まず、右辺の左側の項を「勝敗項」、右側の項を「勝率項」と名付ける。(tanuki-チームではそう呼ばれているらしいので) 0.5のところはelmoのソースコード上はLAMBDAという変数名の定数になっている。上式は、「勝敗項」と「勝率項」がLAMBDAで内分されていなくて気持ち悪いのでまず内分する式に変形する。

    agw
    agw 2017/05/27
  • elmoがもたらしたオーパーツについて | やねうら王 公式サイト

    WCSC27で優勝したelmoがもたらしたのは、たった一行の革命だった。 交差エントロピーで勾配を求めるとき、普通は次式のようになる。 dsig = eval_winrate – teacher_winrate; eval_winrateは、浅い探索(qsearch)の評価値を勝率に変換する関数(シグモイド関数を用いている)で変換したもの。 teacher_winrateは、深い探索(search)の評価値を勝率に変換する関数で変換したもの。 交差エントロピーで勾配を求める場合、上式のように差をとるだけだ。この式の導出については、第4回電王トーナメントのときの白美神のPR文書にある。 elmo式の雑巾絞りはこの式を次のように改良した。 dsig = (eval_winrate -t) + 0.5 * (eval_winrate – teacher_winrate); tはこの局面の手番側が

    agw
    agw 2017/05/23
  • 30分でBonanzaの評価関数の要点を話します! | やねうら王 公式サイト

    自力で機械学習に取り組んでおられる方もそうでない方もこんにちは! 電王トーナメント直前対策ということで、いまから30分でBonanzaの評価関数の要点を話します。 私のほうも時間があまりないので書きなぐります。 まず、BonanzaではKKP/KPPのために駒に番号がついています。 BonanzaはC(C++ではなく)で書かれているので、この番号の格納されている型はenumですが、ここではこの型をBonaPieceと呼ぶことにします。 BonaPieceは先手の歩が0枚のとき0、先手の歩が1枚のとき1、…というように1500ほどあります。 f_hand_pawnに始まり、末尾はfe_endとなっています。 このfとかeとかfeとかは何でしょうか? これはfはfriend、eはenemyの略です。手番側、相手番側、みたいな意味です。 とは言え、evaluate関数は先手番から見た評価値を計算

    agw
    agw 2016/12/22
    コメント欄でHTについての分かりやすい解説がなされている。
  • 2045年から振り返った体で書く2016年のコンピューター将棋 | やねうら王 公式サイト

    ※ この記事は、コンピュータ将棋 Advent Calendar 2016の21日目の記事です。小説風にフィクションとして書きますので内容の正確性は一切保証しません。ちなみにタイトルの「振り返った体で書く」の「体」は「テイ」と読んでください。「からだ」ではありません。 『Paradise Lost』 人工知能が人間の知能に匹敵するレベルにまで到達した2045年現在においてもいまだ信じ難いことであるが、人工知能がまだ自我すら持たない段階において、将棋ソフトは人類の将棋指しのトップ集団と肩を並べていた。将棋のような比較的難度の高いレクリエーショナルゲームをいかにして当時の天才プログラマー達が攻略して行ったのかについてはもっと注目をされて然りだろう。 まあ、実際のところ、彼らが天才プログラマーなのかどうかは怪しいところであるが…。おっと、これはあとで消そう。稿は、まだ第一稿だ。気軽に書いていく

    agw
    agw 2016/12/22
  • 近年のコンピュータ将棋の急速な伸びの理由は? | やねうら王 公式サイト

    表題の件を当事者視点で。 「近年のコンピュータ将棋の急速な伸びの理由は?」という問いの模範解答が分からない。(1年で200ほど伸びるようになった理由。) そこそこ聞かれる質問なので、答えを用意しておきたいのだが・・・ — Shota Chida (@mizumon_) July 14, 2016 理由をたったひとつ挙げるとしたら、2016年時点での最新の回答は「誰でも機械学習が出来るようになった」ではないかと思います。 従来、将棋ソフトの機械学習というのはBonanzaメソッド(通称ボナメソ)一択でした。激指はオンライン学習風の何かをやっていたのですけど、Bonanzaの3駒関係ほどパラメーターの数が多いと(数百万パラメーター)、オンライン学習ではうまくいかないと信じられていたので、誰もやっていませんでした。 ボナメソについて書かれた保木さんの論文自体、当時の将棋ソフト開発者には難解で(見

  • ポストビッグデータとしての強化学習が将棋ソフトを変えた | やねうら王 公式サイト

    Bonanzaメソッドが公開されたとき(2006年〜)、棋譜さえあれば将棋ソフトは自動的に強くなるのではないかと人々は思った。 その考えは概ね正しかった。評価関数の表現の限界までは棋譜さえあれば、理論上は強くなる。 しかしその肝心の棋譜が圧倒的に足りていなかった。3駒関係(KPP)には1億次元以上のパラメーターがあったからだ。 1億の未知数を決定するためには、(N元一次連立方程式だとして)少なくとも1億個の方程式が必要だ。実際には、未知数の10〜100倍の方程式(≒教師局面)が必要だ。 オンラインで入手可能なプロの棋譜は3万棋譜ほどしかなかった。局面数で言っても300万局面程度。300万局面で1億個のパラメーターが調整できるのか?できない。全くと言っていいほど足りていない。 そして、我々は、全く足りていないことにもあまりに無自覚であった。当時は「入玉のときの評価値が少しおかしいな。入玉の棋

    agw
    agw 2016/11/07
  • 「浅い評価値を深い評価値に近づける学習法」の件 | やねうら王 公式サイト

    ボンクラーズの伊藤さんの記事が非常に興味深いです。 「浅い評価値を深い評価値に近づける学習法」誕生の背景 http://aleag.cocolog-nifty.com/blog/2016/10/post-00f4.html NDFのこの学習手法は、伊藤さんの発言がきっかけで誕生したということのようです。 まあ、この学習手法自体はTD-leafとかRootStrapとか呼ばれている手法で(亜種多数)、Seleneやひまわり、GA将なども、比較的昔から取り組んでいたと思います。私もTD-leaf自体は早い段階で知っていましたが、これが将棋でうまくいくアイデアだとは思わなかったというのもあります。 あと、当時のPC環境や、学習手法では、学習に非常に時間がかかるので、おいそれと試せなかったという背景もあります。 いずれにしましても、最初に試した人して成功させた人は偉いと思いますし、「成功するかどう

    agw
    agw 2016/10/07
  • ゲーム木探索で「延長」の対義語は? | やねうら王 公式サイト

    昨日の記事で「王手延長」と言う用語が出てきた。「延長(extension)」とは、残り探索深さに値を加算することだ。じゃあ減算することもあるのか? もちろん、ある。 この「extension」の対義語を「reduction」と言う。日語としては「縮小」とか「短縮」とかなのだと思うが、将棋ソフト開発者に「縮小はどれくらいやってますか?」とか聞いても間違いなく通じやしねぇ。闇のコンピューター将棋用語だ。 そこで開発者を相手にするときは「リダクション」と呼ぶことをお勧めする。 さて、このreductionとは、extensionの反対であるから、感触の悪い指し手などの残り探索深さを縮めることを言う。 感触の悪い指し手というのは、色々な定義が考えられるが、例えば、過去、その升にその駒を移動させても良いことがなかった(という統計に基づく)指し手である。 これをhistoryに基づくreductio

    agw
    agw 2016/10/02
  • 魔女より強くすると本当は強くならない?! | やねうら王 公式サイト

    やねうら王2016 Midは、魔女(Silent Majority)より強くしようと思っていたのですが、これがもしかするとよろしくないのでは?と思える状況になってきたので簡単に書いておきます。 コンピュータ将棋ソフトウェアの時間制御 http://woodyring.blog.so-net.ne.jp/2016-06-05 長い持ち時間になると、魔女はApery WCSC26に対して驚異的なほど勝ち越すというデータがあります。 1手1秒未満だと魔女側は負け越すのに、1手10秒だとかなり勝ち越すようです。その差、R250。恐ろしいですね。 ここで上の記事にちょっと補足しておきたいのですが、やねうら王の時間制御、指定された時間を100[ms]ほどオーバーすることがあるのですが、これは、やねうら王では、check_time()を呼び出す間隔を他のソフトより甘くしてあったのですが(呼び出すコストが

    魔女より強くすると本当は強くならない?! | やねうら王 公式サイト
    agw
    agw 2016/06/14
  • CODE VS 5.0がめちゃめちゃ面白いのだが | やねうら王 公式サイト

    さて、いよいよ始まったCODE VS 5.0。 今回の見どころなどを簡単にご紹介したいと思います。 CODE VS公式サイト https://codevs.jp/ 前回のCODE VS 4.0では、レビューするために軽い気持ちで参加した私ですが、あまり時間がとれず、バトル開始後にいかに綺麗に自分の視界を塗りつぶすかということだけで終わってしまいました。そのことは、以下の記事に詳しいです。 CODE VS 4.0 途中経過 その3 http://yaneuraou.yaneu.com/2015/01/31/code-vs-4-0-%E9%80%94%E4%B8%AD%E7%B5%8C%E9%81%8E-%E3%81%9D%E3%81%AE3/ そのときに打ち立てた理論が「直進最速理論イニシャルY」です。(戦進出者の間でもこの言葉が使われていました。) 実はそれを行なうプログラム部分だけで私

    agw
    agw 2016/03/23
  • CODEVS 5.0本戦用ソースコードの提出が終わりました | やねうら王 公式サイト

    CODEVS 5.0の戦用のソースコード提出期限が日の昼の12時でしたので提出しました。12時がすぎたので、たぶんCODEVS 5.0のプログラム的な詳細を書いてもいいと思うので、予選期間中には書けなかったことをいくつか書いておきたいと思います。 1ターンごとに半ば自動的に(ゲーム内の)マネーが増えるゲームがあったとします。そうするとこのマネーを評価関数に組み込むと評価値は自ずと1ターンごとにインフレしていきます。 こういうゲームにおいては、N手先同士の局面の評価値の比較はできますが、5手先の局面と10手先の局面との比較が成り立たなくなってしまいます。 CODEVS 5.0のゲームで言うと、相手が忍者ソウルを取るごとに自分のフィールドに犬が出現します。これがインフレ(デフレ?)要因であり、犬の数だけ評価値をマイナスするような評価関数ですと、1ターンごとに自然とマイナスになっていきます。

  • 連載やねうら王miniで遊ぼう!7日目 | やねうら王 公式サイト

    今回は、局面のhash値の計算について説明します。 局面に対応するhash値の取り出し 局面に対して、StateInfo::key()からhash値が得られる。 このhash値は、局面に対応する固有の値である。 しかし通例、hash値は64bitしかないので、異なる局面であっても、たまたま同じhash値になることがある。これをhash衝突と言う。 やねうら王miniにはこのhash値を128bitにしたり256bitにしたり出来る無駄機能があるが、その話は次回にしよう。 さて、このkeyを取り出してみよう。その局面固有の内容を格納しておくのはStateInfoであった。Positionクラスのstate()を呼び出すとStateInfoの参照が得られる。StateInfoのkey()を呼び出すとこのhash値が得られる。 実際にやってみよう。 void user_test(Position

  • ひようら王の強さの秘密 | やねうら王 公式サイト

    「ひようら王は何故駒得のみの評価関数の将棋ソフトとして世界最強なのですか?」 という話を今回はします。 普通、駒得のみの評価関数にすると、序盤では早々駒得になる変化は出てこないので探索の末端の局面での評価値は0になります。どこまで探索しても0。0と0とは比較しても大小関係はありませんので、局面の優劣がつけられません。 ゆえに、指し手が支離滅裂になるのは無理もありません。 ところが、駒得のみの評価関数なのに、ひようら王はR2400程度あります。(最新のPCで走らせた場合) これには一つだけカラクリがありました。 駒得やねうら王、持ち駒にその駒の価値の1/4を加算してるっぽい(超絶今更)。 — merom686 (@merom686) October 22, 2015 その通り!手駒のときだけ心持ち加点しておくのです。そうすると飛車先の歩など、どんどん歩を交換して手駒にしようとします。自分の駒

    agw
    agw 2015/10/23
  • 電王戦 第三局の感想 | やねうら王 公式サイト

    大阪戻ってきました!開発者サイドの感想として書きたいこと、書かなければならないことはたくさんありますが、取り急ぎ、開発者だから言えることを4つだけ書きます。 27歩は悪手ではない可能性 譜、27銀成とやねうら王が2筋を突破してそこでやねうら王の評価値がプラスに転じたと記者会見で私が言ったこともあってか、直前の先手の27歩が攻めを呼び込んだ悪手であったかのように言われています。(「27歩で攻めを呼び込んで何がしたかったんだ?」etc…) しかし、この時点ではやねうら王の評価値的には優勢ではなく、微差でした。 やねうら王は飛車を成ってもまだ形勢をほぼ互角と見ていました。 つまり、飛車を成らせたこと自体は悪くなく、74歩〜85桂の攻めが一つの勝負どころだったのかなと私は捉えています。そしてそのあとの49桂で、ここで急激にやねうら王の評価値が上がりました。やねうら王は49桂に代えて39銀打で難し

  • 電王戦第三局、実況用スレッド | やねうら王 公式サイト

    当日はこのブログは更新出来ないかと思いますが、休憩中はツイートぐらいなら可能だと思うので、以下に当日の実況用twitterアカウントを公開しておきます。 2015年電王戦、実況用twitterアカウント https://twitter.com/yaneuraou ※ アイコン画像は同じですが、いつも使っているアカウントとは異なるアカウントです。 あと、やねうら王応援ツイートをたくさん頂戴しているようです。ありがとうございます。 「将棋電王戦FINAL 第3局 稲葉陽七段 vs やねうら王」やねうら王応援ツイート等まとめ http://togetter.com/li/799575 当日の応援メッセージは記事のコメント欄にどうぞ。 豆腐メンタルなので批判メッセージは要りませんけども。(笑) プログではコメントは承認制となっていますが、いままでに一度でも承認されたコメントのメアドの人であれば

    agw
    agw 2015/03/27
  • 電王戦3局用のPVの撮影終わりました【後編その1】 | やねうら王 公式サイト

    前回の続きです。際どい質問が続きます。 — 棋士ばかりに注目が集まりますが、開発者をリスペクトしろ、みたいなのはありますか? 私「ニコニコ動画において開発者へのリスペクトが足りないのは佐藤映像のせいもあるでしょうに(笑)」 — すみません。(笑) 私「まあ、棋士に敬意を払うのであれば、もう少し開発者のほうにも敬意を払うべきだとは思いますね。」 — でも将棋ソフトの開発ってそんな年月かかってないじゃないですか。あちらは子供のころから将棋一筋ですよ? 私「いやいや。私とか、プログラミング歴37年ですよ?彼ら(今回の電王戦の出場棋士たち)が生まれる前からプログラムしているわけですよ?どっちが長いと思ってるんですか?」 — でも将棋文化自体は江戸時代からあるわけじゃないですか?400年の歴史があるのでは? 私「まあ、はい…(そんなことを言うならコンピュータサイエンスの歴史は2進数の誕生からだから、

    agw
    agw 2015/03/20