強化学習/RL/Reinforcement Learning のデバッグ方法
RL のデバッグは難しい。RLアルゴリズムの選択、適切な reward の設定、Deep RLの場合モデルの選定、実装の正しさ、適切なパラメータ、そもそも学習できる問題なのか。切り分けが難しい。世の中には同じように思っている人がたくさんいるようだ。情報元から適当にまとめる。
情報元
- What are your best tips for debugging RL problems? : reinforcementlearning
- Deep Reinforcement Learning practical tips : reinforcementlearning
- williamFalcon/DeepRLHacks: Hacks for training RL systems from John Schulman's lecture at Deep RL Bootcamp (Aug 2017)
- DQN debugging using Open AI gym Cartpole - The intersection of energy and machine learning
チェックリスト
- 低次元の 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 は収束がおそいよ