<基礎学習>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)
聞いたことはあったのですがまだ触れてないです。概要だけでも勉強しておきたいです。
- 敵対的ネットワーク(GAN)
- 人工知能的要素
- 人はなぜ人たりうるのか?
好奇心、三大欲求、種の存続に動機付けされている?ロボットにはそれがない? - 言葉の意味理解に身体は必要か?
- 小説家は自分が体験していないこと(殺人とか)も想像して書ける
- 人はなぜ人たりうるのか?
とあるエンジニアさんのはなし
体重計に乗るのがめんどくさい→ベッドを体重計にしてやれ!って言ってたエンジニアの人がいた。
しかも実際にベッドにマイコンとか設置しちゃったとか。
エンジニアの鏡ですね。
「3回同じことやったら自動化ですよ」って言ってたのがすごい印象に残りました。