しばらく仕事が忙しかったので、将棋ソフトから離れていたのですが、明日ぐらいからまた諸々の作業を再開します。
要望とかありましたら、本記事のコメント欄にどうぞ。もりもり頑張っていきます(`・ω・´)b
あと、本ブログのコメントフォームから送ってもらったコメント、メーラーに使っていたInboxアプリが2019年3月で終了してしまい、Gmailに移行したのですが、そのときにメールの振り分け設定を間違えていて、コメントフォームからいただいたコメントはすべて迷惑メールフォルダに振り分けられている状態でした(´;ω;`) なんだか最近、平和だなーと思いながら日々快適に過ごしておりました。苦情などは本記事のコメント欄にでもどうぞ…。
囲碁版やねうらおう、
麻雀版やねうらおう、
とりあえずでも、出してもらいたい
将棋は、もう、十分かと。
将棋のほう、AlphaZero型のものを作ったあとなら、囲碁には行きやすそうですけどね。(計算資源は別として)
麻雀のほうは、強いからと言ってそれを以て、ソフトが売れるわけではないのでなかなか大変でございます(´ω`)
振り飛車用の評価関数をつくって欲しい!
居飛車過学習の記事も読みましたが、いまのソフトさんは評価してくれなさすぎる。。
そのへんは、たややんさんが頑張っておられますです(´ω`)b
私は、羽生さんが七冠になったのを見て棋書を読み始めたもので、オールラウンダーに憧れます。
了解です。
やねさんファンとしては、それなりの評価関数も公開していただけたらな〜なんて思ったりしちゃいます(希望)
またブログも楽しみにしてます!
(1) 自分の棋力やレーティングと、コンピュータの強さを指定したら、いい勝負になるよう駒を落としてくれる機能があれば嬉しい(金落ちとかの特殊な手合でも良い)
(2) 2.5段のように間の強さがあると嬉しい
です!
欲しがるのは私くらいかもしれませんが…
あれば便利なような気もしますが、強さは得意戦型とかとの相性もあって、細かい調整あまり意味ないような気も…(´ω`)
全銀河系70億人のやねうら王ファンが喜んでいます。
気持ち的にはどれなのでしょうか?
【1】NNUEを極める
【2】AlphaZero形式を始めるためにLeela Chess Zeroに弟子入り
【3】AlphaZero形式を始めるためにまずは Yaneura FizzBuzzにチャレンジ
【4】AlphaZero形式を始めるためにgoogle社を購入
NNUEにこだわらなくとも、いまどきの手法で非線形な新しい評価関数を作れば良いのでは…。
1.教師局面作るのにAwsなどのサービスを使いたいのですが、Linuxやコマンドに疎いと厳しそうですか?いろいろ調べてはみたものの、shogiguiで動かすといったサイトは見つかり読んだものの、コマンドプロンプトで起動したりする方法がわからなくて…
2.これは完全に個人的な質問なのですが、プログラミングを始めようと思うのですが、python,rust,c++,goといった言語が多く決めかねてます。いくつかおすすめを紹介して頂けたら幸いです。仕事で〜など目的すら決めておらず、とにかくやってみよう程度です。
> Linuxやコマンドに疎いと厳しそうですか?
すべてのコマンドを知る必要は全くなくて、私もlsとかcdとか主要コマンドしか知りませんし(^^ゞ
「Linux 基本コマンド」でググって出てきたページ程度の知識で十分なのでは。
> プログラミングを始めようと思うのですが
であれば、Pythonが入門書多くて、ちょっとの力ですごいことができたりするのでお勧めです。
やねうら王はC++で書かれているので、やねうら王を改造しようと思うとC++一択になりますけど。
あああ、でも、何かキー入力を吸い込むプログラムが起動してシェルに戻れなくなったときの
Ctrl+C
Ctrl+Z
q
quit
exit
:q
:quit
あたりはおさえておきたいかもしれないw
ShogiGUIでメモリを沢山確保させようとするとタイムアウトになってしまうのをYaneuraOuで対策していただけませんでしょうか
せっかくメモリを沢山積んでも使えないので困っています
設定値およそ24000MB以上でタイムアウトになります
(ShogiGUI側では対策する予定がないようです)
やねうら王のほうでは、メモリ確保時に一定時間おきに空行を送信してタイムアウト対策はしているのですけども(WCSC29までに、そんなコードを書いたような..)、やねうら王のバージョンが古いということはないのでしょうか…。あとはメモリ確保にCPUパワー全部取られて、そのShogiGUIと通信しているスレッドが空行を送信できてない可能性もありますね。スレッド数の設定を論理スレッド – 1 にした場合はどうでしょう?
ご返信どうもありがとうございます
論理スレッドー1でやってみたのですが
26000MBで「初期化に失敗しました」と出てしまいます…
YaneuraOuのバージョンは4.88AVXTournamentを使わせていただいております
(試しに論理スレッド-2でやってみたところ出来ました)
メモリクリアに負荷がかかりすぎて、プロセス間の通信ができてないんでしょうね(´ω`)
10GBクリア→0.1秒待機→10GBクリア→0.1秒待機→..
みたいなクリア方法にするしかないのかも知れませんねー。考えときます。
お疲れ様です。
ところで今年も既に11月。あと2回変身を残しているはずの商用版やねうら王ver. 1系のアップデートは…。もう諦めたほうが良さそうですね…。
間もなくver. 2が発売になるでしょうし…。
アップデートはちゃんとするです!(`・ω・´)b
今年優勝おめでとうございます。
やねさん最近の評価関数はあまり強くなってない、と仰られていた通り、自分も野良関数含め追加学習してるもとの評価関数が同じ、もしくは学習元が同じなどの点でどれも似たり寄ったりだなという印象を受けています。
やねさんの大会版のものの学習元は何をどのように用いられたのかお聞きしたくコメントさせて頂きました。
私のほうは学習をゼロからやってます(`・ω・´)b
shogiGUIで定跡作成をしていて、少し思ったのですが、将棋ソフトは、同じ局面でも、5秒でdepth 24読んだり、1秒ほどでdepth 24まで読んだりと、ばらばら(特に低スペックだと顕著に表れるかと。)です。
そこで、M 秒以内に、depth Nまで読めるかを、X回試行し、X回の中で、一番早くdepth Nまで読んだ思考を再開すれば、より早く探索出来る(ハイスぺなら最終的にdepth 30読むとしても10秒程の差かもしれませんが・・・)
気がするのですが、どうでしょうか?
> M 秒以内に、depth Nまで読めるかを、X回試行し、
そこをさらに効率的にやろうと思うと複数スレッドでその試行を行うような感じになるのですが、この試行するコストが、Lazy SMPの並列化時のコスト(並列化することによりシングルスレッドより性能低下することに対するロス)を上回るので、そのアイデアは上手くいかないのです..(´ω`)
そうですか..(๑´ڡ`๑)
NNUEの学習局面のdepthと数はどれくらいのものを使用されましたかね
depth 18相当です。詳しいことは7月頃にCSAの会誌用に書きました。(いつ掲載されるのかは知りませんけども..)
将棋においてnnue評価関数のものとDLのものの違いがあまり良くわからないのですが、簡単に言うとどこが違うのでしょうか?
どちらも大量のデータを用いてそこから関係性を抜き出すという認識です。。
関係性を表現するための表現能力が桁違いに違いますね…。(NNUEのほうが桁違いに低いですが、その代わり推論(実際の探索で用いる時)が超高速という..)
MultiPVをもう少しインテリジェンスにして欲しいです。
検討とかで使ってるときは「候補手が○個知りたい」ではなく「最善手の他にいい手があれば(数は問わず)知りたい」というニーズが自分を含めて多いのではないかと思います。
そこでとりあえず大きめなMultiPVにしておいてその中から評価値良さそうなやつだけを自分でピックアップして確認しているわけですが、これ自動的にやってくれたらもっと見やすくなるのにと思いました。
要するに盤上この1手という局面では最善手だけが表示されれば良いけれど手が広い局面ではたくさんの候補手が出てほしいわけです。
例えば評価値を勝率に換算して最善手との勝率の差が○%以下の手を見つかった分だけ出力するみたいなMultiPVってできないでしょうか?
最善手の評価値が100だとして、これと勝率差が○%である、評価値が50以上の指し手をすべてピックアップしたいというようなニーズ自体は理解できるのですが、まず最善手の評価値が(ある深さにおいて)100というのが確定しないことには50以上という数字が割り出せないので、結局は、おっしゃるようにMultiPVを大きめにしておいて、出力しない(あるいは出力されていても見なかったことにする)しかないのかなぁと。
GUI側の(棋譜解析時の)機能としてはあっても良さそうなもんですけど。
やねうら王に「評価値xx以上の指し手を出力させる」という機能があればGUIで制御する方法も増えるし検討以外にも定跡生成などにも使えると思うのですが……
対振りなど意図的に教師局面つくる際に工夫加えられましたか?それとも全て自動(ランダム)で任せてました?
そのへんは手心は加えていないです。”gensfen2019″というコマンドがあり、それそのまま使ってます。
プロ棋士すらも将棋神やねうら王以外の棋譜解析なんかを使う余地がないというほどの決定版とも言える超絶凄い棋譜解析機能は追加されるのでしょうか?あのツイートが決め手となって将棋神やねうら王の購入を決断したので気になっています。
されます(`・ω・´)b (ご期待に添えるかどうかはわかりませんが)
無知な状態でvisual studio2019用いてやねうら王4.88探索部をビルドしてみた(どこも一切いじってない)のですが、アプリケーションがYaneuraOu-Debug-mateのみで、どこをいじればNNUEなどがビルドできるのかわからずこちらで質問させていただきました。
初心者なので許してください。。
makeを使ってビルドするのでしたら、解説.txtに説明がありますです。
https://github.com/yaneurao/YaneuraOu/blob/e186042942960a10484288ce61bdf0cfdd98d1e2/docs/%E8%A7%A3%E8%AA%AC.txt#L136
もう教師局面の公開等で下々に恵んでくださる予定はない感じでしょうか?
評価関数がNNUE一択の状況で、high depthな教師が公開されると全部のソフトが横並びになりかねなくて、それはつまんないかなーと思ってまして…。教師局面自体、何かのタイミングで公開する予定はあります。(`・ω・´)v
早いもので5月大会から半年経ちましたが、記念すべき(??)30回目の方針や目処はついておられますか??
AobaZeroも時間的に厳しそうでもありますよね。。
まだ出場するかどうかすら決めておりません(T_T)
やねうら王(やねうら系列の王)の称号を奪還されても良いのですか!by やねうらチルドレン
失敗作、本選で使わなかった評価関数など公開予定はありますか?
ちなみに、私はいまだにgikou2とepoch8使ってますw
学習、最後に奇跡的に成功しただけで、それ以外はかなり弱いので、捨ててしまいました(´ω`)
横から申し訳ないのですが、その「かなり弱い」とはどの程度でしょうか?
「the end of genesis T.N.K.evolution turbo type Dと互角」なのか、「ぽんぽこに互角」なのか、
それとも「Gikou2と互角」なのか、どの程度でしょうか?
最後のやつとの比較で言うと-R30か-R40ぐらいですね。ぽんぽこと互角か、下手したらぽんぽこより少し弱いような…。
なるほどです….。
やねうら王ver. 1系のアップデートを
長きに渡り、楽しみに待っているものの一人です。
とくに、「外部エンジンの導入」を今か今かと
心待ちにしております。
まだ時間がかかるのでしょうか?
できましたら、何時ぐらいまでとか、具体的に
教えていただけないものかお願いいたします。
そろそろなのでもうちょっと待つのです…。
なる早で対応する予定でございます。
8歳の子どもがサンタさんに「やねうら王をください」とお願いしているようなのですが・・・ver. 2は年明けになりますよね?
ver.2の発売は春ぐらいのような…。
以前の評価関数は公開のご予定とかありますか?
NNUEが今後の主流となっていく中でKPPT?と思われるかもしれませんが、下々の者としては嘗てのリゼロ評価関数はどこまで強くなっていたのか気になります。
KPPT型はリゼロのepoch8、KPP_KKPTは将棋神やねうら王の搭載モデルが現時点で入手可能なそれぞれのさいつよリゼロ関数だと思いますが、非公開のものはどこまで強くなっていたのかなぁと。
http://yaneuraou.yaneu.com/2017/06/21/%e3%83%aa%e3%82%bc%e3%83%ad%e8%a9%95%e4%be%a1%e9%96%a2%e6%95%b0epoch8%e5%85%ac%e9%96%8b%e3%81%97%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/
KPPT型は、私、早い段階でKPP_KKPTに移行したので、学習あんまりやってなくて評価関数残ってないですね。
KPP_KKPT型は将棋神やねうら王に収録したものがさいつよでした…。(そのあともっと時間かけて生成した教師で学習させるとR2,30ぐらい伸びるのかも知れませんけど、やってないです)
そうしますとプロ棋士の棋譜を使わずに学習した評価関数としては、KPPTのepoch8とKPP_KKPTの将棋神版がそれぞれ現時点でのさいつよ関数ですね!
彼ら2者の指し手はどことなく他の線形関数郡と比べて独特な気がするので、今でも時々使うことがあります。
(3駒Rの限界がまだ先というのはAperyでも示されましたが、必要な教師量を考えるとNNUEの方が現実的という…)
> 必要な教師量を考えるとNNUEの方が現実的という…
まあ、NNUEにこだわらず、どんどん新しい評価関数を考えたほうがよろしいような気はしますです(´ω`)
定跡も何もなしで、ゼロから自分で作った評価関数(教師は11億程度。)をfloodgateに流してみた所、定跡を搭載したバージョンはR2650~2800程度でしたが、定跡を入れないで流すと、R3100オーバーでした。これは、まぐれなのでしょうか?
明らかに、定跡を入れた方が断然、序盤は形が良かったです。
まぁ、アナグマの香車を上げたところで定跡が切れて、王様をこれっぽちも中に入れようとしないなど、既存の定跡とは反りが全く合わないようではありましたが・・・。
いつもの事ながら、長文失礼しました。
定跡に出てくるような局面は苦手で、自分が学習に使ったような局面が得意である場合、定跡の進行にすると相対的に損だと言う意味はありますね。(相手がその定跡の戦型が得意であるとすると)
不安なので、確認に質問を幾つかさせて下さい。
①やねうら王の学習プログラム(YaneuraOu-2018-Otafuku-learn-sse42.exe)は、デフォルトでは、教師を読み込む(開く)度にシャッフルする仕様ですか?
②newbob_decayは、eval_save_intervalを指定していなくても、機能しますか?
1) learn.hの説明にある通りです。(シャッフルしますが、1度の読み込み単位が1M局面なので少ないかと..)
2) eval_save_intervalのデフォルトはlearn.hにあるように1G(10億)局面で、指定しない場合、この値になります。また、評価関数の途中セーブをしない状態でnowbob_decayが利くかという意味でしたら、利かないです。(評価関数の巻き戻しのために、ファイルに保存されている必要があるからです)
人間の棋譜から今のやねうら王に対応している形の教師局面を作る方法はありますか?
人間の手で一つ一つ書くのはしんどいです。
1. 人間の棋譜をsfen形式に変換する(Blunder.Converterなどで)
2. やねうら王のUSIの”position”コマンドの読み込み部を参考に、それを読み込みつつ、packed sfenで書き出すコードを作成する。(packed sfenに変換するコードはPositionクラス内にあります)
ですね…。
1番の、sfen形式に変換するというものですが、
startpos moves 7g7f 8c8d 8h7g 3c3d 6g6f 4a4b 1g1f 8d8e 1f1e 5a4a 2h6h 7a6b 5i4h 5c5d 3i3h 7c7d 4h3i 6b5c 7i7h 4a3b 7h6g 5c6d 3i2h 6a5b 6i5h 7d7e 6h7h 7e7f 6g7f 9c9d 6f6e 2b7g+ 8i7g 6d5e 7g8e 8b8d 8g8f 5e6f 7f7e 6f7e 7h7e P*7d 7e7f B*8h P*7c 8h9i+ 7c7b+ 7d7e 7f3f S*2e 3f5f 5d5e 5f4f L*4d 2i1g 4d4f 1g2e 2c2d 7b8a 2d2e 4g4f 9i6f L*6h 6f7f 8a9a 2e2f 2g2f 7f8f 8e7c+ 8f7f
startpos moves 7i6h 3c3d 5g5f 8b4b 6h5g 5a6b 2g2f 6b7b 2f2e 2b3c 3i4h 7b8b 5i6h 7a7b 6h7h 4a5b 3g3f 4b2b 8h7i 3a4b 1g1f 2c2d 2e2d 2b2d P*2e 2d2b 5g4f 4c4d 3f3e 4b4c 3e3d 4c3d 4f3e 3d3e 7i3e P*2g 2h2g S*3f 2g2f 3f2e 2f2h P*2f 4h3g 4d4e P*2d 3c2d 3e4d 2d3c 4d3c+ 2a3c P*3d 2e3d 3g2f 3d3e P*2e 3e2f 2h2f 2b2e 2f2e 3c2e R*2a R*2h S*3h P*3g 4i3i 2h2f+ 3h4i P*2h 2i3g 2h2i+ 3i4h 4e4f 3g2e 2i1i N*5d 5c5d B*4d 2f2h S*7a 8b9b 2a6a+
こんな感じのものを、どういう風にすれば教師としてつかえますか?(試しに拡張子を.binに変えて、loop 500万 として何度かしてみましたが、学習部が落ちました。)
>packed sfenに変換するコードはPositionクラス内にあります。
packed sfenに変換するコードの場所を、どのソースファイルの何行目にあるか教えて頂きたいです。potion.cppは2000行ぐらいあって、すべて読むのはつらいです、お願いします。
> packed sfenに変換するコード
Position::sfen_pack()です。これ呼び出すだけで現在の局面のpacked sfen形式のバイト列が得られます。
変換する機能は用意してないので、プログラムが多少書けないと教師局面のフォーマットに変換できないです…。(´ω`)
30行程度で書けるはずなんですけども。