狠狠撸

狠狠撸Share a Scribd company logo
by icoxfog417 @ Tech-Circle #18
Pythonではじめる強化学習
OpenAI Gym 体験ハンズオン
Agenda
● OpenAI Gymを体験しよう
○ OpenAIとOpenAI Gym
○ OpenAI Gymを動かしてみる
○ ルールで「AI」を作ってみる
● 「础滨」を成长させよう
○ 強化学習というアイデアのモデル化 [MDP]
○ 行动评価の方法 [Bellman Equation]
○ 最適化の方法 [Value Iteration]
○ 探索による最適化 [Q-learning]
○ 探索と活用のジレンマ [ε-greedy法]
● Deep Learningとの融合
○ Deep Q-Networkの登場
○ Deep Q-Networkにおける3つのトリック
○ Deep Q-Networkの実装
● おわりに 2
Twitterで質問を受け付けます
#techcircleja
About Me
Takahiro Kubo (icoxfog417)
TIS株式会社 戦略技術センター所属
● 化学系メーカーの業務コンサルタント出身(得意技は石油化学製品の価格改定)
● 既存の技術ではシステムによる業務改善に限界があるとの実感から、異動
● 現在は機械学習や自然言語処理の研究?それらを用いたサービスのプロトタイピング
を担う
● kintoneエヴァンジェリスト
@対話システムシンポジウム @PyConJP 2016 @Cybozu Days 2016
about team “chakki”(1/2)
所属するチームのミッション
すべての人が、ティータイムに帰れるようにする
すべての人が、ティータイム(15:00)に帰れる(茶帰) 社会を実現します。
この実現には、既存の仕事を効率化するのでなく、 根本的に「仕事の仕方」を変える必要
があります。しかし、慣れた仕事の仕方というのは簡単には変わりません。
そのため、実際に「体験」をし、効果を「実感」してもらうことが重要になります。 私たちは、
先進的技術を用い、仕事の仕方が変わる体験を提供していきます。
about team “chakki”(2/2)
自動応答と遠隔操作による、接客業務の効率化
会議診断システムさゆり
「ロボットとの分業による接客
の効率化」をコンセプトにして
開発しているmaico
「会議に突っ込みを入れるロ
ボット」をコンセプトにした会
議診断士さゆり
OpenAI Gymを体験しよう
Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン
OpenAIとOpenAI Gym(1/3)
OpenAIは、AIの研究を行う非営利の団体です。上記の目標のとおり、AIの研究成果を自己
(特定企業の)利益のためではなく、人類全体のために活用することを目的としています。そ
のためコードも含めた研究成果は広く公開されており、今回紹介するOpenAI Gymもそのうち
の一つになります。
9
目標はデジタルインテリジェンスの高度化をできるかぎり人
類全体の利益に資する形で推進すること。それが、経済的
(financial)な利益目的に制約されないことだ。
出資者の一人であるTesraのElon 惭耻蝉办氏
OpenAIとOpenAI Gym(2/3)
10
Ilya Sutskever氏 Trevor Blackwell氏
Andrej Karpathy氏
所属する研究員の方たちは、Seq2Seqを提案したIlya
Sutskever、Segwayを発明したTrevor Blackwell、画像の
説明文生成を行ったAndrej Karpathなど、泣く子も黙る
世界的に優秀な研究員?エンジニア達が所属。
日本人はまだいないようなので、ぜひ日本人初の
OpenAI研究員を目指そう!
Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン
OpenAIとOpenAI Gym(3/3)
12
OpenAI Gymは「AI」を開発?評価するためのツール、またプラットフォームです。
???
様々な学習環境が用意さ
れており、そこで「AI」のア
ルゴリズムの開発?評価
ができる。
Try!
実験結果をアップロードして共有
できる。他の人の実行結果?実
装を見たりすることも出来る
「AI」の開発って????
Binary Koala
Let’s Try!
ファミリーボクシング(1987)
やればわかる!
OpenAI Gymを動かしてみる(1/3)
環境構築の方法はこちらを参照。
Mac/Linux(Ubuntu)が公式だが、Windowsでもbash on Windowsを利用することで動作させる
ことが可能。
利用する「ジム(=学習環境)」によって、必要となるライブラリも異なってくる。これらは、選択
的にインストールすることが可能。
※pip install gymで入るのは必要最低限のもので、Atariのゲーム環境を使う場合はpip
install ‘gym[atari]’といったように指定する
15
OpenAI Gymを動かしてみる(2/3)
Gymの基本的な使い方は以下の通り。
16
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()
next_observation, reward, done, info = env.step(action)
Environment
(CartPole-v0)
Agent
action
observation, reward
done (episode
end)
gym
①Environmentからはobservationが得られる
②Agentは、observationを基にactionを行う(ここではランダムに選択)
③actionにより、Environmentから次のobservationと、行動に対する報酬が与えられる
?この報酬を最大化したい
①
②
③
テストに出る
①
②
③
OpenAI Gymを動かしてみる(3/3)
つまり(狭義の)「AI」の開発とは、環境が与えられたときにその環境に対し???
1. 得られる報酬を最大化する
2. しかもすばやく最大化する
3. ひいては、異なる環境でも1, 2ができる(汎用的である)
アルゴリズムを開発すること。
これまでは人によって学習?評価に使う環境に差異があることもあったが、Open AI Gymとい
う統一の環境ができたことで、お互いのアルゴリズムを公平に評価できるようになった。
17
どんなアルゴリズムがいいのか?
Windell Oskay
Let’s start from simple one
19
まずは、シンプルなルールで挑戦してみる
Teach!
ルールで「AI」を作ってみる(1/4)
20
Agent Environment
action
(フン=左 & フン=右)
observation, reward
ルールで「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(下)
(戻る)
※後のハンズオンでやります
ルールで「AI」を作ってみる(3/4)
22
試合開始(Demo)
code here
ルールで「AI」を作ってみる(4/4)
23
ルールで作る「AI」の限界
人が定義するルール、また人が「正解」を与える教師あり学習の
場合、「人間の限界」がそのままAIの限界になる。
● AIを作る人間がその道のエキスパートとは限らない
● エキスパートであっても、自分の感覚(行动评価)を正しく設定
するのはとても手間で、困難(途中で→)
この上限を突破するには、「人が教える」という手法から、「AI自ら
学習する」という手法へ切り替える必要がある。
そのための手法の一つが、強化学習になる。
24
「础滨」を成长させよう
機械学習
教師あり学習
強化学習というアイデア
人がAIに教えるのでなく、AIが自分自身で学習するようにする。
26
学習行动评価
ルールベース
学習ルール
強化学習
どんな行動が「報酬」につながる
のか、自身の経験から評価する
行动评価
報酬
※教師なし学習は行動選択には用いられないので、図からは割愛しています。教師がいないから教師なし学習=強化学習ではないのでご注意を
 教師なし学習はデータの特徴抽出などに用いられます(どういう特徴か事前にわからない?指示を与えず分類を行う=教師なし、など)。
