tech-circle #18 pythonではじめる強化学習 openai gym 体験ハンズオン

84
by icoxfog417 @ Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Upload: takahiro-kubo

Post on 21-Apr-2017

3.116 views

Category:

Data & Analytics


4 download

TRANSCRIPT

Page 1: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

by icoxfog417 @ Tech-Circle #18

Pythonではじめる強化学習OpenAI Gym 体験ハンズオン

Page 2: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Agenda

● OpenAI Gymを体験しよう○ OpenAIとOpenAI Gym

○ OpenAI Gymを動かしてみる

○ ルールで「AI」を作ってみる

● 「AI」を成長させよう○ 強化学習というアイデアのモデル化 [MDP]

○ 行動評価の方法 [Bellman Equation]

○ 最適化の方法 [Value Iteration]

○ 探索による最適化 [Q-learning]

○ 探索と活用のジレンマ [ε-greedy法]

● Deep Learningとの融合○ Deep Q-Networkの登場

○ Deep Q-Networkにおける3つのトリック

○ Deep Q-Networkの実装

● おわりに 2

Twitterで質問を受け付けます#techcircleja

Page 3: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

About Me

Page 4: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Takahiro Kubo (icoxfog417)

TIS株式会社 戦略技術センター所属

● 化学系メーカーの業務コンサルタント出身(得意技は石油化学製品の価格改定)

● 既存の技術ではシステムによる業務改善に限界があるとの実感から、異動

● 現在は機械学習や自然言語処理の研究・それらを用いたサービスのプロトタイピング

を担う

● kintoneエヴァンジェリスト

@対話システムシンポジウム @PyConJP 2016 @Cybozu Days 2016

Page 5: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

about team “chakki”(1/2)

所属するチームのミッション

すべての人が、ティータイムに帰れるようにする

すべての人が、ティータイム(15:00)に帰れる(茶帰) 社会を実現します。

この実現には、既存の仕事を効率化するのでなく、 根本的に「仕事の仕方」を変える必要

があります。しかし、慣れた仕事の仕方というのは簡単には変わりません。

そのため、実際に「体験」をし、効果を「実感」してもらうことが重要になります。 私たちは、

先進的技術を用い、仕事の仕方が変わる体験を提供していきます。

Page 6: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

about team “chakki”(2/2)

自動応答と遠隔操作による、接客業務の効率化

会議診断システムさゆり

「ロボットとの分業による接客の効率化」をコンセプトにして開発しているmaico

「会議に突っ込みを入れるロボット」をコンセプトにした会議診断士さゆり

Page 7: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

OpenAI Gymを体験しよう

Page 8: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン
Page 9: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

OpenAIとOpenAI Gym(1/3)

OpenAIは、AIの研究を行う非営利の団体です。上記の目標のとおり、AIの研究成果を自己

(特定企業の)利益のためではなく、人類全体のために活用することを目的としています。そ

のためコードも含めた研究成果は広く公開されており、今回紹介するOpenAI Gymもそのうち

の一つになります。9

目標はデジタルインテリジェンスの高度化をできるかぎり人

類全体の利益に資する形で推進すること。それが、経済的

(financial)な利益目的に制約されないことだ。

出資者の一人であるTesraのElon Musk氏

Page 10: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

OpenAIとOpenAI Gym(2/3)

10

Ilya Sutskever氏 Trevor Blackwell氏

Andrej Karpathy氏

所属する研究員の方たちは、Seq2Seqを提案したIlya

Sutskever、Segwayを発明したTrevor Blackwell、画像の

説明文生成を行ったAndrej Karpathなど、泣く子も黙る

世界的に優秀な研究員・エンジニア達が所属。

日本人はまだいないようなので、ぜひ日本人初の

OpenAI研究員を目指そう!

Page 11: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン
Page 12: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

OpenAIとOpenAI Gym(3/3)

12

OpenAI Gymは「AI」を開発・評価するためのツール、またプラットフォームです。

・・・

様々な学習環境が用意されており、そこで「AI」のアルゴリズムの開発・評価ができる。

Try!実験結果をアップロードして共有できる。他の人の実行結果・実装を見たりすることも出来る

Page 13: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

