『Shivoray』(全自動雑巾絞り機)公開しました

自分で自分好みの評価関数を作って遊んでみたいという人のために『Shivoray』(シボレー)という全自動雑巾絞り機を公開しました。

内容はただのバッチファイルとやねうら王の実行ファイル(OpenMP有効)とやねうら王の標準定跡ファイル + リゼロ評価関数epoch0(すべてのパラメーターがゼロである評価関数)のセットなんですけども。

やねうら王のGitHubのトップページの『Shivoray』のところからダウンロード出来るので興味のある人は、遊んでみてください。解凍するとreadme.txtがあるので詳しい内容はそちらをどうぞ。

このバッチファイルは1回限りの学習ですが、無限に回すには、元の評価関数フォルダに上書きで評価関数ファイルを書き出すように変更して、goto命令で永久ループになるようにしておけば良いかと。

関連記事

棋風を覚える将棋ソフトが完成してた件


『Shivoray』(全自動雑巾絞り機)公開しました” への30件のコメント

  1. シボレー(やねv4.71)についてバグ?報告

    【使用バイナリ】
    YaneuraOu-2017-early-sse42-4.71(リネーム)

    【シボレー編集内容】
    YaneuraOuV471learn.exe threads 1 , hash 128 , bookmoves 70 , bookfile book.bin , BookDepthLimit 0 , ConsiderBookMoveCount True , gensfen random_move_maxply 0 random_move_count 0 depth 6 eval_limit 1500 loop 20000000

    私はbook.binの定跡を使用しているため、
    ConsiderBookMoveCount(定跡の指し手を採択率に比例させる)をTrueにしていますが教師局面生成後に
    getoptionでオプション設定の確認をするとfalseになっています。

    手打ちでConsiderBookMoveCount Trueとして、
    getoptionでオプション設定の確認をするとTrueと変更されています。

      • 小文字にしたら出来ました。
        (エンジン設定のオプションスペルをそのまま書いたのがダメだったのか)

        途中経過となりますが「教師局面生成時のランダムムーブについて」のコメントのようにver11まで終わって、
        Depth3=1億局面(一部再利用)×11回elmo絞り
        定跡込みでelmoにいくらか勝ちますね。

        実質Depth3=11億局面しか学習していないので、4コア8スレッドのPCだと2日でWCSC273位くらいのレートまでいけるみたいですね。

        ここからはDepth6でやってみますが、私のPCだと1億局面生成に3日かかるようなので報告は遅くなるかと。

        とりあえず今言えるのは、やね学習部はチートツール並みの威力があるので、Depth3とかで上手い使い方を練習してからDepth6で始めても遅く無いだろうと

        • > Depth3とかで上手い使い方を練習してからDepth6で

          はい、そうですね。depth 3から6にしてもプレイアウトの質ってそんなに上がらないですしね…。

          • USIプロトコルではsetoptionそこを設定するときは「trueまたはfalse」と規定されているので、ShogiGUIの思考エンジン設定の画面が無用の混乱を招いている気がしますね。ShogiGUIの掲示板に修正要望を書いておきました。(`・ω・´)b

          • あとbook.bin絡みのバグの修正と、それから、gensfenのときに、定跡関係のオプション設定が2017Earlyと全く同じ挙動になるように修正しときました。大改造になったので何かエンバグしてるかもです…。

          • elmo開発者と類似になるかもしれませんが、
            sse4.2verでも教師局面生成時に私の環境で1000万局面を超える辺りで生成速度があきらかに鈍化します。(約30%程度)
            6回やって6回共そうなりましたので報告しておきます。(エンジン停止することは無い)
            あと2スレッド以上で不安定になっていた現象はv4.72で直っていました。

          • あれ?そうなんですか…。だとしたらもしかするとLinux関係なくてSSE4.2絡みで生じるバグなのかも知れませんね。ご報告、ありがとうございます!

          • 私の手元でSSE4.2版で1000万局面生成してみましたが、遅くはならないようです。うーん。何かいじったときに直ってしまったのかな…。(^^ゞ

          • 私も初めて教師局面生成停止(sse4.2)を確認しました。

            【生成速度】
            0~1000万までは問題無い
            1000万~1500万で10%低下
            1500万~2000万で20%低下
            2000万~30%低下
            こんな感じでだんだん落ちてくるので、私は出来るだけ1000万までの生成やり直しで局面数を稼いでいます。

            【生成停止】
            まずエンジン停止ではなく、生成がそれ以上進まなくなる現象でした。
            バックアップから確認すると、
            容量9.6G辺りで挙動が変
            容量11G超え辺りで生成が進まなくなる現象の確認(局面数で言えば2億9千万程度です)ここから先を生成しようとすると、すぐ止まったり20万局面で止まったりと不安定になることを確認。

          • そうなんですか…。
            ・やねうら王の最新版で確認。
            ・メモリが逼迫しているということはない。
            という条件ですよね…。

            ちなみにそれは局面数に比例するのでしょうか?depth 3ではなく2や1でも同じような動作になりますか?

            であれば私のほうでも簡単に現象を再現できるかと思うのですが…。

          • depth3のときは特に生成が止まることは確認出来ていません。(やねv4.70の時代だったのでほぼ1スレッドでやってました)

            確認につかった教師局面(バックアップから複数確認)はすべてdepth6生成だと思います。
            やねv4.72sse4.2の2スレッドdepth6生成時に停止確認。
            メモリの空きは初めて停止したときは見てなくて、2回目のときは4G以上空いてました。

            学習まわしちゃったので、また夜に確認しておきます。

  2. bookフォルダの中身を空にすれば定跡ファイル必要なく、雑巾絞り出来るでしょうか?

    • 思考エンジン設定のオプション項目使えますので
      bookfile no_book
      とするのが本来のやり方ですけども。

      例)
      YaneuraOuV471learn.exe bookfile no_book , threads 8 , …

  3. いろいろ改良お疲れ様です。
    学習時に特徴的な現象が確認されたので報告と質問です。

    【現象報告】
    uuunuuun氏の評価関数R3400相当に、私の評価関数がR3600相当になったときの教師局面=1億局面を学習させた所、逆にR-30程度弱くなりました。

    【考えられる原因】
    私は最初から定跡を用いて学習を続けていたので、後半はピンポイントで修正したい箇所周辺の教師局面を定跡で生成し修正を行っていました。
    また、定跡選択手数を70手と長く設定していたため、uuunuuun氏の評価関数と性質が違いすぎて上手く学習出来なかったと考えています。

    【質問】
    まったく同じ教師局面をひと手間入れて違う結果が得られるのであれば、ひとつの実証が出来ると思うので質問させて下さい。
    おそらくパラメタが違いすぎて局面のつながりが無いことが原因だと思うので、
    ①uuunuuun氏のレート計測の棋譜を接着剤の要素として使用してみる。(浮かむ瀬以上でも26000局の400万局面相当がある)
    targetdirオプションで対応可能でしょうか?出来ればやり方を教えて下さい。
    ②シャッフルが必要だと思う。
    いままではデフォルトで1000万局面ごとにミニバッチサイズでシャッフル学習になっていたと思うので気にしていませんでしたが、この条件だと再シャッフルが必要だと思う。
    learn shuffle basedir BASE_DIR targetdir TARGET_DIR output_file_name OUTPUT_FILE_NAMEのコマンドでしょうか?
    generated_kifu.binの置く位置や、棋譜ファイルの置く位置は何処が適切なのでしょうか?
    (basedir BASE_DIR と targetdir TARGET_DIR と output_file_name OUTPUT_FILE_NAME とは省略できる。とあったので、単純にlearn shuffleとやるだけだと0バイトのshuffled_sfen.binしか生成されませんでした)

    • > ①uuunuuun氏のレート計測の棋譜を接着剤の要素として使用してみる。

      棋譜をやねうら王の標準定跡ファイル形式に変換してbookfileとしてそれを指定してやる感じですかね。

      > ②シャッフルが必要だと思う。
      > learn shuffle …

      それですね。

      > generated_kifu.binの置く位置や、棋譜ファイルの置く位置は何処が適切なのでしょうか?

      やねうら王の実行ファイルのあるフォルダから相対pathで書きます。basedirは指定しなくて良くて、targetdirは棋譜入れているフォルダがsfens/ だとしたら targetdir sfensと指定します。

      > 単純にlearn shuffleとやるだけだと

      1) 棋譜の入ったフォルダ丸ごとを指定する場合→targetdirを使う
      2) 棋譜ファイルを個別に指定する場合 → そのファイル名をすべて書く
      2)の場合、targetdirを省略できるだけで、この場合は棋譜ファイル名は書かないといけません。なので、
      learn shuffle learn_sfen.bin
      ならいけるような..。

      • だいたい原因が分かりました。
        最初から最後まで定跡を使用して学習したことが原因のようです。定跡を切って対局すると変なことに気が付きました。
        私のほうは定跡使用を前提に作成し、定跡がヒットしている進行は(その部分の評価関数がおかしくても)何も問題が無く、定跡が外れたパラメタは勝率の高いパラメタで学習されていたので、むしろ良い方向で出ています。
        これが少ない教師局面でレートが高く出ていた原因のようで、定跡を使用しなかった場合はものすごく変な動きをする場合があります。
        つまり、こんな評価関数から生成した教師局面を他の評価関数に使っても、ある程度到達したレートを持つ評価関数には悪影響しか無かったようです。
        だからと言って出来ませんでは芸が無いので何かいろいろ模索してみます。

        シャッフルのやり方を教えて下さってありがとうございます。
        ファイルネームも入れて試してたのですが「従来手法に基づくプロの棋譜を用いない評価関数の学習」で書かれていた名前がgenerated_kifu.binで、シボレーのバッチ生成の名前がgenerated_sfens.binと微妙に違うのを見落としていました。

        >棋譜をやねうら王の標準定跡ファイル形式に変換してbookfileとしてそれを指定してやる感じですかね。

        例えば、tanuki-さんの定跡ファイルはDepth24で評価値付きの定跡ですが、それを使って教師局面を生成すると学習対象になるみたいなイメージで合っていますか?

        • > それを使って教師局面を生成すると学習対象になるみたいなイメージで合っていますか?

          常識的には、定跡ファイルでは初手から連続して登録されているはずなので、教師局面の生成時にも定跡の指し手を辿ってある程度の局面までは進むはずではあります。ただし、途中で指定回数のランダムムーブが入るのでそのときに定跡の局面から離れることはかなりの確率であります。なので定跡の周辺の局面が全般的に開始局面(学習対象局面の一つ目)となるようなイメージで合ってるかと思います。詳しくは、棋風を覚える将棋ソフトが完成してた件を…。

          • そういうことですか。今私はランダムムーブ無しで4つの定跡を使って教師局面を生成しています。
            ConsiderBookMoveCountの入り切りによって、将棋ソフトが間違いやすい局面を任意で生成して悪手率を調整しています。
            分かったことは、こういった条件で作成した教師局面はシャッフル後にepoch0で学習すると、シャッフルによってエントロピーロスが結構違うことを発見したので、ロスが大きい評価関数と小さい評価関数のどっちが強いか実験してみます。
            ついでにこれをキメラしてみます。

  4. 定跡で学習させる場合(順不同でいいとして)、まふ定跡で学習させたあと、「やねうら王の定跡」というふうに、段階を得て学習させていけば強くしていけるかと思いました。
    1つの定跡のみで強くしようとすると強くならなかったりするのかなと思います。かえって弱くなったり。
    過学習とでもいうのかな。

    • > 段階を得て学習させていけば強くしていけるかと思いました。

      まあ、そのへん人間が何かを学習するときに似ていて面白いですね。

  5. 定跡を使う場合、定跡ファイルに登録されている局面からランダムに1局面取り出してきて、それを初手にしてランダムムーブを行うんでしょうか?
    例えば16手目の局面を読み込んでそこから局面作成スタートになるとか?
    もしそうならば定跡ファイルを使う場合は、沢山局面が登録されている方が局面パターンが増えるという解釈で良いのでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です