MuZeroと脳内盤

 技術的な内容というよりはやや曖昧な、(この言い方は好きではないが)ポエムっぽい文章を書いてみるなど。

 今年の選手権でmerom氏には話した気がするのだけど、プログラム内部に盤面を保持してそれを遷移させて評価関数に入力するという方式は、継ぎ盤を用いて思考しているようなものなのではないかと感じることもある。盤面の遷移則自体も学習できるならそうして欲しいし、その学習が価値判断や指し手の学習に良い効果をもたらす可能性もあるとは思っていた。

 MuZeroの手法は表現ベクトルにおいて遷移を考えるという手法の一つとして見なすことができ、これは個人的な解釈で言えばまさに脳内盤を遷移させているようなものだと感じられる。一方で明示的には「遷移予測した表現ベクトル」と「遷移先の盤面をエンコードした表現ベクトル」が近くなるような損失はないので、価値や方策は似た値を出力するが表現ベクトルとしては違うものになっている可能性は高いと思われる。

 手元の実験(教師あり学習)では、「遷移予測した表現ベクトル」と「遷移先の盤面をエンコードした表現ベクトル」の二乗誤差を損失に含めるなどとしない限り、両者の各要素についての平均二乗誤差が5くらいは残り続けるような結果が得られている。二乗誤差を損失に含めれば二乗誤差は0.005ほどまで落ちるが、これは表現ベクトル全体が単純に小さくなるためでもあることがわかっている。

 個人的にはやはり「遷移予測した表現ベクトル」と「遷移先をエンコードした表現ベクトル」はできるだけ一致する方が良いのではないかと思われる。ルール的に同じ盤面であることが理屈としてわかっていることが担保できれば嬉しい。そのためには連続的な表現ベクトルではなくて、離散化などの処理が必要なのかもしれないとも考えたりはするが、試したみたことはない。

 また自分は盤面の再構成誤差を損失に含めるブランチも作ってみていて、少なくとも盤面を直接エンコードした表現ベクトルから盤面を再構成することはかなりの精度(99%以上)で可能であることがわかっている。しかし遷移予測した表現ベクトルからの再構成では確か70%程度まで落ちてしまい、特に持ち駒の数を誤解するケースが多かったと記憶している。盤面の認識は怪しいのに価値判断はそれなりに可能というはやや妙だなという印象を受けた。はっきりとしたデータがどこにあるかわからなくなっているので曖昧な話ではあるが……。

 遷移則を学習することが性能向上に結びつくかは微妙なところではあるけれど、学習の高速化に少しでも寄与する可能性はあるのではないかと期待している面もある。MuZeroではあまりそのような傾向は見られていないようだが、なにかうまいやり方があればなぁとは思うところ。