「AI」の開発って・・・?

Binary Koala

Page 14: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Let’s Try!

ファミリーボクシング(1987)

やればわかる!

Page 15: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

OpenAI Gymを動かしてみる(1/3)

環境構築の方法はこちらを参照。

Mac/Linux(Ubuntu)が公式だが、Windowsでもbash on Windowsを利用することで動作させる

ことが可能。

利用する「ジム(=学習環境)」によって、必要となるライブラリも異なってくる。これらは、選択

的にインストールすることが可能。

※pip install gymで入るのは必要最低限のもので、Atariのゲーム環境を使う場合はpip

install ‘gym[atari]’といったように指定する

15

Page 16: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

OpenAI Gymを動かしてみる(2/3)

Gymの基本的な使い方は以下の通り。

16

import gymenv = 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() next_observation, reward, done, info = env.step(action)

Environment(CartPole-v0)

Agent

action

observation, rewarddone (episode

end)

gym

①Environmentからはobservationが得られる②Agentは、observationを基にactionを行う(ここではランダムに選択)③actionにより、Environmentから次のobservationと、行動に対する報酬が与えられる⇒この報酬を最大化したい

②③

テストに出る

Page 17: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

OpenAI Gymを動かしてみる(3/3)

つまり(狭義の)「AI」の開発とは、環境が与えられたときにその環境に対し・・・

1. 得られる報酬を最大化する

2. しかもすばやく最大化する

3. ひいては、異なる環境でも1, 2ができる(汎用的である)

アルゴリズムを開発すること。

これまでは人によって学習・評価に使う環境に差異があることもあったが、Open AI Gymとい

う統一の環境ができたことで、お互いのアルゴリズムを公平に評価できるようになった。

17

Page 18: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

どんなアルゴリズムがいいのか?

Windell Oskay

Page 19: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Let’s start from simple one

19

まずは、シンプルなルールで挑戦してみる

Teach!

Page 20: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

ルールで「AI」を作ってみる(1/4)

20

Agent Environment

action(フン=左 & フン=右)

observation, reward

Page 21: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

ルールで「AI」を作ってみる(2/4)

21

Agent Environment

action(フン=上 & フン=下)

observation, reward

def act(self, observation): if len(self._plan) == 0: self._plan += [self.action_up] * self._interval # up self._plan += [self.action_down] * (self._interval * 2) # back to center & down self._plan += [self.action_up] * self._interval # back to center return self._plan.pop(0)

Fun(上)(戻る)+Fun(下)

(戻る)

※後のハンズオンでやります

Page 23: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

ルールで「AI」を作ってみる(4/4)

23

Page 24: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

ルールで作る「AI」の限界

人が定義するルール、また人が「正解」を与える教師あり学習の

場合、「人間の限界」がそのままAIの限界になる。

● AIを作る人間がその道のエキスパートとは限らない

● エキスパートであっても、自分の感覚(行動評価)を正しく設定

するのはとても手間で、困難(途中で→)

この上限を突破するには、「人が教える」という手法から、「AI自ら

学習する」という手法へ切り替える必要がある。

そのための手法の一つが、強化学習になる。

24

Page 25: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

「AI」を成長させよう

Page 26: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

機械学習教師あり学習

強化学習というアイデア

人がAIに教えるのでなく、AIが自分自身で学習するようにする。

26

学習行動評価

ルールベース

学習ルール

強化学習

どんな行動が「報酬」につながるのか、自身の経験から評価する

行動評価

報酬

※教師なし学習は行動選択には用いられないので、図からは割愛しています。教師がいないから教師なし学習=強化学習ではないのでご注意を 教師なし学習はデータの特徴抽出などに用いられます(どういう特徴か事前にわからない⇒指示を与えず分類を行う=教師なし、など)。

Page 27: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化(1/2)

27

Agentが置かれている状態を、stateとする

state

Agentは、stateで可能な行動=actionをとる。actionは、戦略=policyに従い決定される。

I like right!

actionの結果、新しい状態state’へ遷移する。また報酬(reward)が発生した場合、それを受け取る。

state’

reward

action

Page 28: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化(2/2)

28

Agentが置かれている状態を、stateとする

state

