強化学習エージェントが環境の変化に対応できるかどうか、という点に興味があるため、atariゲームを連続的に切り替える設定での学習を試せるようにした。
デフォルトのatari環境では各ゲームによって有効な行動数が異なる。たとえばBreakoutだと4種類(NOOP、FIRE、RIGHT、LEFT)だけが有効な行動である一方、Alienだと18行動が有効となる(8方向 + 停止の9通り動きがあり、FIREするかしないかで2倍の18通りになる)。ここが変わってしまうとネットワーク構造なり出力方策の処理を変えなければならなくて不便なため、必要ない行動も含めて全てを入力できるようにした。これはatariの環境を作るときにfull_action_space=True
というオプションを入れれば良い。ドキュメント
環境設定周りのBBFの実装がわりと複雑で、環境を作成する関数をRunnerに渡して、Runner内部でそれをAgentを作る関数に渡してAgentにActionNumを教えるという形になっているため、いろいろこねくり回す必要がある。
簡単に実験したところ、Breakoutで行動が増えることによる性能の低下は、そこまで大きくないようだった。
今回はまず実装を試すということで、atari 100kベンチマークで使われる26ゲームのうち、BBFが高いスコアを出せていたBreakoutとBoxingの2ゲームを選び、それをこの順番で10kずつ学習させた。
学習中のHumanNormalizedScoreは以下の通り。
10kでゲームが切り替わったことで報酬が全然得られなくなっており、学習して持ち直していくことがわかる。
それぞれのゲームの学習が終わったタイミングでBreakoutとBoxingの両方を100回テストした結果が以下の通り。
評価タイミング | BreakoutのHumanNormalizedScore | BoxingのHumanNormalizedScore |
---|---|---|
Breakout学習終了時(10k終了時点) | 1.01 | -0.72 |
Boxing学習終了時(20k終了時点) | 0.18 | 1.12 |
ある程度想定通りの結果が得られた。
- まず、Breakout学習終了時ではBoxingは全く学習されてないのでとても低いスコアになる。
- Boxingまで学習するとBoxingのスコアは良くなるが、Breakoutの学習結果が失われてBreakoutのスコアが低くなる。
やや想定外のこととしては
- Breakoutのスコアの下がり方が思ったよりも大きくない
- よく考えると20kではまだ1回目のパラメータリセットが走らないタイミングかもしれないので、その点で忘却が起きない
- リプレイバッファは十分大きなサイズで作っており、ゲーム切り替えタイミングで特にリセットはしていないつもりなので、Boxing学習中もバッファ内にはBreakoutのデータが残っていて適宜リプレイされる
やっていることが複雑化してくるので、各種リセットの挙動が想定通りに実装できているかどうかが不安になる。
今後はAugmenting Replay in World Models for Continual Reinforcement Learningで示されている指標を計算できるようにして、忘却性と可塑性の評価をできるようにしてみたい。