将棋方程式を発見した!(9)


コンピュータ将棋で形勢を数値化して評価するときに大きな問題点がある。


まず、評価するときの単位がおかしいのである。Bonanzaで「+120」と出ていたとして、この数字の単位は何だろう?


いま、手駒の価値を固定して評価しているとしよう。(普通、固定するよね?)


歩は10点だ。香は25点だ。この価値から計算すると+120は『手駒の「歩」に換算して12枚分 先手は得をしている』という局面だ。


では、『手駒の「歩」に換算して12枚分 先手は得をしている』という局面は、先手はどれくらい優勢なのか?


ここが難しい。


例えば平手で、先手だけ手駒に一歩ある状態でゲームを開始したとしよう。この局面の静的な評価値は先手 +10である。だけどこの局面は、同じ実力同士の有段者なら6割ぐらい先手が勝ち越すだろう。駒組みが非常に制約されるからである。トッププロ同士ならば7,8割先手が勝ち越すと思う。それくらいの大差である。


ところが終盤で駒を両者がふんだんに持ち合っていて、その結果「+120」だとしても先手がそこから6割も勝ち越せるかと言うと微妙である。駒をたくさん持ち合っているからインフレが起きているだけである。


だからこの場合は「+10」の局面のほうが「+120」の局面より断然勝ちやすい。


ここまで深さ(局面の進行度)の異なる二つの局面を単純比較することは通常のαβ探索においてはあまり起こりえないので顕在化しにくい。


しかし、何らかの形で正規化(「自己対戦で勝てる確率」に変換?)しておかないと、深さの全く異なる二つの局面の優劣を比較するときに問題となる。


激指のように異なる深さの二つの局面を比較しないといけないような探索手法をとると下手に延長したために終盤に突入し、駒のインフレが起きている局面のほうが評価値が高いのでそちらの変化を好んで選んでしまうような傾向がある。手堅く指せば紛れ(逆転の可能性)が全くないのに、インフレ局面に誘導して自滅してしまう。


中盤のこの傾向は、たぶん現在のコンピュータ将棋共通の特徴だと思う。例えば中盤で評価値 +120で、その20手後に評価値が +200 なのと +300なのとでは本当に +300のほうが勝ちやすい局面なのか、という問題である。


+120と言うことは形勢は傾いているはずで、常識的に考えればその優位を徐々に拡大できるはずだから20手後には+120よりは大きな優位になっていなければおかしい。しかし、その優位を拡大するスピードは直線的に増加するとは限らない。着実に紛れの少ない方法で手堅く優位を拡大していくほうが優勢を維持しやすく勝ちやすい。そういう意味からすれば +300のほうが良い局面だなんて怪しいものだ。


実際に、先読みできる手数が20手を越したあたりからこの問題はかなり深刻なのだが、そう簡単にはどうにもならない。進行度に合わせて正規化するのが普通なのだろうけど、進行度と言うのがこれまたうさんくさい概念で、下手にこの手のパラメータを導入すると副作用がいろいろ発生する。


私は、この現象は評価値が「勝ちやすさ」を反映していないことによる水平線効果の一種だと思う。これを防ぐためには「紛れ」のようなパラメータを導入すべきだと思う。局面がどれだけ紛れやすいかと言うパラメータを用意するのだ。


それって、将棋方程式を発見した!(7) (http://d.hatena.ne.jp/yaneurao/20080429)で書いた「誤差」と同じじゃないの?と思った人、それ正解。そのコメント欄にあるように誤差つきの探索手法と言うのはかなり難しい。(誤差つきの探索をまともに実装出来て、それで十分な成果が出せるならコンピュータ将棋始まって以来の快挙であると思うのだが、そんなにうまくいくかどうかは知らない。) あとこの探索手法自体の実装が難しいと言う他に「紛れ」自体をどう定量化するかと言う問題があるし、それを実装するときにそこに計算時間を食われるとnps*1が落ちてしまう。これでは何をやっているかわからない。


コンピュータ将棋は静止評価にあまり力を入れても仕方ないとほとんどの開発者が考えている。先を読まないと飛車が詰んでいるかどうかもわからないし静的な評価では3手詰めすらまともに判定出来ないのだから、そう考えるのは当然である。静止評価で変に手心を加えると必ず副作用が発生して痛い目に遭うのが現実であるのに対して、先読みする手数を増やしても副作用が生じることは稀である。


私も「静止評価をなるべくまともにしたい」とは思っているが、「npsを大幅に落としてまで」とはこれっぽっちも思っていない。

*1:nps : nodes per second 1秒当たりの探索ノード数