TDLeaf()とは1998年からある古い手法であり、簡単に言えばTD()を探索した値を使って行うものである。
TD()
TD()とは、強化学習でよく用いられる時間差分学習の一種であり、後に続く状態の価値をで重みづけながら教師情報として利用するものである。以下ではボードゲームのように報酬が最終状態でのみ与えられ、割引率が1であるような状況を前提とする。時刻における状態について、それに対する教師情報は各状態の価値を用いて次の図のように計算される。は終端ステップ、は最終結果に基づく報酬を示す。
式として書くと
となる。これを目標に現在の状態価値を修正していけば良い。たとえば自乗誤差を考えて勾配法で学習するなどの方法が考えられる。
多くのボードゲームではがそこまで大きくなることはないので影響はないかもしれないが、注意点として式(1)を愚直に計算すると各を計算するのにかかるので全を求める計算量はとなってしまう。しかし式(1)はよく見ると
と書けることがわかるので、後ろから計算していけばがで求まる。式(2)を見てもわかるように、要するにとの内分を取っていることになる。
TDLeaf()
TDLeaf()ではTD()を探索を用いた手法へと拡張した。基本的には上のTD()でのを探索した値で置き換えるということになる(GA将ブログなど参照)。
論文ではαβ探索に対しての適用が議論されており、学習する状態も探索した葉にあたるノードを用いているが、必ずしもそのようにする必要はないと感じる。特にモンテカルロ木探索へ応用することを考えると、平均化しているので探索で得られた値に対応する葉のノードが一意に定まらない。学習する状態は探索を始めた根にあたるノードとしても良いと思われる。(余談ですがTDLeaf()をモンテカルロ木探索へ応用する論文を見つけられていません。ご存じの方がいましたら教えていただけるとありがたいです。)
その場合ある局面について探索した値もTD()で考慮する値としたい。つまり上の図が1ステップずつずれるような計算になる。式(2)で示した教師情報をで求める工夫と合わせて、結局次の図のような計算をすれば良い。
式として書くと
であり、このを基に状態における(探索をしない)価値を更新する。
ここでAlphaZeroの学習法はTDLeaf()においてとしたものだと捉えることができる。探索した値には全てがかけられるので、とすれば最終結果のみを考慮することになるためである。
AlphaZeroのように最終結果だけを用いるのではなく、探索結果も使った方が学習が速いことはOracle Developersの記事で検証されている。ここでは最終結果と探索結果の平均や内分が取られている(elmoの学習方法とほぼ同じである)が、TDLeaf()の観点からするととすることで探索結果を取り入れることができる。次回に続く。