Pro Yearly is on sale from $80 to $50! »

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

Da467feb3ca0106d571915faedb714f2?s=47 Etsuji Nakai
September 04, 2020

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

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

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

Da467feb3ca0106d571915faedb714f2?s=128

Etsuji Nakai

September 04, 2020
Tweet

Transcript

  1. 60分で学ぶ「強化学習理論入門」 中井悦司 / Etsuji Nakai 2020/09/05 ver1.1

  2. Etsuji Nakai Solutions Architect, Google Cloud $ who am i

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

    ◦ https://github.com/enakai00/colab_rlbook
  4. Contents • 強化学習の考え方 • マルコフ決定過程による環境のモデル化 • 状態価値関数による行動ポリシーの優劣比較 • 動的計画法による厳密解の計算 •

    行動ポリシーの改善方法 • 厳密計算ができない場合の近似手法
  5. 強化学習の考え方

  6. 教師あり/教師なし学習との違い • 教師あり学習(例:分類アルゴリズム) ◦ 「入力データと正解ラベル」の組を教師データとして学習 ◦ 予測時に100%の正解率を達成することはできない 6

  7. 教師あり/教師なし学習との違い • 教師なし学習(例:クラスタリング) ◦ 類似性が高いデータのグループを発 見する ◦ データに対する知見を得ることが主 な目的で、「正解」の定義はない 7

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

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

    困難 ⇨ ニューラルネットワークによる関数近似(DQN : Deep Q Network) • 厳密解を求める理論(ベルマン方程式に基づく動的計画法)が上記の近似手法を理解する基 礎となる 9 厳密解を求める理論を理解した上で、それを近似的に再現する手法を学ぶ
  10. マルコフ決定過程による環境のモデル化

  11. マルコフ決定過程とは? • マルコフ決定過程 ⇨ 有限個の「状態」と「アクション」を組み合わせた状態遷移図で表さ れるプロセス 11 行動ポリシー ◦ 状態遷移には「報酬」が付随

    ◦ アクションの結果は、今の状態 のみに依存して決まる • 状態ごとに選択するアクションを決 定する「行動ポリシー」の中で、総 報酬を最大化するものを発見するこ とがゴール この例では無限の報酬が得られる (最大値が定義できない)ので、 問題設定の修正が必要 環境 エージェント
  12. エピソード的タスクに問題設定を修正 • 「商品を出来るだけ早く1つ購入する」ことを目的にして、図のような状態遷移を定義す ると、前ページの行動ポリシーが明らかに最善のポリシーとなる ◦ エージェントが終了状態に到達するタスクを「エピソード的タスク」と言う 12

  13. 非エピソード的タスクに報酬の割引率を導入 • 前々ページのように終了状態がないタスクを「非エピソード的タスク」と言う • このような場合は、「報酬の割引率 γ」を導入すると行動ポリシーを適切に比較することが できる ◦ 具体的には、次のような状態遷移(S:状態、A:アクション、R:報酬)に対して、 次式で総報酬を定義する(γ

    は 0.9 程度の 1 より小さい値) 13
  14. 非エピソード的タスクに報酬の割引率を導入 • 報酬の割引率 γ を導入した場合、行 動ポリシー A の総報酬は次になる • 行動ポリシー

    B のように余計な行動 が加わると総報酬は小さくなる 行動ポリシー A 行動ポリシー B 14
  15. 確率的な状態変化 15 • マルコフ決定過程では、確率的な状態変 化も許される ◦ 状態 s でアクション a

    を選択した時 に報酬 r を得て次の状態が s' になる 条件付き確率を      と表す • 右図の例を条件付き確率で表すと次になる このような1次元、もしくは、2次元のマスを 移動する題材を「グリッドワールド」と呼ぶ
  16. バックアップ図 16 • マルコフ決定過程の状態変化のプロセスは、右図の ような「バックアップ図」でもれなく表現できる ◦ 点線矢印部分は、同じツリーが再帰的に現れる • バックアップ図の中で、「総報酬が最大になるパス を実現する行動ポリシー(最善の行動ポリシー)」

    を発見したい ◦ (計算量を気にしなければ)「動的計画法」に 基づくアルゴリズムで計算可能
  17. 状態価値関数による 行動ポリシーの優劣比較

  18. 状態価値関数の定義 18 • 状態価値関数   は、行動ポリシー π に従って、 状態 s から行動を続けた際の総報酬の期待値を表す (終了状態に対する値は必ず

    0 と定義する) • 「常に右に進む」行動ポリシーを  とすると、次の 値が得られる ◦ 図に示すように、終了状態から逆にたどること で順に値が決定していく R (+5) S M G 1 1 R
  19. 状態価値関数(直接計算の例) 19 • 「常に左に進む」行動ポリシー  に対するバック アップ図は、右図になる • 期待値計算の問題として愚直に解くと、   は次 のように計算できる 1回目でゴールに到達

    2回目でゴールに到達 3回目でゴールに到達
  20. 状態価値関数の再帰的関係 20 • バックアップ図の再帰構造を考えると、   に対 して次が成り立つことがわかる ◦      より、先ほどと同じ結果が得られる • この結果から、    は次のように決まる

  21. • (状態、および、アクションの数が有限個のマルコ フ決定過程では)他のすべての行動ポリシーよりも 優れた「最善の行動ポリシー  」が必ず存在する ◦ これを発見することを強化学習のゴールとする      行動ポリシーの優劣比較 21 •

    「すべての状態 s について        」となる時、行動ポリシー  は、行動ポリシー   よりも優れていると定義する ◦ 状態 s によって大小関係が変わり、優劣が定まらない場合もある この例における最善の行動ポリシーは どのようになるでしょうか?
  22. 動的計画法による厳密解の計算

  23. 確率を含む行動ポリシー 23 • 行動ポリシー π は、確率的にアクショ ンを選択するものでも構わない ◦ この場合、状態 s

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

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

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

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

    移動ごとに -1 の報酬 ◦ 「落とし穴」に落ちると左上に戻る ◦ 確率 1/2 で右、もしくは、下に移動す る行動ポリシー 実装上は、すべての状態 s をベル マン方程式で更新した際に、変化 の最大値が 0.01 未満になった所 で処理を打ち切る
  28. 行動ポリシーの改善方法

  29. 行動-状態価値関数の定義 29 • 行動-状態価値関数    は、現在の状態 s におい て、「アクション a を選択して、その後は行動ポリ シー

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

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

    を求める 3. 行動-状態価値関数に変換する: 4.     に基づく Greedy ポリシー π' を構成する 5. π' を π として 2. に戻る 31
  32. コードによる確認 32 • ノートブック「Chapter03/01_Policy_Iteration_1.ipynb」を参照 初期ポリシー π:確率 1/2 で右か左に移動 アップデート後の行動ポリシー π'

    :確率 1 で左に移動 ◦ この例では、1回のアップデートで 最善の行動ポリシー  に到達
  33. コードによる確認 33 • ノートブック「Chapter03/02_Policy_Iteration_2.ipynb」を参照 ◦ このコードでは、行動ポリシーが変化しなくなるまでアップデートを実行

  34. 価値反復法 • 動的計画法で状態価値関数を計算するコードを実装する際は、値の変化が小さくなった所 で処理を打ち切った • ポリシー反復法では、行動ポリシーを更新するごとに(以前の計算結果を捨てて)状態価 値関数を再計算するので、早めに処理を打ち切って先に進んだ方が効率的かもしれない • 打ち切るタイミングを極限まで早めて、状態価値関数の更新と行動ポリシーのアップデー トを並列に実行するのが「価値反復法」のアルゴリズム

    34
  35. ポリシー反復法と価値反復法の比較 35

  36. 厳密計算ができない場合の近似手法

  37. 状態遷移確率が未知の場合 37 • ベルマン方程式に基づく動的計画法は、状態遷移確率       が事前に分かっている という前提 • たとえば、ビデオゲームをプレイするエージェントを学習する場 合、ビデオゲームのコードを見なければ、状態遷移確率を知るこ とはできない

    ⇨ 厳密に計算するのではなく、実際にプレイしたデータから  推定する手法が必要:TD 法(Q-Learning、SARSA)
  38. 状態数が膨大になる場合 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 状態価値関数を ディクショナリーで実装
  39. 状態数が膨大になる場合 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 の報酬 常に右に移動する行動ポリシー に対する状態価値関数 状態価値関数を 一次関数で実装
  40. 状態数が膨大になる場合 40 • 一般には、一次関数で表現できるとは限らな いが、多数のパラメーターを持つニューラル ネットワークを用いれば、複雑な状態価値関 数も高い精度で近似できると期待される 活性化関数 ReLU

  41. コードによる確認 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 ニューラルネットワークの定義
  42. (参考)ニューラルネットワークの特徴 42 • ニューラルネットワークは、入力値の領域を一定 の区画に分けて、区画ごとの特性を表現するのに 適している • したがって、状態数が増加しても区画ごとの特性 が変わらなければ、同じサイズのニューラルネッ トワークで適切な近似が可能

    ◦ 右図は前ページと同じサイズのニューラル ネットワークでより大きなグリッドワールド を学習した結果
  43. DQN (Deep Q Network) 43 • 「TD 法(Q-Leanring)」と「Deep Neural Network

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

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

    • 今の場合、障害物の配置が動的に変化するの で、障害物を含めた「画面全体」を状態 s とみ なす必要がある ◦ 右図のように2レイヤーからなる数値デー タに変換して、ニューラルネットワークに 入力する
  46. ニューラルネットワークの構造 46 • 行動-状態価値関数    を表現するために、アクション a と結合して入力する One-hot 表現

  47. コードによる確認 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 ニューラルネットワークの定義
  48. モンテカルロ・ツリーサーチによる実行時の先読み 48 • 実行時に(学習済みのモデルを用いて)複数のパスを選択した上で、ゲーム終了まで再シ ミュレーションすることで、精度を向上するテクニック

  49. コードによる確認 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 ポリシーではこれが 最大になるアクションを選択 ここでは、これが最大になる アクションを選択
  50. Thank You.