適格度トレースの実装完了
ランダムウォーク問題という、一直線上に複数のポイントがあり一定時間ごとに左右どちらかにランダムに移動するというタスクで、各ポイントにいる場合に得られる報酬の期待値を計算する問題です。報酬は右端(グラフには無いですが位置20)に着いたら1、左端(同じく位置0)に着いたら-1です。
適格度トレースにはλというメタパラメータがあり、これを変化させる事で通常のTD法(TD(0))と同じ状態からモンテカルロ法と同じ状態まで変化するので、色々な値で実験してみました。
グラフは下記の通り。横軸はランダムウォークを試行した回数、縦軸は各状態での期待値の予測。
λ=0.0 TD(0)と同じ状態
中央付近の状態の値がなかなか変化しません。
λ=1.0 モンテカルロと同じ状態
さらに早く、さらに暴れます。
最後のグラフだけ全然正しい結果になっていませんが、これは学習率を変化させていないのが原因でしょう。試行回数に応じて学習率を徐々に下げていけば正しい結果になるはずです。
で、グラフを見た感じだとλは0.5〜0.9の間が良さそうです。または、学習初期はλを0.9付近に設定し、試行回数に応じて徐々に小さくしていくというのも有効かもしれません。
λの変化による挙動の違いは、大きめだと学習の立ち上がりは速いが最終結果の誤差が大きく、小さめだと逆に遅いが誤差は小さい、という感じみたいですね。
いずれにしろ、λの調整もメタ強化学習で出来るでしょうから、今度はそれを組み込んでみます。