TL;DR
Googleが出した強化学習フレームワークDopamineを試す記事、第二弾
第一弾はこっち
結論: ありがたい、が、まだ手間が多そう
概要
公式を頼りに、実際に使うとなったらどうすれば良いのかの方法論を考えていく。
試すのは以下のexample。
python -um dopamine.atari.train \
--agent_name=dqn \
--base_dir=/tmp/dopamine \
--gin_files='dopamine/agents/dqn/configs/dqn.gin'
流れとしてはこんな感じで調べていく。
- 引数として指定できるパラメータの種類
- 実行時の処理の流れ
- 別の学習則(?単語があっているか不明)に切り替える方法
引数として指定できるパラメータの種類
まずは引数から。
agent_nameで学習エージェントの指定をしているらしい。今は
- dqn
- [rainbow](Hessel et al., Rainbow: Combining Improvements in Deep Reinforcement Learning. Proceedings of the AAAI Conference on Artificial Intelligence, 2018.)
- implicit_quantile(これはまだ論文がどれか見つかってないです。)
が実装済みの模様。
実装を見にいくと、コメントの行数が非常に多いので面倒に見えるかもしれないが、
実際のコードはそこまで複雑ではなさそう。
ただの予想だが、将来的には今の三つ以外にもどんどん種類が増えていくはずなので
どれくらいの頻度で種類が増えていくのか楽しみ。
base_dirは実行結果を保存する場所の模様
checkpointsやlogsがあるので、学習の結果やログがここに保存されている。
学習させた結果を別のマシンに読み込ませたり、学習過程や結果を可視化するために使えそう。
tensorboardがあるので、これで可視化するのかな?
gin_filesは強化学習で使うパラメータを決める設定ファイルだった。
(GridSearchとかでパラメータ探索をすることは想定されてないのか?)
実行時の処理の流れ
では、dopamine.atari.trainの中身を見ていく。
ここ自体はびっくりするくらい簡単だった。
というのも、学習エージェントもatariも別の場所で実装されていたから。
学習させたいモデルと、学習に使いたいエージェントを別個に作成し、
あとで当てはめるだけで学習が出来るということを示唆してくれている(気がする)ので
これは非常にありがたい。
学習させたいモデルはこんな感じで読んでいたので、中身を見ていく。
from dopamine.atari import run_experiment
これも、割と面倒に見えるが、大半はコメントと設定ファイルの読み込みだけで
それ以外だと、各状態との時に行動を行なった場合に与えられる報酬を出力する部分と
それをエピソードとして実行している程度に見える。
もちろん、自分で実装するのは非常に面倒だし、変更を加えるのも面倒だが
このくらいなら諦めれば読める。
各サービス独自のモデルを適応するときも、学習をさせるだけならそこまで難しくはなさそう。
最後に、肝となる部分を確かめていく。
from dopamine.agents.dqn import dqn_agent
from dopamine.agents.implicit_quantile import implicit_quantile_agent
from dopamine.agents.rainbow import rainbow_agent
これ全てを見るのはちょっと大変なので、dqnだけ見ておく。
今度はちょっと面倒だった。
やっていること自体は、状態と行動から報酬を予測して選択するだけの
単純なもので、Deepの部分もtensorflowを使うことで、見た目のコードは短くなっている。
ただ、関数の数が多いので、頭から追いかけるのが面倒。
関数同士の関係を可視化してくれるツールとか無いもんだろうか?
Rails-ERDみたいなやつ。
別の学習則(?単語があっているか不明)に切り替える方法
散々めんどくさがったが、同じように関数を用意して、モデルや学習器を良しなに作り変え、
dopamine.atari.trainと同じようにして、自作したものを呼べばできそう。
これから
- dqn
- [rainbow](Hessel et al., Rainbow: Combining Improvements in Deep Reinforcement Learning. Proceedings of the AAAI Conference on Artificial Intelligence, 2018.)
- implicit_quantile
以外にも公式の実装が増えたり、誰かが実装したものを呼んでくることで、
自分で強化学習を実装する必要がなくなっていくのかもしれない。
まとめ
もっとモデルが作りやすくなって、エージェントの数も増えてくれれば、便利になってくると思う。
ただ、今のままだと、Dopamineを使うメリットが薄くて、
自分で実装した方が楽なんじゃ無いかと思ってしまう。
dqnやrainbowの実装などは、ありがたく参考にさせてもらう。