強化学習をやってみたいから骨組みをつくったり、、、

2021年4月3日

強化学習を少しかじる

強化学習そういえばやったことないなと思ったので、少しだけかじってみる。
理論的な部分については、作りながら覚える+わざわざ記事にする必要ないので、、、

とはいえ、巷に転がっているのは振り子が落としたイケナイゲームをなんかゴニョっておしまいで、
え?自作はどーするの?ってなったので、今後自作ができるようなSAMPLEを探してみた。

なんかいい感じに纏まっているものないかと検索していたところ、こんなものを発見したので、これに沿ってやってみる。必要あらば適宜加筆を行う

こちらですが、問題定義は以下の様になっています。かなりシンプルですが、癖がありますねw

  • 状況:シャワーの温度最適化
  • できること:シャワーの温度を1度ずつ変更できる
  • シャワーは60秒間で1秒に一回変更できる。

いざ実装

とはいえ、こぴりつつ補足あらば加筆します

実行環境構築

実行環境と強化学習の環境がぶる。。。
今回は特別なものは使いません

環境をつくる

報酬定義

今回はかなりシンプルに作っていますが、
実際はどのように報酬を定義するか?は非常に重要です。強化学習はこいつを最大化する方向にしか動いてくれないので、見落としの先には、、、

環境の変化

実際には環境はアクションを受けて変化するのが常。
今回はシンプルに、アクションでは無くてアクション叩くたびになんかしらのノイズを加えてこの状況を再現します

一応これで環境はできました。自作には上コードの4つの関数は必須だそうです。次に中身を見てみます。
https://github.com/openai/gym/blob/master/gym/core.py

観測のサンプルとアクションのSAMPLEを取得しました。実行毎にことなるはずです.
次に、試しに適当に25ループ回してみた。

ここでは、ひたすら
(1)行動を実行し、
(2)observation, reward, done, infoの4value tupleを受領、
(3)累積報酬計算
なので、とくに環境がどうだ!と言って省みることはしませんので25回実行しても、良くなりません。

ちゃんとエージェントを考える。

環境と対にあるのがエージェント。
エージェントの脳みそであるモデルをつくる。一昔前だとこの脳味噌がDNNではなくて、正解データに基づいた勾配法とかを使っている

隠れ1層の単純モデルにしよう

モデルをエージェント本体に入れる

rlライブラリから便利なモジュールを入れ込む

方策としてBoltzmannQPolicyを用いる。
BoltzmannQPolicyは行動のQ値をソフトマックスにかけて選択する手法。つまりは、-1/0/1のどれが良いのかをQ値をもとに選択してくれる。他にはGreedyQPolicyとか色々あるってのが、実際にコードを見るとわかる

https://github.com/keras-rl/keras-rl/blob/master/rl/policy.py
これによると、自作なら(1)Policyクラスを継承の上で(2)select_acitonメソッドを継承しろと言っている

Experience replay

初めて知ったのだが、強化学習にはExperience replayという最適化手法がある。
過去の経験(=行動とその結果)をサンプリングして学習データとして再利用したりする手法で、時間的に近いと「多分」似た経験だから局所最適解に陥っちゃう。
ってことで、ある程度溜め込んで経験をランダムにピックアップしてミニバッチとして入力させることでうまく行くらしい
今回はSequentialMemoryを使用する
https://github.com/keras-rl/keras-rl/blob/master/rl/memory.py
もう一つクラスが見えますが、これはまたの機会に

一気に書いてみた。
compileの部分は最適化手法がいくつか使えるのと、metricがtfと同じように使える。
残念なのはloss関数を定義できない点。
今回はすぐ学習終わらせたいのでepisode=500に設定

Testしてみる

ここにはtensor_callbackみたいなノリでコールバック関数を定義できる。
ちなみに、visualizeはちゃんと環境の法でrenderメソッド定義していないとエラーゲロるので今回はずっとfalse

凡例つければよかったが、10エピソードの中ではいい感じになっている印象はないですね
まぁちゃんと学習すればよいですが

強化学習ではエージェントの脳味噌はモデル(=DNN)なのんで、
このときのDNNの重みさえ保存してしまえば後で再利用OK

できた。

こんかい参考にしたsiteたち

えーなんか作りたいねーこれつかって。
その前にやっぱり理論をしりたくなる