今回兼ねてからやってみたかったDQN(深層強化学習)を触ってみました。 とは言っても、githubにあったコードを実行するだけですが、実際に学習していく様は楽しかったです。
強化学習とは
はじめに、私的に強化学習はこれこそがAIだと思っています。
今のDeep learningは教師あり学習が主流で結局データを持っていれば勝ちな気がします。
また、データに合わせて学習するだけなのでデータに沿った答えしか出せず面白みに欠ける気がします。
強化学習は状況に応じて学ぶのでAlphaGoみたいに人間が思いつかないようなものも思いつきうるのでとても面白いと思います。
今回実際にやるのはAtariのゲームponです。
詳しく知りたい方はwikipediaをみてください。
https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%B3_(%E3%82%B2%E3%83%BC%E3%83%A0)
今回は21点先取で、左側がコンピュータで右が自分です。
お互いにパドルを動かして球を入れれば得点となります。
強化学習の要素には、環境、エージェント、状態、報酬、行動などがあります。
環境とは今回の場合は、ponのゲームでしょう。
エージェントは、右のパドル。
状態は、ボールの位置と自分と相手のパドルの位置。
報酬は、得点とします。
行動は、自分のパドルの上下。
今回の目的は報酬の最大化つまり得点を最大とすることです。
自分の得点 - 相手の得点 = 報酬です。
ある環境に置かれたエージェントが状態を把握して行動し、報酬を最大化するのが強化学習です。
今回は、ponのゲームにおいて右のパドルをボールの位置と自分と相手のパドルの位置にもとずいて上下させ、得点を最大化します。
これだとただの強化学習です。
深層強化学習は何が違うのでしょうか?
簡単に書くと今までゲームの特徴量をいちいちゲームに合わせて人間が手動で設計しなければならなかったのがDeep learningを用いることで画像から直接特徴量が抽出できるようになったのです。
文字よりも画像を見せてもらった方がわかりやすいということでしょうね。
他にも強化学習と深層強化学習違いはたくさんあります。
詳しい解説はこちらをみてください。
http://sssslide.com/speakerdeck.com/takuseno/survey-of-deep-reinforcement-learning
今回は21点先取で、左側がコンピュータで右が自分です。
お互いにパドルを動かして球を入れれば得点となります。
強化学習の要素には、環境、エージェント、状態、報酬、行動などがあります。
環境とは今回の場合は、ponのゲームでしょう。
エージェントは、右のパドル。
状態は、ボールの位置と自分と相手のパドルの位置。
報酬は、得点とします。
行動は、自分のパドルの上下。
今回の目的は報酬の最大化つまり得点を最大とすることです。
自分の得点 - 相手の得点 = 報酬です。
ある環境に置かれたエージェントが状態を把握して行動し、報酬を最大化するのが強化学習です。
今回は、ponのゲームにおいて右のパドルをボールの位置と自分と相手のパドルの位置にもとずいて上下させ、得点を最大化します。
これだとただの強化学習です。
深層強化学習は何が違うのでしょうか?
簡単に書くと今までゲームの特徴量をいちいちゲームに合わせて人間が手動で設計しなければならなかったのがDeep learningを用いることで画像から直接特徴量が抽出できるようになったのです。
文字よりも画像を見せてもらった方がわかりやすいということでしょうね。
他にも強化学習と深層強化学習違いはたくさんあります。
詳しい解説はこちらをみてください。
深層強化学習の動向 / survey of deep reinforcement learning - SSSSLIDE
強化学習の環境構築
強化学習の参入障壁の一つに環境構築がめんどくさそうだというのが個人的にありました。
調べてみると簡単でした。
git clone https://github.com/openai/gym
cd gym
pip install -e . # minimal install
pip install ‘gym[atari]’
これでatariのゲーム環境を使えます。
そしてこれでパックマンができます。
ランダムに動くだけですが…
import gym env = gym.make('MsPacman-v0') env.reset() for _ in range(5000): env.render() env.step(env.action_space.sample()) # take a random action
実際にやってみた
では、実際に試してみましょう。
このリンクに書いてある通りにやれば問題ないです。
GitHub - imai-laboratory/dqn: DQN implementation for checking baselines
GitHub - imai-laboratory/lightsaber: Utility scripts for machine learning research
python train.py –gpu 1 –render –final-steps 10000000 でtrainingさせます。
いい結果が出るまでにはかなり時間がかかります。
Macbook proで21-0で勝つまでに2日半ぐらいかかりました。
[深層強化学習]pon-1
ただ小刻みに揺れているだけです。
左がコンピュータで右が自分
[深層強化学習]pon-2
たまに点をいれられるようになりました。