以前,ポエムとして「蒸留」というのがよくわからないと書いた。
実はこの実験をやってた。
題材は既にfloodgateで対戦中のgo_test02やgo_test03である。
前回の記事では色々改良したけど,そもそも探索が遅いので強くなってない。7手詰めの詰めろが読めずに頓死とかそういう話を書いてあった。
逆に考えてみよう。7手も読めてないのにそれより深く探索できている相手に勝ったりしている理由はなんだろう。
評価関数しかない。これが今回の蒸留の成果だ。
評価関数とは特定の局面での評価を決める関数である。入力は局面情報なのでどの升にどの駒があるとかそういった情報である。
蒸留とはその特定条件の組み合わせをピックアップして,近似関数を作る作業と言っていいだろう。多項式近似関数をイメージすれば概ね間違いないが実はちょっと大変。
駒の数は40だが,組み合わせを考えると相当数になる。手番,成,升と掛け合わせた場合の数は千を超える。三駒関係と言って多く利用されたモデルは三駒の組み合わせを入力ににした関数であり,入力パラメータは1000万近くになる。
同形の数式であればすべてのパラメータを同じにすればいいのであるが,これはコピーである。異形の数式で多くの入力パラメータに対して近似解を得られるようにするのが蒸留と言っていいだろう。機械学習における任意の教師データを作り出せる状態にあるということだ。(そもそも私はこれが理由で機械学習の習作としてコンピュータ将棋を始めたのだが・・・)
完成すると事実同じような性能が得られる。ただし,計算時間が同じようなものであればだ。
逆に多少荒い近似でも計算時間が速いものであれば結果強くなる可能性もある。この辺が非常に難しいところで今のコンピュータ将棋の争点でもある。
ってここまで書いて評価関数の数式に新しいアイデアが浮かんだので下書き保存しておく。
----
と,選手権よりずっと前に書いてたものがあったのでこの辺で晒しておく。
結果的に選手権ではNNUE型が多かったのだが,実のところ相当数の試行の結果である。