Pythonではじめる OpenAI Gymトレーニング

6,886 views

Published on

Pythonではじめる
OpenAI Gymトレーニング

Published in: Data & Analytics
0 Comments
34 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,886
On SlideShare
0
From Embeds
0
Number of Embeds
511
Actions
Shares
0
Downloads
89
Comments
0
Likes
34
Embeds 0
No embeds

No notes for slide

Pythonではじめる OpenAI Gymトレーニング

  1. 1. Pythonではじめる OpenAI Gymトレーニング by icoxfog417 @ PyConJP 2016
  2. 2. Agenda ● OpenAI Gymを体験しよう ○ OpenAIとOpenAI Gym ○ OpenAI Gymを動かしてみる ○ 簡単な「AI」を作ってみる ○ 「AI」の限界 ● 「AI」を成長させよう ○ 強化学習というアイデア ○ アイデアのモデル化と、最適化の方法 ○ より複雑なタスクへの挑戦 ● Deep Learningとの融合 ○ Deep Q-learningの登場 ○ Deep Q-learningにおける3つのトリック ○ Deep Q-learningの実装 ● おわりに 2
  3. 3. About Me
  4. 4. icoxfog417 TIS株式会社所属 業務コンサルタント出身で、サプライチェーン周りの開発を担当してました(得意技は石油化 学製品の価格改定)。kintoneエヴァンジェリストもやってます。 業務システムに先進的な技術を取り込んで活かしたいとの思いから、戦略技術センターに 異動。現在は、機械学習や自然言語処理を活用して新規サービスのプロトタイピングなど を行っています。 Qiitaへの投稿もしてます。 今日の発表は、この記事が元 になっています。
  5. 5. icoxfog417 kintoneとWatsonを連携させた災害対策ソリューション 災害時、TwitterなどのSNSから自動で情報を収 集し、kintoneに登録(重要度やカテゴリを、 Watson NLCで自動判定)。 災害対策マニュアルを学習させたWatson R&Rか ら、必要な対策を提案。 会議診断システムさゆり 会議の様子をカメラで撮影し、リア ルタイムにその会議の評価を出力 する(機械学習により、評価を算 定)。 戦略技術センターの活動 原則はOPEN MINDであ り、検証結果などはほぼ 全てが公開されていま す。
  6. 6. 人とロボットとの分業による、生産的な接客の実現を検証中 Robot Dash Board Human customerA customerB customerC report take over (telepresence) 背景:生産年齢人口の現象による販売員単価増+ネットショッピングの普及による来店 者数減 コンセプト:ロボットが得意なところ/できることは任せ、人は人ならでは応対に注力する icoxfog417 対話システムシンポジ ウムでデモ予定
  7. 7. OpenAI Gymを体験しよう
  8. 8. OpenAIとOpenAI Gym OpenAIは、AIの研究を行う非営利の団体です。上記の目標のとおり、AIの研究成果を自己 (特定企業の)利益のためではなく、人類全体のために活用することを目的としています。そ のためコードも含めた研究成果は広く公開されており、今回紹介するOpenAI Gymもそのうち の一つになります。 9 目標はデジタルインテリジェンスの高度化をできるかぎり人 類全体の利益に資する形で推進すること。それが、経済的 (financial)な利益目的に制約されないことだ。 出資者の一人であるTesraのElon Musk氏
  9. 9. OpenAIとOpenAI Gym 10 Ilya Sutskever氏 Trevor Blackwell氏 Andrej Karpathy氏 所属する研究員の方たちは、Seq2Seqを提案したIlya Sutskever、Segwayを発明したTrevor Blackwell、画像の 説明文生成を行ったAndrej Karpathなど、泣く子も黙る 世界的に優秀な研究員・エンジニア達が所属。 日本人はまだいないようなので、ぜひ日本人初の OpenAI研究員を目指そう!
  10. 10. OpenAIとOpenAI Gym OpenAI Gymは、強化学習を開発、評価するための プラットフォームです。 強化学習は意思決定を行うための汎用的な仕組 みで応用性が高く、またその精度は近年飛躍的に 高まっています。 OpenAI Gymは、こうした注目を集める強化学習に おいて標準となる実験・評価環境を提供することを 目的としています。これにより、大規模な画像デー タセットであるImageNetにより画像分類の研究が発 展したのと同様の効果を狙っています。 12 環境を使うのはもちろん、実験結 果をアップロードしたり、他の人 の実行結果・実装を見たりするこ とも出来る
  11. 11. Let’s Try! ファミリーボクシング(1987)
  12. 12. OpenAI Gymを動かしてみる インストール方法は公式GitHubページを参照。 Mac/Linux(Ubuntu)が公式だが、Windowsでもbash on Windowsを利用することで動作させる ことが可能。 利用する「ジム(=学習環境)」によって、必要となるライブラリも異なってくる。これらは、選択 的にインストールすることが可能。 ※pip install gymで入るのは必要最低限のもので、Atariのゲーム環境を使う場合はpip install ‘gym[atari]’といったように指定する 14
  13. 13. OpenAI Gymを動かしてみる Gymの基本的な使い方は以下の通り。 15 import gym env = gym.make("CartPole-v0") for i_episode in range(20): observation = env.reset() done = False while not done: env.render() action = env.action_space.sample() observation, reward, done, info = env.step(action) Environment (CartPole-v0) Agent action observation, reward done (episode end) gym episodeの単位は、各ゲームによって異なる。そのため、gymを使っていきなり強化学習に入るよりは、試しに動かし てepisodeの単位、actionの意味を調べるのがおすすめ。
  14. 14. Let’s start from simple one 16 まずは簡単なAIを作ってみる
  15. 15. 簡単な「AI」を作ってみる 17 Agent Environment action (フン=左 & フン=右) observation, reward
  16. 16. 簡単な「AI」を作ってみる 18 Agent Environment action (フン=左 & フン=右) observation, reward def test_funfun_defence(self): env = Environment(env_name="Pong-v0") agent = CycleAgent((2, 3), keep_length=20) for episode, step, reward in env.play(agent, episode=1): pass
  17. 17. 簡単な「AI」を作ってみる 19 試合開始(Demo) code here
  18. 18. 簡単な「AI」を作ってみる 20
  19. 19. 「AI」の限界 人が設計するアルゴリズムや、人が「正解」を与える教師あり学習 の場合、「人間の限界」がそのままAIの限界になる。 ● AIを作る人間がその道のエキスパートとは限らない ● エキスパートであっても、自分の感覚を正しく実装するのはと ても手間で、困難(途中で→) この上限を突破するには、「人が教える」という手法から、「AI自ら 学習する」という手法へ切り替える必要がある。 そのための手法の一つが、強化学習になる。 21
  20. 20. 「AI」を成長させよう
  21. 21. 強化学習というアイデア 人がAIに教えるのでなく、AIが自分自身で学習するようにする。 「評価」はするが、「教育」はしない。 23 評価はしてくれるが、評価基準は教え てくれない。 ⇒プレイヤー(Agent)自らが発見する 必要がある。
  22. 22. アイデアのモデル化 24 Agentが置かれている状態 を、stateとする state Agentは、stateで可能な行動 =actionをとる。 actionは、戦略=policyに従い 決定される。 I like right! actionの結果、新しい状態 state’へ遷移すると共に、設 定された報酬=rewardを受け 取る。 state’ reward action
  23. 23. アイデアのモデル化 25 Agentが置かれている状態 を、stateとする state Agentは、stateで可能な行 動=actionをとる。 actionは、戦略=policyに従 い決定される。 I like right! actionの結果、新しい状態 state’へ遷移すると共に、設 定された報酬=rewardを受け 取る。 state’ reward action Markov Decision Process (MDP)
  24. 24. アイデアのモデル化: 最適化の方法 26 state +1 -1 迷路で、以下の位置(state)にいるAgentについて考える
  25. 25. アイデアのモデル化: 最適化の方法 27 +1 -1action →:GOAL!(+1でゲーム終了) ←:ゴールから遠ざかる ↑:その場にとどまる ↓:地獄の一丁目へ state’ state’ state’ state’
  26. 26. アイデアのモデル化: 最適化の方法 28 +1 -1 そこから、一歩手前の状態について考えてみる。 遷移先(state’)の報酬を使い、現状態(state)からスタートした場合の期 待報酬が計算できる ・遷移先では、最適な行動をとるとする ・遷移先の報酬は将来の報酬のため、割引を行う つまり、 「期待報酬=現状態の報酬+割引率×遷移先の最大報酬 」 state state’
  27. 27. アイデアのモデル化: 最適化の方法 29 s_00 s_10 s_20 s_01 s_21 s_02 s_22 s_03 s_23 s_12 s_13 +1 -1 次に、ゴールまであと2歩の状態まで下がり、同様に報酬を計算する。 遷移先の期待報酬から、現在 時点の報酬を計算する(遷移 先では、最適な行動をすると 仮定する) Bellman Equation
  28. 28. アイデアのモデル化: 最適化の方法 30 s_00 s_10 s_20 s_01 s_21 s_02 s_22 s_03 s_23 s_12 s_13 +1 -1 これをn歩前まで・・・と繰り返していくと、期待報酬の地図を作ることができる
  29. 29. アイデアのモデル化: 最適化の方法 31 まとめ 各状態における、期待報酬の値 を0などで初期化する。 各状態で、期待報酬の値を計算 する(Bellman Equation)。 計算した期待報酬の値を元に、も う一度計算を行う。 step=1 step=2 ... step=n 期待報酬の値が、step前後で変わらなくなってくる(=収束する)。これ で計算終了。 Agentは、期待報酬が最大の方向に行くようにすればOK!
  30. 30. アイデアのモデル化: 最適化の方法 32 まとめ 各状態における、期待報酬の値 を0などで初期化する。 各状態で、期待報酬の値を計算 する。 計算した期待報酬の値を元に、も う一度計算を行う。 step=1 step=2 ... step=n 期待報酬の値が、step前後で変わらなくなってくる(=収束する)。これ で計算終了。 あとは、期待報酬が最大の方向に行くようにすればOK! Value Iteration
  31. 31. We have done it …? 33 これで問題は解決?
  32. 32. Think about Rockman10 34
  33. 33. Question 35 問:今、状態(state)の数はどれだけあったでしょう?
  34. 34. Problem 36 死亡 クリア 状態数多すぎ問題 Start
  35. 35. 状態定義の限界 複雑なタスクでは、状態数が多くその全てを列挙することは難しくなってくる。また、当然各状 態の組み合わせの数(状態遷移の数)も爆発的に増える。 ⇒Value Iterationで計算しようとすると、永遠に終わらないくらい時間がかかる。 37 今まで:状態の数と、そのつながりが明 らかで、計算可能な程度の量 今:状態の数と遷移数がわけわからんくらい多く て、計算しきるのはとても無理!
  36. 36. We need new idea 38 どうするか?
  37. 37. 未知なる台地なら探索から puhoto by Moyan Brenn
  38. 38. より複雑なタスクへの挑戦 40 +1 -1 よくわからないので、 とりあえず行動してみ る
  39. 39. より複雑なタスクへの挑戦 41 +1 -1 よくわからないので、 とりあえず行動してみ る
  40. 40. より複雑なタスクへの挑戦 42 +1 -1 よくわからないので (以下略)
  41. 41. より複雑なタスクへの挑戦 43 +1 -1 ぐはぁぁぁぁ!! (ゲーム終了)
  42. 42. より複雑なタスクへの挑戦 44 +1 -1 遷移先の報酬から期待報 酬を計算していく 先の報酬が割り引かれるの は、Value Iteration同様
  43. 43. より複雑なタスクへの挑戦 45 +1 -1 探索は徐々に行われるので、最初は危ないと思っ ていたところも実は大きな報酬の近くだった、とい うことがありうる。 ⇒一回の探索結果をどれだけ信用するかについ ては、調整が必要する。
  44. 44. より複雑なタスクへの挑戦 46 +1 -1 探索(=行動)によって、状態と、その遷移構造を明らかにしてい く。また得られた報酬を元に、期待報酬を更新していく。その、 探索での更新量はパラメーターで調整する。 行き止まり
  45. 45. 探索(=行動)によって、状態と、その遷移構造を明らかにしてい く。また得られた報酬を元に、期待報酬を更新していく。ただ、 その更新量はパラメーターで調整する。 より複雑なタスクへの挑戦 47 +1 -1 行き止まり Q-learning
  46. 46. より複雑なタスクへの挑戦 48 +1 -1 行き止まり 報酬が得られるルートがわかっていても、もっと安全だったり、 より報酬が高いルートがあるかもしれない。 ⇒どれだけ探索をするか、どれだけ探索結果を活用するかの バランスが重要な戦略になる。
  47. 47. より複雑なタスクへの挑戦 49 +1 -1 行き止まり 報酬が高いルートがわかればそれでいいけれども、もっと安全 だったり、報酬が高いルートがあるかもしれない。 ⇒どれだけ探索をするか、どれだけ探索結果を活用するかを 割合で決める。 ε-greedy法 (random by ε)
  48. 48. We finally made it? 50 これでいけそう?
  49. 49. back to 状態定義の限界 ゲームを含む時系列のタスクでは、そもそも「状態」の境界線があいまい(↓は、果たして「4 つの状態」といえるか?)。 そのため、状態を連続的な値で表現したい。具体的には、以下の場合状態である「画像」を 連続値(ベクトル)で表現したい。 51
  50. 50. back to 状態定義の限界 画像からの特徴抽出といえば・・・ 52 Clarifai
  51. 51. Deep Learningとの融合
  52. 52. Convolutional Neural Network 54 Deep Learning界において、「香川といえばうどん」と同じくらい「画像といえば CNN(Convolutional Neural Network)」は当然のこととして扱われている。 Clarifai CNNは、画像から特徴を抽出して判断するのに優れた手法。 これを応用して、以下のような仕組みを構築する。
  53. 53. Deep Q-learning 画像であるstateを、画像処理に優れたConvolutional Neural Network)に流し込み、「その状 態でどのactionがいい(=期待報酬が高い)か」を出力させる。 ⇒期待報酬の計算プロセス(Q関数)を、Deep Learningに置き換える。これがつまるところ ・・・ 55 state 期待報酬 action A B ・ ・ Convolutional Neural Network
  54. 54. Deep Q-learning ※価値関数(Q関数)自体をニューラルネットで近似するアイデアは以前からあったものであ り、よって学習を成功させる手法まで含めてDQNとよぶ。 DQN (Deep Q-learning) puhoto by Chloe Muro
  55. 55. Deep Q-learningのプロセス 57 ・ ・ ・ episode (1ゲーム終了ま での期間) experience ・ ・ ・ replay 現状態の報酬 遷移先の報酬 新しい期待報酬 誤差 ⇒DQN更新 DQN 定期的にコピー 行動とその結果 (state/action/遷移先 state/reward)を記憶 報酬のclipping 報酬は-1,0,1に統一する (どんなゲームにも対応できるようにする)
  56. 56. Deep Q-learningのプロセス 58 ・ ・ ・ episode (1ゲーム終了ま での期間) experience ・ ・ ・ 行動とその結果 (state/action/遷移先 state/reward)を記憶 replay 現状態の報酬 遷移先の報酬 新しい期待報酬 誤差 ⇒DQN更新 DQN 定期的にコピー Fixed Target Q-Network 遷移先報酬を計算する際の重みはし ばらく固定し、定期的に更新する Experience Replay experienceに蓄積したものを、シャッフルして学習デー タにする。 ⇒学習データ間の相関を除去する(普通にやると時系 列に並んでいるため、強い相関がある)。
  57. 57. Deep Q-learningのプロセス 59 ・ ・ ・ episode (1ゲーム終了ま での期間) experience ・ ・ ・ replay stateの報酬 state’からの期待報酬 探索から算出された 期待報酬 誤差 ⇒DQN更新 DQN 定期的にコピー Fixed Target Q-Network 遷移先報酬を計算する際の重みはしばらく 固定し、定期的に更新する(報酬計算の安 定性を高めるため)
  58. 58. Deep Q-learningの実装 実行結果(Open AI Gymへアップロード済み) 60
  59. 59. Deep Q-learningの実装 DQNは、結果が出るまでかなり時間がかかる。そのため、実際計算しないとわからないこと 以外は可能な限り事前にテストしておくことが重要。 ● 感覚的にパラメーターの影響をかなり受けるため、テストしておかないと処理のミスか パラメーターのチューニングの問題かわからなくなる。 ○ 責務分担・処理の独立化を行い、手元のテストでつぶせるバグはすべてつぶして おくこと。 ○ これを怠ると、GPUの場合お財布、CPUの場合時間に致命的なダメージを負うこ とになる ● GPUはほぼ必須(CPUの場合、いい感じかどうかわかるのに1~2日はかかる) ○ GPUインスタンスを使おう ○ OpenAI Gymを検証しているといえばAmazonから$250分もらえるらしい 61
  60. 60. Deep Q-learningの実装 62 Environment(gym) DQNTrainer DQNAgent observation action train 学習時 observation action 実行時 Trainerが取 れるだけ experience buffer Q-Network Environment(gym) DQNAgent Q-Network icoxfog417/chainer_pong
  61. 61. Deep Q-learningの実装 63 100~250
  62. 62. Deep Q-learningの実装 64 DQNの実装に必要なコードの 行数
  63. 63. Deep Q-learningの実装 アルゴリズムの実装自体にかかるコードはかなり少なくてすむ(OpenAIのメンバである Andrej Karpathyさんのブログでは、実装にかかっているのはわずか130行(しかもコメント込 み))。加えて、昨今の機械学習系フレームワークの恩恵も受けられる。 Webアプリケーションを作ったりするより、ぜんぜん少ない行数で実装が可能。 65
  64. 64. Deep Q-learningの実装 66 詳細な実装方法について、ハンズオンを実施する予定です。 Comming Soon! 11月上~中旬
  65. 65. おわりに
  66. 66. おわりに OpenAI Gymは自体は、難しい知識がなくても動かして、試すことができます。数式などを理 解するところからよりも、まず環境に触れてその「面白さ」を体感してもらえればと思います。 その入り口の先にある強化学習は、人による教育の限界を超えるためのアプローチ方法で あり、最も研究が盛んな領域の一つです(だからこそ投資が行われているとも言えます)。本 日紹介した手法も、将来、また現時点ですでに時代遅れになっているかもしれません。 ただ、ベースとなる本質的な理論(Q-learningなど)は変わっていません。その意味では、本 日セッションに参加いただいた方は、すでにAI研究の一線の入り口に立っています。 68
  67. 67. Welcome to AI World! puhoto by Rog01
  68. 68. Thank you for listening!

×