<基礎学習>10/5-6 cartpole問題を強化学習で攻略する(+雑記)

以前書いた記事の続き
kurupical.hatenablog.com
前回は、cartpoleのゲームをテスト的に動かしてみました。

前回に続いて、cartpoleのゲームを強化学習(DQN)で攻略することを目標にプログラムを作ってみました。

ソース構成の考察

ソース構成は以下です。

  • agent.py
    ゲームの操作を行う。
  • dqn.py
    DQNのネットワーク構造を定義。
  • organizer.py
    ゲーム(今回はcartpole)の進行役。
  • run.py
    学習/推論を行うプログラム。
    1000回学習→10回プレイ、を繰り返しさせています

プログラム作成

全体的に意識したこ

  • コメント多めに 自分でも何やってるかわからなくなる時があるので…。

思想

  • 探索と活用の割合(agent.pyのpolicyメソッド)
    今わかる良い方法を採用するのか、それとも更に良い方法を探すのかのバランス。
    →ε-greedy法 + Annealingを採用。 εの確率でランダムに行動(探索)し、1-εの確率で今わかっている良い方法を採用(活用)します。
    Annealingとは、試行回数に比例してεを低減させていくことです。

動かしてみた

前回の実績より
棒を立てられたフレーム数

  • ランダムに動かす:平均20フレーム
  • 棒の傾きと逆方向に動かす:平均36フレーム
  • 私が作成した強化学習プログラム:平均9フレーム

→ランダムに動かすよりヘボい性能…。どっかバグってますね。。
しばらくこいつと戯れることになりそうです。

その他

ソースコード

ソースコードは以下で公開しています。
github.com

雑記

NHKの番組

NHKがAIの番組をやっていたのですが結構おもろいです。ぜひご覧ください。
www.nhk.or.jp

第1回で気になったところ

  • 技術的要素
    • 敵対的ネットワーク(GAN)
      聞いたことはあったのですがまだ触れてないです。概要だけでも勉強しておきたいです。
  • 人工知能的要素
    • 人はなぜ人たりうるのか?
      好奇心、三大欲求、種の存続に動機付けされている?ロボットにはそれがない?
    • 言葉の意味理解に身体は必要か?
      • 小説家は自分が体験していないこと(殺人とか)も想像して書ける

とあるエンジニアさんのはなし

体重計に乗るのがめんどくさい→ベッドを体重計にしてやれ!って言ってたエンジニアの人がいた。
しかも実際にベッドにマイコンとか設置しちゃったとか。
エンジニアの鏡ですね。
「3回同じことやったら自動化ですよ」って言ってたのがすごい印象に残りました。