Aperyの新しい学習部はいまのところ公開されていないが(電王トーナメント後には公開されるのだと思う)、教師局面を生成するコード自体は公開されているので、どのようにして教師局面を生成しているかはわかる。
見たところ、最新版では、depth = 6 , EVAL_LIMIT = 3000のようだ。
(depth = 6は探索深さ6の意味。EVAL_LIMITとは、この値を超えるとその対局を終了させるの意味。)
いつぞや、Aperyは、depth = 8で教師局面を生成していたこともあるようなのだが、それはやめたようだ。(たぶん時間がかかりすぎるわりに、そんなに効果がなかったのだろう。)
depthが浅くても良いということなら、depth = 3でいいのではないかと思うのだけど(実際、depth = 3でも最初のうちはそこそこ強くなるので)、どこかからdepth = 3だと雑巾が絞りにくくなくなってくるようではある。このへん、depth = 3が原因なのか何なのか、私自身よくわからない。
EVAL_LIMITについては、大きくしたほうが終盤の特徴を学習出来ていいように思えるが、終盤に合わせた特徴を学習することにはあまり意味がないのかも知れない。
実際、私の実験ではEVAL_LIMITを大きくしたほうが短い持ち時間では強くなったのだが、長い持ち時間ではそうとも言い切れない。
そもそも、コンピューター将棋は、駒得しか見ない評価関数であっても終盤はそこそこ強いので、評価関数自体は終盤よりは序中盤をターゲットにして調整すべきなのかも知れない。ここのへん、よくわからない。
あと、最近のbuildで、教師局面の生成のときにPVの初手を格納するような変更があった。
https://github.com/HiraokaTakuya/aperygenerateteacher/commit/21811bbe19da267ab6666304c37df82a78de0c31
これを用いて、教師局面から学習するときにqsearch(静止探索)のPVの初手と異なる場合は、学習対象としないようにしたほうがいいのかも知れない。このへんもよくわからない。
BonanzaMethodでは、探索窓を小さくしておいて、その窓から外れるような評価値の局面は学習対象外にしてあった。あれが効果があるのかどうかは比較実験をしてないのでよくわからないが、確かに直感的には様相ががらりと変わるような局面を学習対象とはしないほうが良さそうな気はする。
ともかく、学習まわりは混迷を極めている。少なくとも計算資源さえあれば誰でも無限に雑巾絞りが出来るというような簡単な代物ではなさそうである。答え合わせは今回の電王トーナメントのあとになりそうだ。
> 実際、私の実験ではEVAL_LIMITを大きくしたほうが
> 短い持ち時間では強くなったのだが、
> 長い持ち時間ではそうとも言い切れない。
昔「序盤に3倍思考時間を使う~」とか言っていた時に、ある程度の強さの将棋ソフトは終盤でそんなに逆転起きないとかなので、そうなのかもしれませんね
「電王戦第三局について思うこと」あたりにも「やねうら王の序盤に湯水の如く時間を投与するという作戦および」とか書いているし、それは正しいと思うので序盤中盤に照準を合わせた学習は正しいのだと思います
>そもそも、コンピューター将棋は、駒得しか見ない評価関数であっても終盤はそこそこ強いので、評価関数自体は終盤よりは序中盤をターゲットにして調整すべきなのかも知れない。ここのへん、よくわからない。
これはおそらくそうだと思います。
・将棋はある程度有利になると,有利が拡大する傾向にある。お互いにミスしないなら先行逃げ切りが有利。したがって,トレードオフならば序盤に注力すべき。
・終盤は一手のミスで形勢が激変するので,雑巾絞りの微妙な評価値の差分は重要でない。具体的にその手を読んでたか,枝刈や時間制限で見落としたかが重要。(差分が枝刈に影響する限りでは雑巾絞りも影響するが)
・終盤は現状の評価関数が見ているある意味抽象的・間接的な駒得や駒の連携より,具体的・直接的な詰むや詰まざるやが重要。極端な話,相手玉の頭に金二個並べられれば,他が全駒されてても勝ち。
前回トピックで4駒関係に言及されてましたが,終盤は軽量な評価関数で局面を広く深く読む方が有効なように思われます。
じゃあ軽量化すればいいかというと…超軽量な評価関数でも現状から3割しか高速化しないとのことですので,例えば駒得のみ評価関数で探索ノードを3割増やしてもプラスに持っていくのは難しそうですね。
相手玉の空間と利きを見るのは有効っぽい気がしますが…技巧?
> 相手玉の空間と利きを見るのは有効っぽい気がしますが…技巧?
終盤向け評価関数の究極形は技巧だと私は思っているのですが、いかんせん、利きの更新に時間がかかりすぎるのでなかなか元が取れないような気はしています。(来年、そのへんもチャレンジしてみます…)
評価関数の手番考慮とは何なんでしょうか?
技巧のPR文書にはNDF参考みたいに書いてあったので見たら、NPSが10%落ちたとか、互角局面の評価に必要みたいなことを書いてありましたが、
結論としてNPS10%削ってまで必要なの?強くなったの?評価関数の精度がアップしたの?
将棋ソフト開発者間では常識なのかもしれませんが、私がソフトの穴を突くときに手損計算を用いているので、ひょっとしたらこの辺改良の余地があるんじゃないかと思いまして、教えて頂けると幸いです。
> 評価関数の手番考慮とは何なんでしょうか?
自分の手番のときに加点するのです。例えば、歩が相手の飛車に当たっているとき、自分の手番であればこの飛車は取れそうですので、この形に対して加点されていると、局面の評価値としてより妥当なものになるようです。
手番なしのKPP型評価関数に比べるとR100~R200ぐらいの差があります。(手番を考慮したほうが強いです)
手番と付いていたので、手得、手損を計算しているようなものだと思ってました。全然違うすばらしい技術ですね。教えて頂きありがとうございました。
私の言っているソフトの穴とは何なのか?
前提として以前やねうら王さんのブログにも書込みましたが、対技巧対局推移の観察で
初手~30手:評価+300だと技巧が定跡自爆した感じで100手以内に詰ましています(勝率100%)
初手~30手:評価+150を60手までで+300に伸ばしている棋譜なら内容は完封状態で130手くらいで詰ましています(勝率100%)
■つまり、私個人の考えですが、序盤や中盤初期において新評価関数で+300も差があれば70手先では詰みがあるくらい相当ヤバイ状況であるということです。
そして今の将棋ソフトはまだその辺りの認識があまいので、ソコをソフトの穴と考え、突いて実際に勝てているのです。
今の上位将棋ソフトは昔の将棋ソフトに比べ隙が無く、人間が駒得で勝つことは不可能であると思っています。
ハメ手があるじゃないかと思われる人もいますが、あれは弱いソフトや短い時間考慮での話しです。
ではなぜ私がプロでも勝てない今の上位ソフトに勝てるのか。
それは今のソフトが手得、手損について正しく評価出来ていないからだと思っています。
この部分に改良の余地があるんじゃないかと私は考えています。まったく検討はずれだった場合は申し訳ありません。
新しい評価関数は大変すばらしい物で、静止したその局面からソフトの探査が届いた範囲(depth24↑)においては99%正確であると思っています。
ですから私はソフトの探査が届かない範囲で勝負し優勢な状態を作り、クセを見抜いて狙い打ちし勝てています。
このクセの部分はソフトの違いや設定の違いでも変わるので、ソフトの穴とは考えていません。
私の感覚から言えば、1手の価値は新評価関数で+150くらいです。
※ただし有効な位置に駒を進めた場合のみとなります(有効な位置って誰が決めるんだと思われるかもしれませんが、それこそ新評価関数の評価値です)
具体例をあげるなら、振り飛車82玉に居飛車99玉であれば穴熊が1手手得している位置にいて+150という感覚です。
居飛車穴熊が先手番で定跡通りに他の駒も有効位置に動いたならば、中盤始まって+300の必勝型です。
もちろん例外もあり、99玉はそれ以上動けませんから、居玉藤井システムのように広い玉型で、玉が1手でも有効な位置に移動出来た場合は99玉に比べ+150となりますので、先手番藤井システムでは玉が1歩でも上手く逃げることが出来るなら振り飛車+150です。
最悪な例は角換わりです。これはせっかく先手番で+150なのを相手+150としてしまい、その差-300の最悪の戦法です。ここから派生する筋違い角がありますが、これは筋違い角が悪いのではなく、その前段階で行った角換わりが悪いのです。
私は機械ではないので、もちろんこんな計算をしながら指している訳ではありません。あくまで将棋ソフトは計算が得意なので、こういった感覚を計算出来るなら強くなりそうだと思っただけです。
それらの平均をとったのが評価関数だと思いますので、今の評価関数は出来ていますので余計な例でした。
私が考えるソフトの穴について戻ります、以前ご迷惑をお掛けしました棋譜を例に説明すると、
①37手目で相手が角交換を迫って6五歩と開けましたので、36手目までが序盤です。ソフトの評価値は先手+50ですが、私の評価で言えば互角の0に先手1手得で+150です。
②中盤が始まり、37手目6五歩にこのまま角交換しますとこちらが不利となりますので、38手目4四銀と拒否しました。
③44手目の5五歩が最初の狙いで、相手玉に最も近いと金を作る場所作りです。※後手番は何としても+150を取り返さないといけないので、ここで上記の手損計算が出ます。
このまま5五歩が有効な攻め位置=6九と金に移動するまでの手数=5六歩+5七歩成+5八と+6九と=4手
これを相手に取らせ5八歩打なら=5八歩打+5九歩成+6九と=3手
ゆえに53手目に5五馬と歩を相手に取らせる手順を選択しました。(これは突き歩捨ての考えです)厳密には1歩損なので駒割の分、損が発生していると思う方もいるでしょうが、私の考えでは歩切れではないのでやっとこれでプラスマイナス0の互角です。
④57手目が最初のターニングポイントでソフトは自分が+200くらいと判断して、5一角打や4四角打と5五馬との挟撃や2二歩打を候補とあげますが、
これをソフトが指した時点で私的には、おまえは70手先で死んでいるとして5八歩打とします。
この後5九歩成が出来た時点で、駒割計算でいう歩120点がと金500点となり+380となるからです。
将棋格言的にも、と金の遅速+と金は金と同じで金以上+二丁飛車に追われる夢を見たが発動していますので、将棋ソフトがいくら強かろうが負けるほうが難しいです。
⑤ゆえにここからの進行については、より厳しい手を7五歩として載せました。これは攻撃的な好手でその後の5七角打で60手目に5四歩打と馬をたたかなければならず、5八歩打が出来なくなり計画がすべてつぶされたので、折り込んでいた1手得分の150が消し飛び、5五歩の1歩損分の120がのしかかって先手+270となったからです。
じゃあ何故ソフトに勝てたのかについては、一度自分が詰むまでの状況を知っていたので、ぎりぎりまで攻め合いに出来た結果です。
上記(角換わり例)にも書きましたが、相手から駒を取らせ、有効な位置に駒が移動する場合+300となります。これがどこかで発生し逆転したものであると考えています。
⑥実際に60手目段階で私の計算では先手+270なので、ここからソフト同士で対局させると居飛車が勝率9割程度になるハズです。
7五歩で対策出来てるんなら何が穴なの?と言われれば、私程度の棋力でも勝てたことと、他の候補手では必敗だったことが理解出来ていないことです。
改良の余地と言ったのは、57手目で3億ノード読ませるとdepth24で6八金と、金が下がり5八歩打を防ぐ守りの好手が出るからです。
これは将棋ソフト的に考えると、7五歩でも6八金でも変わりません。
しかし対人間となるなら6八金のほうが圧倒的に好手です。
それは6八金からの進行では互角局面が20手程度増えるからです。つまりすさまじく未来の分岐が増えるので、人間では勝つことが不可能な盤面になります。
少なくとも私は手も足も出ませんでした。
極論を言えば、2手あれば王様の目の前に駒を打って取れる訳です。
それが私的に1手の価値が+150点で2手分の+300点が70手先の水平線効果になっていると考えています。
やねうら王さんも深い探査結果が浅い探査でも出るように工夫されているようでしたので、この56手目局面のヤバさが直感的(浅い探査で6八金が出る)に理解できるソフトへ改良出来れば、相当にと金攻めの理解が深まっている(強くなっている)と考えています。
受けれるということは、攻めれるといことでもありますので、開発におけるひとつのアイデアと思い、長々と書いてしまいました。
> この56手目局面のヤバさが直感的(浅い探査で6八金が出る)に理解できるソフトへ改良出来れば
まあ、このへんは3駒関係の表現の限界があるので、どこまで学習できるかは…よくわかりません。そろそろ人類は(ソフト開発者は)4駒関係に手を出すべきだと思うんですけど、PCのメモリがちょっと足りません…。
5筋の相手の歩が切れている状況で5筋の自陣に打ち込み余地があるのは不味いということで、
自陣の利き、制空権の問題と考えるべきでは?
それと、がうるさん千田先生が
指摘されるSMが長手数の細い攻めを仕掛けて突っ込んで攻めを切らして逆襲されることがある問題ですが、末端の静的評価で攻めてる駒の配置が有利に見えるのが原因ですよね。
敵玉に攻めゴマが近づいて敵の守りを剥がして敵の持ち駒が増えてる状態は、いかにも仕掛け前より有利に見える。
でも実はそこでz等で攻めが切れていて、逆に敵の持ち駒で自陣が危うくなっている。
(10手位進めた仕掛け途中段階で逆襲を読んで自陣に手を入れても良さそうですが、それはともかく。)
末端の静的評価で、自玉と敵玉の安全度を測れないとこの欠点は解決難しいと思います。
技巧がこうなりにくいのは、そこが比較的に正確ということですかね。
現在公開されている技巧は、玉周辺の空間把握能力については頭ひとつ抜けている感じ(逆の意味で相手玉のヤバさを見抜いているので厳しい詰めろを掛けてくる)ですが、玉から離れた場所での空間把握能力はむしろ低いです。
なので私が技巧を倒すときには、この長所を短所に変えてしまいます。
一例をあげると、技巧を相矢倉に誘導するとこちらの飛車先が決まっておらず、桂馬が跳ねる余地があるのに簡単に入城し、矢倉初心者のような動きをします。
広い玉型が得意なら狭いところに押し込めてしまえばいい。さらにそれが悪形なら尚良しという発想です。
そして玉から離れた場所の攻め駒のうち、歩や桂馬といった後退出来ない駒をたいした意味もなくフワっと上げてくることが良くあるので、そこを激しく攻めます。
なのでこの両方の問題が解決できればさらに強くなるでしょうね。新技巧に期待。
技巧、2駒関係なので挟撃形、わからないというのはあるのでしょうね。あと、利きのなかでも特に玉の8近傍の利きだけ重視している意味もありますし。
一手損角換わりで腰掛け銀が流行なのでしょうか?
先手:SM+新評価0917=腰掛け銀
後手:やねうら王3.57+新評価0911=9四歩居玉型早繰り銀
※評価関数を変えるのは手のバラつきを増やすため
1手当たりの設定秒数=初手or2手目で4000万ノード以上(中盤でほとんど手が変わらない下限、研究する人は気になる局面で調整)
先手が戦法態度を見せずに玉虫色の動きをしているので、後手が早繰り銀で態度を表明し、先手が腰掛け銀にした場合。
この条件の場合、よくある対策で銀を追い払われ先手+150程度になるが、その後やねうら王は上手く修正してプラスマイナス0の互角局面に戻し、自然な指し手でSMに勝つことが良くあります。
やねうら王はもっと評価されてもいいと思う。
> いつぞや、Aperyは、depth = 8で教師局面を生成していたこともあるようなのだが、それはやめたようだ。(たぶん時間がかかりすぎるわりに、そんなに効果がなかったのだろう。)
たしかこのときの評価関数は、その前の評価関数と比べ棋風が変化するくらいの大きな変化があったと思う。
80億局面っていう数なので、統計的にほぼ収束しているから前のと比べ棋力的に意味無いと結論付けたのでしょうか?
今どきのソフトって探査始まってdepth14とかなので、10以下を見ること事態無くなった気がします。
昔のBonanza時代はdepth9と10では指し手が相当変わった(簡単なハメ手を回避する確率が増えた)記憶がありますが、教師局面の生成には関係無いのかな?
> 80億局面っていう数なので、統計的にほぼ収束しているから前のと比べ棋力的に意味無いと結論付けたのでしょうか?
教師の質として良いかどうかという問題はあるのでは。子供が足し算をすっ飛ばして掛け算から学ぶことが出来ないように、あまりにかけ離れた概念をいきなり教師として提示するのは学習上良くないというのはあるのでしょうね。depth6と8がそこまでの差があるのかどうかはわかりませんが。
また、生成に6倍ぐらいかかるわりには、絞れる雑巾が3割ぐらい違うだけなら、depth6で何回も雑巾絞るほうが得ですしね。