強化学習/RL/Reinforcement Learning のデバッグ方法

RL のデバッグは難しい。RLアルゴリズムの選択、適切な reward の設定、Deep RLの場合モデルの選定、実装の正しさ、適切なパラメータ、そもそも学習できる問題なのか。切り分けが難しい。世の中には同じように思っている人がたくさんいるようだ。情報元から適当にまとめる。

情報元

チェックリスト

  • 低次元の state をもつシンプルな environment で問題をかんたんにする
  • reward を simple にしてみる。すぐに効く形の feedback も良い。
  • random policy に解かせてみる。random でも時々問題を解けそうなら有望。
  • 自分の目で observation を見て、自分でも解けるか確認
  • Observation mean 0 std 1 に scaling する
  • Reward も可能なら scale する
  • Observation/Reward に outlier がいないことを確認する
  • 動くかな。やってみよう。はうまくいかない。たくさんのことを正しくやらないと学習は進まない。
  • agent を正しく実装することがとても重要。他のコードよりもテストが大事。
    • 可能な限り unit tests を書く
    • ありとあらゆる場所に asserts を。matrix dimension, input, output, action の range
  • 長い時間実行する前に、1行1行目を皿にしてコードを読む。
  • 可能な限り見える化、すべてを log する
  • いくつかの states をピックアップして q-value を見てみる。徐々に変わって stablize されるはず。
  • すべての input/output/state を記録する
  • Neural Net がからむと 10 倍難しくなる。最初は Neural Net でやらず。うまく動いたら swap する
  • seed を固定する
  • optimizer の選択にsensitiveなので注意
  • すべてを normalize せよ
  • 良い結果が出ているものは100-1000 の reward 使ってる
  • 参照実装が使っている hyper parameters 使う
  • 大きい replay buffer, bigger batch size
  • 常に simple version から試して動くことを確認
  • そもそも agent はときどき正しいことをやっているの?
  • DQN は収束がおそいよ