Agentは、stateで可能な行動=actionをとる。actionは、戦略=policyに従い決定される。

I like right!

actionの結果、新しい状態state’へ遷移すると共に、設定された報酬=rewardを受け取る。

state’

reward

action

Markov Decision Process(MDP)

Page 29: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(1/12)

29

state

+1

-1

迷路で、以下の位置(state)にいるAgentについて考える

Page 30: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(2/12)

30

+1

-1

選択可能なactionは以下の通り

Page 31: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(3/12)

31

actionの結果得られるrewardは以下の通りであり、それを基に行動が評価できる。

action reward 行動評価

Page 32: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(4/12)

32

+1

-1

行動評価を反映

Page 33: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(5/12)

33

+1

-1

そこから、一歩手前の状態について考えてみる。

state

Page 34: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(6/12)

34

actionの結果、得られるrewardは以下の通りになる。

action reward

action単体から得られる報酬はない

Page 35: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(7/12)

35

ただ、右へ移動した場合は先ほどの行動評価の結果が使える。

action reward (future)reward

Page 36: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(8/12)

36

action reward (future)reward

actionにより得られるreward 遷移先で見込める最大の報酬

行動選択の上では最大の報酬だけに興味があるので、報酬が最大になるものだけピックアップ

Page 37: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(9/12)

37

action reward (future)reward

行動評価を決定

Page 38: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(10/12)

38

行動評価 = actionによるreward + 遷移先で見込める最大の報酬

行動評価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬

将来の報酬になるので、一定率で割り引く

Page 39: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(11/12)

39

行動評価 = actionによるreward + 遷移先で見込める最大の報酬

行動評価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬

将来の報酬になるので、一定率で割り引く

Page 40: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 行動評価の方法(12/12)

40

行動評価 = actionによるreward + 遷移先で見込める最大の報酬

行動評価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬

将来の報酬になるので、一定率で割り引くBellman Equation

テストに出る

Page 41: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 最適化の方法(1/4)

41

+1

-1

そのほかについても計算を行う

state

Page 42: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 最適化の方法(2/4)

42

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歩前まで・・・と繰り返していくと、行動評価の地図を作ることができる

Page 43: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 最適化の方法(3/4)

43

まとめ

各状態における、行動評価の値を0などで初期化する。

各状態で、行動評価の値を計算する(Bellman Equation)。

計算した行動評価の値を使い、前回状態の評価を行う。

step=1 step=2

... step=n

前々回・・・と繰り返していくと、行動評価の値がstep前後で変わらなくなってくる(=収束する)。これで計算終了。Agentは、行動評価が最大の方向に行くようにすればOK!

Page 44: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

アイデアのモデル化: 最適化の方法(4/4)

44

まとめ

各状態における、行動評価の値を0などで初期化する。

各状態で、行動評価の値を計算する(Bellman Equation)。

計算した行動評価の値を使い、前回状態の評価を行う。

step=1 step=2

... step=n

前々回・・・と繰り返していくと、行動評価の値がstep前後で変わらなくなってくる(=収束する)。これで計算終了。Agentは、行動評価が最大の方向に行くようにすればOK!

Value Iteration

Page 45: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

We have done it …?

45

これで問題は解決?

Page 46: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Think about Rockman10

46

Page 47: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Question

47

問:今、状態(state)の数はどれだけあったでしょう?

Page 48: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Problem

48

死亡 クリア

状態数多すぎ問題

Start

Page 49: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

状態定義の限界

複雑なタスクでは、状態数が多くその全てを列挙することは難しくなってくる。また、当然各状

態の組み合わせの数(状態遷移の数)も爆発的に増える。

⇒Value Iterationで計算しようとすると、永遠に終わらないくらい時間がかかる。

49

今まで:状態の数と、そのつながりが明

らかで、計算可能な程度の量

今:状態の数と遷移数がわけわからんくらい多く

て、計算しきるのはとても無理!

Page 50: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

We need new idea

50

どうするか?

Page 51: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

未知なる台地なら探索から

puhoto by Moyan Brenn

Page 52: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索による最適化(1/9)

52

よくわからないので、とりあえず行動してみる

Page 53: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索による最適化(2/9)

