Upgrade to Pro — share decks privately, control downloads, hide ads and more …

60分で学ぶ「強化学習理論入門」

Etsuji Nakai
September 04, 2020

 60分で学ぶ「強化学習理論入門」

・この資料は、書籍「ITエンジニアのための強化学習理論入門」の内容を60分のセミナー用に「超絶圧縮」したものです。
・動的計画法による厳密計算の方法をわりと丁寧にまとめて、サンプリングデータを用いた近似手法は考え方のみを記載しています。

2020/09/04 ver1.0 公開
2020/09/04 ver1.1 Typo fix

Etsuji Nakai

September 04, 2020
Tweet

More Decks by Etsuji Nakai

Other Decks in Technology

Transcript

  1. 強化学習の考え方 • 「環境」内を行動するエージェントが、最善の「行動ポリシー」を発見することが目的 ◦ 行動ポリシー ⇨ 場面ごとにエージェントの行動を選択するルール • 数学的には、「マルコフ決定過程」として環境と報酬を定義する ◦

    行動によって得られる「総報酬」を最大化することがゴール(確率的な要素を含む環境 においては、「総報酬の期待値」が最大になる行動ポリシーを発見することを目指す) ◦ 理論上は「ベルマン方程式に基づく動的計画法」で厳密解を求めることが可能 8
  2. 強化学習の課題 • 現実の問題では、次のような理由で厳密解を得ることは困難になる ◦ 環境のすべての情報が事前に分かっていない場合は、エージェントが収集した部分的な データによる学習が必要 ⇨ モンテカルロ法、TD法(Q-Learning、SARSA) ◦ 環境が複雑な場合は、必要となるメモリー容量や計算時間の観点で厳密解を求めるのは

    困難 ⇨ ニューラルネットワークによる関数近似(DQN : Deep Q Network) • 厳密解を求める理論(ベルマン方程式に基づく動的計画法)が上記の近似手法を理解する基 礎となる 9 厳密解を求める理論を理解した上で、それを近似的に再現する手法を学ぶ
  3. マルコフ決定過程とは? • マルコフ決定過程 ⇨ 有限個の「状態」と「アクション」を組み合わせた状態遷移図で表さ れるプロセス 11 行動ポリシー ◦ 状態遷移には「報酬」が付随

    ◦ アクションの結果は、今の状態 のみに依存して決まる • 状態ごとに選択するアクションを決 定する「行動ポリシー」の中で、総 報酬を最大化するものを発見するこ とがゴール この例では無限の報酬が得られる (最大値が定義できない)ので、 問題設定の修正が必要 環境 エージェント
  4. 確率的な状態変化 15 • マルコフ決定過程では、確率的な状態変 化も許される ◦ 状態 s でアクション a

    を選択した時 に報酬 r を得て次の状態が s' になる 条件付き確率を      と表す • 右図の例を条件付き確率で表すと次になる このような1次元、もしくは、2次元のマスを 移動する題材を「グリッドワールド」と呼ぶ
  5. 状態価値関数の定義 18 • 状態価値関数   は、行動ポリシー π に従って、 状態 s から行動を続けた際の総報酬の期待値を表す (終了状態に対する値は必ず

    0 と定義する) • 「常に右に進む」行動ポリシーを  とすると、次の 値が得られる ◦ 図に示すように、終了状態から逆にたどること で順に値が決定していく R (+5) S M G 1 1 R
  6. • (状態、および、アクションの数が有限個のマルコ フ決定過程では)他のすべての行動ポリシーよりも 優れた「最善の行動ポリシー  」が必ず存在する ◦ これを発見することを強化学習のゴールとする      行動ポリシーの優劣比較 21 •

    「すべての状態 s について        」となる時、行動ポリシー  は、行動ポリシー   よりも優れていると定義する ◦ 状態 s によって大小関係が変わり、優劣が定まらない場合もある この例における最善の行動ポリシーは どのようになるでしょうか?
  7. 確率を含む行動ポリシー 23 • 行動ポリシー π は、確率的にアクショ ンを選択するものでも構わない ◦ この場合、状態 s

    でアクション a を選択する条件付き確率を    と表す ◦ 確率を伴わない行動ポリシー π の 場合は、状態 s で(確率 1 で)選 択するアクションを   で表す C R B その他の確率は すべて 0
  8. 状態価値関数に対するベルマン方程式 24 • 状態 s で特定のアクション a を選択した場合、確率       で報酬 r

    が得られて、状 態 s' に移行する。s' 以降に得られる総報酬の期待値は   なので、s から見た総報酬の期 待値は(割引率 γ を考慮して)次になる • 最初のアクション a も確率    で選 択されるので、あらゆるアクションの可 能性を考慮した期待値は次になる 状態価値関数に対するベルマン方程式
  9. 動的計画法による状態価値関数の計算 25 • バックアップ図において終了状態から逆向きに ベルマン方程式を適用すると、状態価値関数の 値が順番に決まっていくと想像される • 実際には、順番を気にせずに「すべての状態 s について、ベルマン方程式の右辺で   を更

    新する」という処理を無限に繰り返すと、正し い状態価値関数の値が得られる 状態価値関数に対する ベルマン方程式と 本質的に同じもの ◦ この手続きを「(ベルマン方程式に基づく)動的計画法」と呼ぶ 実装時は、「すべてのアクション a につ いてのループ」と「起こり得るすべての 結果 (r, s') についてのループ」が必要
  10. コードによる確認 26 • ノートブック「Chapter02/  01_Policy_Evaluation_1.ipynb」を参照 • 次の環境で動的計画法を適用 ◦ 右端(s =

    7)に到達すると +1 の報酬 ◦ 常に右に移動する行動ポリシー ◦ 状態価値関数の初期値は 0 ◦ s = 0, 1, 2, …, 6 の順にベルマン方程式 を適用 1回目の Iteration 2回目の Iteration
  11. コードによる確認 27 • ノートブック「Chapter02/  02_Policy_Evaluation_2.ipynb」を参照 • 次の環境で動的計画法を適用 ◦ 右下が終了状態 ◦

    移動ごとに -1 の報酬 ◦ 「落とし穴」に落ちると左上に戻る ◦ 確率 1/2 で右、もしくは、下に移動す る行動ポリシー 実装上は、すべての状態 s をベル マン方程式で更新した際に、変化 の最大値が 0.01 未満になった所 で処理を打ち切る
  12. 行動-状態価値関数の定義 29 • 行動-状態価値関数    は、現在の状態 s におい て、「アクション a を選択して、その後は行動ポリ シー

    π に従って行動を続けた場合」に得られる総報 酬の期待値を表す ◦ 右のバックアップ図より、次で計算される
  13. 「一手先読み」による行動ポリシーの改善 • 行動ポリシー π が与えられた時、次の方法で新しい行動ポリシー π' を定義する。 ◦ 状態 s

    でアクション a を選択する際に、取り得るすべての a について    を計算 して、これが最大になるものを選択する ⇨ 次の一手について、あらゆる手を比較して一番よいものを選ぼうという発想。ただし、すべての手を 正確に比較するには、一手先を見るだけではだめで、さらに先の手を読んで、ツリー状に展開されるあ らゆる手筋を比較する必要がある。そこまでするのは大変なので、二手目以降については既存の行動ポ リシー π に従うものと仮定して、次の一手の良さを測ろうという作戦 ◦ この π' は、必ず、π よりも優れた行動ポリシーになることが数学的に証明可能 30 「    に基づく Greedy ポリシー」と呼ぶ
  14. ポリシー反復法 • 次の手続きを繰り返す事で、最善の行動ポリシー  に到達する 1. 適当な行動ポリシー π を用意する 2. 動的計画法で状態価値関数  

    を求める 3. 行動-状態価値関数に変換する: 4.     に基づく Greedy ポリシー π' を構成する 5. π' を π として 2. に戻る 31
  15. 状態数が膨大になる場合 38 • これまでのコードでは、Python のディクショナリーで状態価値関数を定義した ◦ 状態 s ごとに、対応する値   を個別に記憶する方式 ◦

    状態数が爆発的に増えるとメモリー不足で対応不可(たとえば、囲碁の盤面はおよそ 10172 通りあると言われる) class Gridworld: def __init__(self, size=8, goals=[7], penalty=0): … self.value = {} for s in self.states: self.value[s] = 0 状態価値関数を ディクショナリーで実装
  16. 状態数が膨大になる場合 39 • 図の状態価値関数では、終了状態(s = 7)を除いて直線的に変化しているので、一次関数        で表現できる ◦ 学習データを用いて w

    と b をチューニングすれば同じ結果が得られるはず class StateValue: def __init__(self, w, b): self.w = w self.b = b def get_value(self, s): w = self.w b = self.b return w*s+b 0 報酬:+1 1 2 3 4 5 6 7 終了状態 移動ごとに -1 の報酬 常に右に移動する行動ポリシー に対する状態価値関数 状態価値関数を 一次関数で実装
  17. コードによる確認 41 • ノートブック「Chapter05/  02_Neural_Network_Policy_Estimation_2.ipynb」を参照 ◦ 「16ノード+8ノード」の隠れ層を持つ多層ニューラル ネットワークで右上のグリッドワールドを学習 Iteration 50:

    [ -15.0 -15.7 -16.7 -16.9 -4.2 ] [ -12.0 -12.9 -14.4 -16.0 -3.6 ] [ -9.6 -10.1 -11.9 -14.6 -2.9 ] [ -7.5 -8.0 -9.0 -11.6 -2.2 ] [ -6.2 -5.2 -4.2 -3.1 -2.5 -1.5 ] [ -5.2 -4.2 -3.2 -2.2 -1.3 0.0 ] def build_model(self): state = layers.Input(shape=(2,)) hidden1 = layers.Dense(16, activation='relu')(state) hidden2 = layers.Dense(8, activation='relu')(hidden1) value = layers.Dense(1)(hidden2) model = models.Model(inputs=[state], outputs=[value]) model.compile(loss='mse') return model ニューラルネットワークの定義
  18. DQN (Deep Q Network) 43 • 「TD 法(Q-Leanring)」と「Deep Neural Network

    による行動-状態価値関数の近似」 を組み合わせた手法が DQN (Deep Q Network) https://www.youtube.com/watch?v=cjpEIotvwFY
  19. 「あるけあるけゲーム」 44 • ニューラルネットワークで行動-状態価値関数    を近似して、Q-Learning を適用す ることを考える • 次のようなゲームの自動プレイエージェントを学習する ◦ 14

    × 14 の画面上に壁(#)と障害物(X)を配置 ◦ プレイヤー(*)は上下左右に移動 ◦ 移動した場所には新たな障害物(+)が配置される ◦ 障害物に当たらずに長く移動を続けることを目指す
  20. 状態の定義 45 • 障害物の配置が固定的であれば、プレイヤーの 座標 (x, y) を状態 s とすればよい

    • 今の場合、障害物の配置が動的に変化するの で、障害物を含めた「画面全体」を状態 s とみ なす必要がある ◦ 右図のように2レイヤーからなる数値デー タに変換して、ニューラルネットワークに 入力する
  21. コードによる確認 47 • ノートブック「Chapter05/03_Walk_Game_Training.ipynb」を参照 ◦ 平均して20ステップ程度進めるエージェントが学習される def build_model(self): cnn_input =

    layers.Input(shape=(14, 14, 2)) cnn = layers.Conv2D(8, (5, 5), padding='same', use_bias=True, activation='relu')(cnn_input) cnn_flatten = layers.Flatten()(cnn) action_input = layers.Input(shape=(4,)) combined = layers.concatenate([cnn_flatten, action_input]) hidden1 = layers.Dense(2048, activation='relu')(combined) hidden2 = layers.Dense(1024, activation='relu')(hidden1) q_value = layers.Dense(1)(hidden2) model = models.Model(inputs=[cnn_input, action_input], outputs=q_value) model.compile(loss='mse') return model ############## # # # x # #x x # # x x x# # *++ x# # +++# # ++ +++# # ++x + # # +++++++ # # # # x # # x # ############## Length: 21 ニューラルネットワークの定義
  22. コードによる確認 49 ############## #x x x # # +++x x

    # # x + ++ # # +++++ + # # +++++++++ # # ++ x+ + # # +++++ ++++ # # + ++ + + # # + +++++ + # # ++++ ++# # x x*# # # ############## Length: 53 • ノートブック「Chapter05/04_Walk_Game_with_Search.ipynb」を参照 ◦ 実行時に「1手だけ先を読む」処理を追加 ◦ 現在の状態 s からすべてのアクション a に対して、報酬 r と次の状 態 s' をシミュレーションで取得して、        が最大に なるアクションを選択 ◦ これは、行動-状態価値関数に対するベルマン方程式を用いた更新 を1回だけ追加で行っていると考えられる 通常の Greedy ポリシーではこれが 最大になるアクションを選択 ここでは、これが最大になる アクションを選択