今回兼ねてからやってみたかった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
たまに点をいれられるようになりました。
エポック750辺りのターミナルの様子です。
[深層強化学習]pon-3
10点ぐらいいれられるようになりました。
[深層強化学習]pon-4
かなり勝てそうになってきました。
[深層強化学習]pon-5
ついに勝ちました!!
[深層強化学習]pon-6
ほぼ完封に近いことができるようになりました。
必勝パターンを覚えたようです。
残念ながら0-21の試合は取れませんでした。
最後の方のターミナルの様子
かなり学習に時間はかかりましたが、最終的には完封勝ちまで行けました。
途中から点を取る方法を学びその後は必勝パターンを学んだようです。
相手のコンピューターはおそらくボールの位置を一定のスピードで追随するだけのようです。
それより早く動かせれば得点を取れるということです。
こんな感じで強化学習はどんどん学びます。
面白かったです。
応用例
では、この強化学習は何に応用できるのでしょうか?
みなさんが知っている通り一番有名なのは今だとAlpha Goですね。
他には2Dゲームが多かったです。
最近は徐々に3Dのゲームもできるようになってきています。
CS275 Project: 3D Flappy Bird with Reinforcement Learning
計算量どのくらいかかるんだろうか...
Asynchronous Methods for Deep Reinforcement Learning: Labyrinth
そのうちどんなゲームでも人間は勝てなくなるでしょうね。
ゲームができるということは現実でもかなりうまくいきそうですが、ゲームという閉じた環境だからこそ勝てているのでしょう。
Deep learningは閉じた環境だとめちゃめちゃ強いですからね。
他にはロボットの制御とかもあります。
Deep Reinforcement Learning for Robotic Manipulation
ドアの開け閉めを覚えさせる様子です。
人が邪魔しても大丈夫なのが面白いです。
Robot Control with Distributed Deep Reinforcement Learning
最後の方に動いている様子があります。
なんかみていると酔いそうです。
ロボットに使えるようになると劇的に変化すると思います。
今までプログラムしたことしかできなかったのが、他のこともできるようになると臨機応変な対応ができるようになりそうです。
そのうちロボットが手術とかするようになるかもしれませんね。
他には、株や仮想通貨の取引も自動化できるようになるかもしれません。
webなどのデザインも強化学習で学んでいくことによって柔軟に変わっていくかもしれません。
きっと応用の幅はかなり広いと思います。
普通の機械学習はデータありきでそれを使って学びますが、強化学習は繰り返しできる環境を与えてデータを生成しながら学ぶので柔軟性があります。
感想
去年から機械学習の勉強を始めて、古典的機械学習、deep learning、CNN、RNN、自然言語処理、GAN、DQNととりあえず一通りやってみましたが一番面白そうだと思ったのはこの強化学習でした。
今後は強化学習とKaggleを引き続きやっていきます。
ちなみに強化学習の勉強の進め方は、下の2冊の順でやるといいらしいです。
強化学習 | Richard S.Sutton, Andrew G.Barto, 三上 貞芳, 皆川 雅章 |本 | 通販 | Amazon
これからの強化学習 | 牧野 貴樹, 澁谷 長史, 白川 真一, 浅田 稔, 麻生 英樹, 荒井 幸代, 飯間 等, 伊藤 真, 大倉 和博, 黒江 康明, 杉本 徳和, 坪井 祐太, 銅谷 賢治, 前田 新一, 松井 藤五郎, 南 泰浩, 宮崎 和光, 目黒 豊美, 森村 哲郎, 森本 淳, 保田 俊行, 吉本 潤一郎 |本 | 通販 | Amazon
参考文献
https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%B3_(%E3%82%B2%E3%83%BC%E3%83%A0) https://qiita.com/icoxfog417/items/242439ecd1a477ece312 http://sssslide.com/speakerdeck.com/takuseno/survey-of-deep-reinforcement-learning%20%20 https://github.com/imai-laboratory/dqn https://deepage.net/machine_learning/2017/08/10/reinforcement-learning.html