53

よくわからないので、とりあえず行動してみる

Page 54: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索による最適化(3/9)

54

よくわからないので(以下略)

Page 55: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索による最適化(4/9)

55

-1

ぐはぁぁぁぁ!!(ゲーム終了)

Page 56: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索による最適化(5/9)

56

-1

行動結果から、行動評価を計算していく

(=Value Iteration同様)

Page 57: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索による最適化(6/9)

57

-1

+1

ただし、一回の試行で行えるactionのパターンは限られているため、 一回の試行の結果をどれぐらい信用するかについては調整する必要がある。

⇒下図のように、二回目の試行で実は悪いと思っていたところが良いという風にもなりうる(逆も然り)。 これまでと、今回行った試行を、うまくミックスさせる必要がある。

Page 58: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索による最適化(7/9)

58

行動評価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬

行動評価 = (1 - 学習率) x 既存の行動評価の値 x 学習率(実際の行動評価)

Bellman Equation

これまでの行動評価を信じる分 今回の行動評価を信じる分

学習率で、これまでと今回の評価の配分を行う

Page 59: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索による最適化(8/9)

59

行動評価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬

行動評価 = (1 - 学習率) x 既存の行動評価の値 x 学習率(実際の行動評価)

Bellman Equation

これまでの行動評価を信じる分 今回の行動評価を信じる分

行動評価 = 既存の行動評価の値 + 学習率(実際の行動評価 - 既存の行動評価の値)

式変形

TD誤差

Page 60: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索による最適化(9/9)

60

行動評価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬

行動評価 = (1 - 学習率) x これまでの行動評価 x 学習率(実際の行動評価)

Bellman Equation

これまでの行動評価を信じる分 今回の行動評価を信じる分

行動評価 = これまでの行動評価 + 学習率(実際の行動評価 - これまでの行動評価)

式変形

テストに出る

TD誤差

Q-learning

Page 61: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索と活用のジレンマ(1/4)

61

なるべく正確な行動評価を得たい

なるべく多くのactionを試す

なるべく早く報酬を取りたい

報酬が判明しているactionを取る

もっと大きい宝箱があるかも?

わかっている宝箱で十分かも?

Page 62: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索と活用のジレンマ(2/4)

62

なるべく正確な行動評価を得たい

なるべく多くのactionを試す

なるべく早く報酬を取りたい

報酬が判明しているactionを取る

もっと大きい宝箱があるかも?

わかっている宝箱で十分かも?

探索(exploration)

活用(exploitation)

Page 63: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索と活用のジレンマ(3/4)

63

なるべく正確な行動評価を得たい

なるべく多くのactionを試す

なるべく早く報酬を取りたい

報酬が判明しているactionを取る

もっと大きい宝箱があるかも?

わかっている宝箱で十分かも?

ε-greedy法(random by ε)

Page 64: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

探索と活用のジレンマ(4/4)

64

フィードバック量

探索(ε)

1.0

基本的に、学習を進めるにつれ、探索の率を下げていく(学習率も同様に下げていく=これまでの評価を信じる率を高くする)

テストに出る

Page 65: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

We finally made it?

65

これでいけそう?

Page 66: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

back to 状態定義の限界

ゲームを含む時系列のタスクでは、そもそも「状態」の境界線があいまい(↓は、果たして「4

つの状態」といえるか?)。

そのため、状態を連続的な値で表現したい。具体的には、以下の場合状態である「画像」を

連続値(ベクトル)で表現したい。

66

Page 67: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

back to 状態定義の限界

画像からの特徴抽出といえば・・・

67

Clarifai

Page 68: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Learningとの融合

Page 69: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Q-Networkの登場(1/2)

69

Deep Learning界において、「香川といえばうどん」と同じくらい「画像といえばCNN(Convolutional Neural Network)」は当然のこととして扱われている。

Clarifai

CNNは、画像から特徴を抽出して判断するのに優れた手法。これを応用して、以下のような仕組みを構築する。

Page 70: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Q-Networkの登場(2/2)

画像であるstateを、画像処理に優れたConvolutional Neural Networkに流し込む。そこから

「どのactionがいい(=行動評価が高い)か」を出力させる。