アイデアのモデル化(1/2)
27
Agentが置かれている状態
を、stateとする
state
Agentは、stateで可能な行動
=actionをとる。
actionは、戦略=policyに従い
決定される。
I like
right!
actionの結果、新しい状態
state’へ遷移する。また報酬
(reward)が発生した場合、そ
れを受け取る。
state’
reward
action
アイデアのモデル化(2/2)
28
Agentが置かれている状態
を、stateとする
state
Agentは、stateで可能な行
動=actionをとる。
actionは、戦略=policyに従
い決定される。
I like
right!
actionの結果、新しい状態
state’へ遷移すると共に、設
定された報酬=rewardを受け
取る。
state’
reward
action
Markov Decision Process
(MDP)
アイデアのモデル化: 行动评価の方法(1/12)
29
state
+1
-1
迷路で、以下の位置(state)にいるAgentについて考える
アイデアのモデル化: 行动评価の方法(2/12)
30
+1
-1
選択可能なactionは以下の通り
アイデアのモデル化: 行动评価の方法(3/12)
31
actionの結果得られるrewardは以下の通りであり、それを基に行動が評価できる。
action reward 行动评価
アイデアのモデル化: 行动评価の方法(4/12)
32
+1
-1
行动评価を反映
アイデアのモデル化: 行动评価の方法(5/12)
33
+1
-1
そこから、一歩手前の状態について考えてみる。
state
アイデアのモデル化: 行动评価の方法(6/12)
34
actionの結果、得られるrewardは以下の通りになる。
action reward
action単体から
得られる報酬
はない
アイデアのモデル化: 行动评価の方法(7/12)
35
ただ、右へ移動した場合は先ほどの行动评価の結果が使える。
action reward (future)reward
アイデアのモデル化: 行动评価の方法(8/12)
36
action reward (future)reward
actionにより得られるreward 遷移先で見込める最大の報酬
行動選択の上では最大の報酬だけ
に興味があるので、報酬が最大にな
るものだけピックアップ
アイデアのモデル化: 行动评価の方法(9/12)
37
action reward (future)reward
行动评価を決定
アイデアのモデル化: 行动评価の方法(10/12)
38
行动评価 = actionによるreward + 遷移先で見込める最大の報酬
行动评価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬
将来の報酬になるので、
一定率で割り引く
アイデアのモデル化: 行动评価の方法(11/12)
39
行动评価 = actionによるreward + 遷移先で見込める最大の報酬
行动评価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬
将来の報酬になるので、
一定率で割り引く
アイデアのモデル化: 行动评価の方法(12/12)
40
行动评価 = actionによるreward + 遷移先で見込める最大の報酬
行动评価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬
将来の報酬になるので、
一定率で割り引くBellman Equation
テストに出る
アイデアのモデル化: 最適化の方法(1/4)
41
+1
-1
そのほかについても計算を行う
state
アイデアのモデル化: 最適化の方法(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歩前まで???と繰り返していくと、行动评価の地図を作ることができる
アイデアのモデル化: 最適化の方法(3/4)
43
まとめ
各状態における、行动评価の値
を0などで初期化する。
各状態で、行动评価の値を計算
する(Bellman Equation)。
計算した行动评価の値を使い、前
回状態の評価を行う。
step=1 step=2
... step=n
前々回???と繰り返していくと、行动评価の値がstep前後で変わらなく
なってくる(=収束する)。これで計算終了。
Agentは、行动评価が最大の方向に行くようにすればOK!
アイデアのモデル化: 最適化の方法(4/4)
44
まとめ
各状態における、行动评価の値
を0などで初期化する。
各状態で、行动评価の値を計算
する(Bellman Equation)。
計算した行动评価の値を使い、前
回状態の評価を行う。
step=1 step=2
... step=n
前々回???と繰り返していくと、行动评価の値がstep前後で変わらなく
なってくる(=収束する)。これで計算終了。
Agentは、行动评価が最大の方向に行くようにすればOK!
Value Iteration
We have done it …?
45
これで問題は解決?
Think about Rockman10
46
Question
47
問:今、状態(state)の数はどれだけあったでしょう?
Problem
48
死亡 クリア
状態数多すぎ問題
Start
状態定義の限界
複雑なタスクでは、状態数が多くその全てを列挙することは難しくなってくる。また、当然各状
態の組み合わせの数(状態遷移の数)も爆発的に増える。
?Value Iterationで計算しようとすると、永遠に終わらないくらい時間がかかる。
49
今まで:状態の数と、そのつながりが明
らかで、計算可能な程度の量
今:状態の数と遷移数がわけわからんくらい多く
て、計算しきるのはとても無理!
We need new idea
50
どうするか?
未知なる台地なら探索から
puhoto by Moyan Brenn
探索による最適化(1/9)
52
よくわからないので、
とりあえず行動してみ
る
探索による最適化(2/9)
53
よくわからないので、
とりあえず行動してみ
る
探索による最適化(3/9)
54
よくわからないので
(以下略)
探索による最適化(4/9)
55
-1
ぐはぁぁぁぁ!!
(ゲーム終了)
探索による最適化(5/9)
56
-1
行動結果から、行动评価を
計算していく
(=Value Iteration同様)
探索による最適化(6/9)
57
-1
+1
ただし、一回の試行で行えるactionのパターンは限られているため、 一回の試行の結果をどれぐらい信用するか
については調整する必要がある。
?下図のように、二回目の試行で実は悪いと思っていたところが良いという風にもなりうる(逆も然り)。
 これまでと、今回行った試行を、うまくミックスさせる必要がある。
探索による最適化(7/9)
58
行动评価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬
行动评価 = (1 - 学習率) x 既存の行动评価の値 x 学習率(実際の行动评価)
Bellman Equation
これまでの行动评価を信じる分 今回の行动评価を信じる分
学習率で、これまでと今回の
評価の配分を行う
探索による最適化(8/9)
59
行动评価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬
行动评価 = (1 - 学習率) x 既存の行动评価の値 x 学習率(実際の行动评価)
Bellman Equation
これまでの行动评価を信じる分 今回の行动评価を信じる分
行动评価 = 既存の行动评価の値 + 学習率(実際の行动评価 - 既存の行动评価の値)
式変形
TD誤差
探索による最適化(9/9)
60
行动评価 = actionによるreward + 割引率 x 遷移先で見込める最大の報酬
行动评価 = (1 - 学習率) x これまでの行动评価 x 学習率(実際の行动评価)
Bellman Equation
これまでの行动评価を信じる分 今回の行动评価を信じる分
行动评価 = これまでの行动评価 + 学習率(実際の行动评価 - これまでの行动评価)
式変形
テストに出る
TD誤差
Q-learning
探索と活用のジレンマ(1/4)
61
なるべく正確な行动评価を得たい
なるべく多くのactionを試す
なるべく早く報酬を取りたい
報酬が判明しているactionを取る
もっと大きい宝箱
があるかも?
わかっている宝箱
で十分かも?
探索と活用のジレンマ(2/4)
62
なるべく正確な行动评価を得たい
なるべく多くのactionを試す
なるべく早く報酬を取りたい
報酬が判明しているactionを取る
もっと大きい宝箱
があるかも?
わかっている宝箱
で十分かも?
探索
(exploration)
活用
(exploitation)
探索と活用のジレンマ(3/4)
63
なるべく正確な行动评価を得たい
なるべく多くのactionを試す
なるべく早く報酬を取りたい
報酬が判明しているactionを取る
もっと大きい宝箱
があるかも?
わかっている宝箱
で十分かも?
ε-greedy法
(random by ε)
探索と活用のジレンマ(4/4)
64
フィードバック量
探索(ε)
1.0
基本的に、学習を進めるにつれ、探索の
率を下げていく
(学習率も同様に下げていく=これまでの
評価を信じる率を高くする)
テストに出る
We finally made it?
65
これでいけそう?
back to 状態定義の限界
ゲームを含む時系列のタスクでは、そもそも「状態」の境界線があいまい(↓は、果たして「4
つの状態」といえるか?)。
そのため、状態を連続的な値で表現したい。具体的には、以下の場合状態である「画像」を
連続値(ベクトル)で表現したい。
66
back to 状態定義の限界
画像からの特徴抽出といえば???
67
Clarifai
Deep Learningとの融合
Deep Q-Networkの登場(1/2)
69
Deep Learning界において、「香川といえばうどん」と同じくらい「画像といえば
CNN(Convolutional Neural Network)」は当然のこととして扱われている。
Clarifai
CNNは、画像から特徴を抽出して判断するのに優れた手法。
これを応用して、以下のような仕組みを構築する。
Deep Q-Networkの登場(2/2)
画像であるstateを、画像処理に優れたConvolutional Neural Networkに流し込む。そこから
「どのactionがいい(=行动评価が高い)か」を出力させる。
?状態を入力とし、行动评価を出力する計算プロセス(Q関数)を、Deep Learningに置き換え
ている。
70
state 行动评価
action
A
B
?
?
Convolutional Neural Network
Deep Q-learning
※価値関数(Q関数)自体をニューラルネットで近似するアイデアは以前からあったものであ
り、よって学習を成功させる手法まで含めてDQNとよぶ。
DQN
(Deep Q-Network)
puhoto by Chloe Muro
Deep Q-Networkにおける3つのトリック(1/3)
72
?
?
?
episode
(1ゲーム終了ま
での期間)
experience
?
?
?
replay
報酬
遷移先の報酬
行动评価
誤差
?DQN更新
DQN
定期的にコピー
行動とその結果
(state/action/遷移先
state/reward)を記憶
報酬のclipping
報酬は-1,0,1に統一する
(どんなゲームにも対応できるようにする)
Deep Q-Networkにおける3つのトリック(2/3)
73
?
?
?
episode
(1ゲーム終了ま
での期間)
experience
?
?
?
行動とその結果
(state/action/遷移先
state/reward)を記憶
replay
報酬
遷移先の報酬
行动评価
誤差
?DQN更新
DQN
定期的にコピー
Fixed Target Q-Network
遷移先報酬を計算する際の重みはし
ばらく固定し、定期的に更新する
Experience Replay
experienceに蓄積したものを、シャッフルして学習デー
タにする。
?学習データ間の相関を除去する(普通にやると時系
列に並んでいるため、強い相関がある)。
Deep Q-Networkにおける3つのトリック(3/3)
74
?
?
?
episode
(1ゲーム終了ま
での期間)
experience
?
?
?
replay
報酬
遷移先の報酬
行动评価
誤差
?DQN更新
DQN
定期的にコピー
Fixed Target Q-Network
遷移先の報酬を計算するネットワークはし
ばらく重みを固定し、定期的に更新する(報
酬計算の安定性を高めるため)
Deep Q-Networkの実装(1/5)
実行結果(Open AI Gymへアップロード済み)
75
Deep Q-Networkの実装(2/5)
76
100~250
Deep Q-Networkの実装(3/5)
77
DQNの実装に必要なコードの
行数
Deep Q-Networkの実装(4/5)
アルゴリズムの実装自体にかかるコードはかなり少なくてすむ(OpenAIのメンバである
Andrej Karpathyさんのブログでは、実装にかかっているのはわずか130行(しかもコメント込
み))。加えて、昨今の機械学習系フレームワークの恩恵も受けられる(こちらは、Chainerで
実装したDQN)。
Webアプリケーションを作ったりするより、ぜんぜん少ない行数で実装が可能。
78
Deep Q-Networkの実装(5/5)
DQNは、結果が出るまでかなり時間がかかる。そのため、実際計算しないとわからないこと
以外は可能な限り事前にテストしておくことが重要。
● テストしておかないと、処理のミスかパラメーターのチューニングの問題かわからなくな
る。
○ 責務分担?処理の独立化を行い、手元のテストでつぶせるバグはすべてつぶして
おくこと。
○ これを怠ると、GPUの場合お財布、CPUの場合時間に致命的なダメージを負うこ
とになる
● GPUはほぼ必須(CPUの場合、いい感じかどうかわかるのに1~2日はかかる)
○ GPUインスタンスを使おう
○ OpenAI Gymを検証しているといえばAmazonから$250分もらえるらしい
79
おわりに
おわりに
OpenAI Gymは自体は、難しい知識がなくても動かして、試すことができます。数式などを理
解するところからよりも、まず環境に触れてその「面白さ」を体感してもらえればと思います。
その入り口の先にある強化学習は、人による教育の限界を超えるためのアプローチ方法で
あり、最も研究が盛んな領域の一つです(だからこそ投資が行われているとも言えます)。本
日紹介した手法も、将来、また現時点ですでに時代遅れになっているかもしれません。
ただ、ベースとなる本質的な理論(Q-learningなど)は変わっていません。その意味では、本
日セッションに参加いただいた方は、すでにAI研究の一線の入り口に立っています。
81
Welcome to
AI World!
puhoto by Rog01
Thank you for listening!
Any Questions?

More Related Content

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