今週は実装を進めようとしていたが、思ったようには進まなかった。
目標としている変更は、DQNをベースとして
- ネットワークを過去系列を入力に含むTransformerに変える
- 上に伴って、ReplayBufferも系列として情報をサンプリングできるものに変える
- そうするとReplayBufferで管理するもの、返り値が変わる
- 学習が終わってテストするときも、毎回の状態をReplayBuffer(的ななにか)に溜めておく必要がある
となることが実装を進めてみてわかってきた。最初はStableBaselines3のDQNをベースにして実装していこうとしていたが、これの実装がかなり継承を駆使した作りになっており、ReplayBufferやテスト時の動作を変更しようとしたときに結構つらいことになってしまった。ちゃんと理解していれば修正するべき点は意外と少ないのかもしれないが、そもそもどこを理解するべきかが難しい。
なのでcleanrlのdqnから出発するように方針転換した。こちらの方が見通しがよく、またそもそものベースDQNの収束も早かった(ハイパーパラメータのちょっとした違い?)ので一石二鳥だった。
現状はまだこのdqnでどうやればネットワークとかReplayBufferをいじれるかという見通しを立てたところで止まっている。
一応先週の目標は「見通しを立てる」ところまでではあったので想定通りの進み具合ではあるが、まぁ実際に実装までできないものだなという学びでもある。
その他
Sutton & Bartoの強化学習(第2版)の翻訳されたものをようやく読み始めている。非エピソディック設定とか、従来的なQ学習(から派生するDQN)に触って、読む準備が多少できてきたか。
しかし内容はかなり難しい。テーブルベースのところはなんとか、くらいではあるけど、関数近似が入ったところから完全に置き去りにされている。
最後の章で課題として挙げられていたところは
- 一つ目はオンラインでの学習。これはやっていきたい。深層学習がオンラインに向いてないと言及されているが、もっと良い手法があるとも感じられていないのでとりあえずこれでやるしかなさそう
- 二つ目は汎用性を見据えた表現学習。これについても深層学習でについて悲観的な見方をされているが、なんとかなるんじゃないかな
- 三つ目はプランニングのためのモデル(モデル自体の学習も含む)。明らかに難しい話だが、モデルの学習も現状は深層学習以外道が見えていない
- 四つ目はタスク選択の自動化。これは初めて聞いた話でまだピンと来ていない
- 五つ目は好奇心の導入。これは環境モデルの学習と近いところで行われるのではないかという予想。環境をできるだけ少ない労力で説明できるようになることを目指すのが、好奇心の学習と関連するのではないか
- 六つ目は安全性。これに関しては粛々とやりましょう
という印象。
とりあえず一周目としては丁寧に数式を追いかけるというよりも書かれているトピックを把握する程度の雑な読み方をしたので、ここから気になったところをまた数式手書きして辿ってみたい。