⇒状態を入力とし、行動評価を出力する計算プロセス(Q関数)を、Deep Learningに置き換え

ている。70

state 行動評価

action

A

B

・・

Convolutional Neural Network

Page 71: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Q-learning

※価値関数(Q関数)自体をニューラルネットで近似するアイデアは以前からあったものであ

り、よって学習を成功させる手法まで含めてDQNとよぶ。

DQN(Deep Q-Network)

puhoto by Chloe Muro

Page 72: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Q-Networkにおける3つのトリック(1/3)

72

・・・

episode(1ゲーム終了までの期間)

experience

・・・

replay

報酬

遷移先の報酬

行動評価

誤差⇒DQN更新

DQN

定期的にコピー

行動とその結果(state/action/遷移先state/reward)を記憶

報酬のclipping報酬は-1,0,1に統一する(どんなゲームにも対応できるようにする)

Page 73: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Q-Networkにおける3つのトリック(2/3)

73

・・・

episode(1ゲーム終了までの期間)

experience

・・・

行動とその結果(state/action/遷移先state/reward)を記憶

replay

報酬

遷移先の報酬

行動評価

誤差⇒DQN更新

DQN

定期的にコピー

Fixed Target Q-Network遷移先報酬を計算する際の重みはしばらく固定し、定期的に更新する

Experience Replayexperienceに蓄積したものを、シャッフルして学習データにする。⇒学習データ間の相関を除去する(普通にやると時系列に並んでいるため、強い相関がある)。

Page 74: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Q-Networkにおける3つのトリック(3/3)

74

・・・

episode(1ゲーム終了までの期間)

experience

・・・

replay

報酬

遷移先の報酬

行動評価

誤差⇒DQN更新

DQN

定期的にコピーFixed Target Q-Network遷移先の報酬を計算するネットワークはしばらく重みを固定し、定期的に更新する(報酬計算の安定性を高めるため)

Page 76: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Q-Networkの実装(2/5)

76

100~250

Page 77: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Q-Networkの実装(3/5)

77

DQNの実装に必要なコードの行数

Page 78: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Q-Networkの実装(4/5)

アルゴリズムの実装自体にかかるコードはかなり少なくてすむ(OpenAIのメンバである

Andrej Karpathyさんのブログでは、実装にかかっているのはわずか130行(しかもコメント込

み))。加えて、昨今の機械学習系フレームワークの恩恵も受けられる(こちらは、Chainerで

実装したDQN)。

Webアプリケーションを作ったりするより、ぜんぜん少ない行数で実装が可能。

78

Page 79: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Deep Q-Networkの実装(5/5)

DQNは、結果が出るまでかなり時間がかかる。そのため、実際計算しないとわからないこと

以外は可能な限り事前にテストしておくことが重要。

● テストしておかないと、処理のミスかパラメーターのチューニングの問題かわからなくな

る。

○ 責務分担・処理の独立化を行い、手元のテストでつぶせるバグはすべてつぶして

おくこと。

○ これを怠ると、GPUの場合お財布、CPUの場合時間に致命的なダメージを負うこ

とになる

● GPUはほぼ必須(CPUの場合、いい感じかどうかわかるのに1~2日はかかる)

○ GPUインスタンスを使おう

○ OpenAI Gymを検証しているといえばAmazonから$250分もらえるらしい

79

Page 80: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

おわりに

Page 81: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

おわりに

OpenAI Gymは自体は、難しい知識がなくても動かして、試すことができます。数式などを理

解するところからよりも、まず環境に触れてその「面白さ」を体感してもらえればと思います。

その入り口の先にある強化学習は、人による教育の限界を超えるためのアプローチ方法で

あり、最も研究が盛んな領域の一つです(だからこそ投資が行われているとも言えます)。本

日紹介した手法も、将来、また現時点ですでに時代遅れになっているかもしれません。

ただ、ベースとなる本質的な理論(Q-learningなど)は変わっていません。その意味では、本

日セッションに参加いただいた方は、すでにAI研究の一線の入り口に立っています。

81

Page 82: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Welcome to AI World!

puhoto by Rog01

Page 83: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Thank you for listening!

Page 84: Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン

Any Questions?