<基礎学習>10/16-18 cartpole問題を強化学習で攻略する5

以下の前回記事の続きです。
kurupical.hatenablog.com

cartpoleについては以下をご参照ください。
kurupical.hatenablog.com

やったこ

  • 割引率の変更(0.95→0.99)
    ※割引率とは、「将来報酬の期待値をどの程度評価するか」です。

結果
f:id:kurupical:20171018223951p:plain:w400

timestep(赤線)がゲームクリアである200に一瞬届きました。

「ゲームクリア水準(timestep>195)ならば学習を終了し、モデルを保存する」というロジックを入れ忘れていたため、ゲームクリア時の学習モデルが取得できず…。

上記の学習を再現させようと思ったのですが、できませんでした。
正しいモデルなら再現はできるはずなので、まだ学習モデルが不完全ですね。

  • デバッグ
    DQNが下す判断を見てみました。
    すると、選択肢が極端に片方に偏っていました。(ずっと右に動かし続ける、ずっと左に動かし続ける、など)
    数式レベルでいろいろ考えたのですが、おそらく原因は以下です。

    • 報酬の与え方
      もともとは失敗=-1だけ与えていました。
      正負両方の報酬を与えないと、初期値によって選択が極端に偏ってしまうような気がします。
      ということで、生存=+0.005&失敗=-1を与えるようにしました。
      DQNの重みの初期化は正規標準分布に従っているため、報酬を-1〜+1にclippingしています。
  • いい経験だけを残すようにする
    過去の経験からランダムに学習する仕組みになっていますが、良い経験を優先的に学習するような仕組みにしました。
    この方法については、以下のサイトを参考にしました。 qiita.com

ここまでやりましたが、グラフの結果よりいいものは得られず。。

雑記

機械学習を仕事にすること

怖い

システムは(雑な言い方をすると)設計書通りに作れば完成になります。一方、機械学習人工知能は「完成するかどうか」がそもそも保証されません。
(今回のcartpoleに関してはDQNでできた記事が沢山上がっているので、大丈夫だという保証がありますが)
これ、とても怖くないですか?
今は趣味でやっているからよいですが、請負とかになるとすごいプレッシャーがかかりそうです。

作業のやり方が悪い

ある程度プログラムが完成したらいろいろパラメータを触って調整してTry&Errorするのですが、どうもこれが効率が悪いみたいです。
cartpoleにここまで時間を取られるとは正直思っていなかったです。。
性格の問題も大きいと思いますが、自分は以下のような問題に直面しました。

  • 頭を使わなくなる
    とりあえずパラメータぐちゃぐちゃいじるかーとなる。
  • 堂々巡りになる
    「あれ?このパラメータ設定前もやったっけ?」どこまでテストしたか把握できなくなる。

疲れてくると考えずすぐ手を動かしてしまい、より迷宮入りするという悪循環。。
解決策として、「やろうとするTryをメモる→やる」という流れを徹底するということを試しに1日やってみました。
こんな感じ
f:id:kurupical:20171018231511p:plain
激しくめんどくさいのですが、思考を整理しながらできるのでいい感じです。

その他

  • 人工知能の資格が最近できたようで、取ろうか迷い中です。
    www.jdla.org
    問題見てるとGENERALの方はホントに触りだけって感じで、すこし勉強したら取れそうです。
  • AIのオンラインゼミサービス
    aidemy.net
    明日、これの話を聞こうと思ってます。しばらくは暇なので…。