Ver1.1 中井悦司
Twitter @enakai00
オープンクラウド・キャンパス
TensorFlowで学ぶDQN
Open Cloud Campus
2
TensorFlowで学ぶDQN
自己紹介
 中井悦司(なかいえつじ)
– Twitter @enakai00
 日々の仕事
– Cloud Solutions Architect at Google
 昔とった杵柄
– 素粒子論の研究(超弦理論とか)
– 予備校講師(物理担当)
– インフラエンジニア(Unix/Linux専門)
– Linuxディストリビューターのエバンジェリスト
好評発売中!
DQN (Deep Q-Network) とは?
Open Cloud Campus
4
TensorFlowで学ぶDQN
DQNの適用例
 ビデオゲームの画面イメージを入力データとして、「取得点数が高くなる操作方
法」を学習
– ゲームのルールは知らなくても、「どの画面で、どの操作をすれば、どのように点数が変
化するか」というデータを「あらゆる画面の状況」に対して取得すれば、原理的には学習
できるはず。
– 囲碁のルールを知らなくても、「どの盤面で、どこに石を打てば、どのように優劣が変化
するか」というデータを「あらゆる盤面」に対して取得すれば、原理的には最強の囲碁ア
ルゴリズムができるのと同じ原理。
https://www.youtube.com/watch?v=r3pb-ZDEKVghttps://www.youtube.com/watch?v=V1eYniJ0Rnk
Open Cloud Campus
5
TensorFlowで学ぶDQN
DQNの理論的枠組み
 「現在の状態 (State) s とその時の操作 (Action) a 」に対して、その直後に得られ
る「点数 (Reward) r と新しい状態 s' 」の4つ組データ (s, a, r, s') があらゆる (s, a)
に対して分かっているものと仮定します。
– 「どの画面で、どの操作をすれば、どのように点数が変化するか」というデータに相当す
るものです。実際には、すべての (s, a) についてのデータを得ることは不可能ですが、十
分たくさんのデータがあるものと考えておいてください。
– 数学的には、r と s' は、(s, a) の関数になっている点に注意してください。
 このようなデータがあれば、単純に考えると、現在の状態 s が与えられた時、次の
ルールで操作を決定すればよい気がします。
          
 ⇒ 「状態 s において、その直後に得られる点数 r が最大になる行動 a を選択する」
 しかしながら、これは必ずしもベストな結果にはなりません。
– たとえば、ブロック崩しの場合、急いでブロックを消して目先の点数を稼ぐよりも、少し
時間がかかっても、隅のブロックを狙った方が、トータルの点数は高くなります。
– 直後の点数ではなく、「長期的なトータルの点数」を最大化する行動 a を見つける方法が
必要なのです。
Open Cloud Campus
6
TensorFlowで学ぶDQN
魔法の「Q 関数」の存在を仮定する
 長期的なトータルの点数を次のように定義します。
–   と  は n ステップ目の状態と操作を表します。 は 0.9 程度の値とします。(トータ
ルの点数が発散しないための計算上の工夫として入れてあります。)
 ここで、どうやって計算するかはまったく謎ですが、次のような都合のよい魔法の
関数 Q(s, a) があったと仮定してみます。
Q(s, a) = 「状態 s において行動 a を選択したとして、さらにその後、常にベストな行動 
    をとり続けた場合のトータルの点数」
 魔法の関数 Q(s, a) が手に入れば、状態 s におけるベストな行動は、次のルールで
決まります。
 ⇒ 「状態 s において、その後にベストな行動をとり続けた場合のトータルの点数が最大に
   なる行動 a を選択する」
Open Cloud Campus
7
TensorFlowで学ぶDQN
数学における「帰納的関係」の魔力
 関数 Q(s, a) の計算方法はまったく謎ですが、少なくとも、次の関係式を満たすこ
とは言えます。
– ここでは、これを「Q関係式」と呼んでおきます。(証明は次ページを参照)
Open Cloud Campus
8
TensorFlowで学ぶDQN
数学における「帰納的関係」の魔力
 証明
– 状態  から出発して、ベストな行動をとり続けた場合に、状態と行動は次のように変化
したとします。
– この時、 Q(s, a) の定義より、次が成り立ちます。
– ここで、最初の状態が  ではなくて だったとすると、そこからベストな行動をとり続
けると、状態と行動は次のように変化します。
– この時、 Q(s, a) の定義より、次が成り立ちます。
– (1) を次のように変形して、(2) を代入します。
– 次の関係に注意すると、「Q関係式」が得られます。
―― (1)
―― (2)
Open Cloud Campus
9
TensorFlowで学ぶDQN
Q関係式を手がかりにQ関数を近似的に求める
 パラメーターを含む関数を適当に用意して、パラメーターをうまく調整した結果、
Q関係式を満たすようにできれば、それが求めるべきQ関数に他なりません。
– 厳密には、必要条件であって十分条件ではありませんが、(一定の条件の下に)十分性が
成り立つことも数学的に示されています。
 具体的には、次の手順でパラメーターを調整していきます。
– (1) 手元にある4つ組データ (s, a, r, s') のすべてを D とします。
– (2) Q関数の候補 Q(s, a | w) を用意します。パラメーター w には、適当な値をセットして
おきます。
– (3) D に含まれるすべて(もしくは、一部)のデータについて、Q関係式の両辺の差(の
2乗)の合計を「誤差関数 E(w)」として計算します。
– (4) 誤差関数の値が小さくなるようにパラメーター w の値を修正して、(3)に戻ります。
 (3)(4)を繰り返して、誤差関数 E(w) が十分小さくなれば、近似的にQ関数が求めら
れたことになります。
– ただし、最初に用意した「パラメーターを含む関数」が単純な関数だと、よい近似にはな
りません。できるだけ複雑な関数を用意するほうが得策です。
Open Cloud Campus
10
TensorFlowで学ぶDQN
できるだけ複雑な関数???
 そっそそそっそそっそそそそっそそそそそそれって・・・・
ディープニューラルネットワーク!
 前述の「パラメーターを含む関数」として、多段ニューラルネットワークを利用し
たものが、「Deep Q-Network」の正体です。
Open Cloud Campus
11
TensorFlowで学ぶDQN
え?ニューラルネットワークって何?
 ものすごく単純化して言うと、単一の関数を表すノードを組み合わせて、複雑な関
数を作り出すテクニックです。
Open Cloud Campus
12
TensorFlowで学ぶDQN
4つ組データの収集方法について
 4つ組データ (s, a, r, s') はどのようにして収集するのでしょうか?
– 基本的には、ランダムなアクションでゲームをプレイしまくって集めます。
– 無限の時間プレイすれば、理屈上は、すべての状態のデータが集まるはずです。
 とはいえ、ランダムなアクションでは(確率的になかなか)得られない状態もある
ので、次のような工夫をします。
– ある程度データが溜まったら、その時点のデータで近似的なQ関数を学習します。
– それ以降は、ランダムなアクションと現時点のQ関数を用いた(現時点でベストと判断さ
れる)アクションを適当な割合でまぜてプレイして、さらにデータを集めます。
– さらに集まったデータで、再度、近似的なQ関数を学習します。
– これを繰り返すと、より上達したQ関数を得ながら、上達したプレイでないと得られない
データを収集していくことが可能になります。
 ランダムなアクションを混ぜずに、その時点のQ関数でベストなプレイのデータだ
け集めたらだめなの?
– だめです。ダメなアクションを含めて、あらゆる状態のデータを集めることで、「短期的
にはダメだけど長期的には成功する」という判断が可能になります。
TensorFlowで学ぶDQN
DQN (Deep Q-Network) の実装例
Open Cloud Campus
14
TensorFlowで学ぶDQN
倒立振子(とうりつしんし)の問題
– Chainerで4層NNを用いた実装例が紹介されています。
– あえて0層〜2層の単純なNNを用いた場合に、結果がどのように変わるかをTensorFlowで
実験しています。
http://qiita.com/ashitani/items/bb393e24c20e83e54577
http://enakai00.hatenablog.com/entry/2016/05/18/125007
Open Cloud Campus
15
TensorFlowで学ぶDQN
倒立振子(とうりつしんし)の問題
詳しくはデモでご紹介!
中井悦司
Twitter @enakai00
オープンクラウド・キャンパス
TensorFlowで楽しく
機械学習を学びましょう!

TensorFlowで学ぶDQN

  • 1.
  • 2.
    Open Cloud Campus 2 TensorFlowで学ぶDQN 自己紹介 中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Cloud Solutions Architect at Google  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) – Linuxディストリビューターのエバンジェリスト 好評発売中!
  • 3.
  • 4.
    Open Cloud Campus 4 TensorFlowで学ぶDQN DQNの適用例 ビデオゲームの画面イメージを入力データとして、「取得点数が高くなる操作方 法」を学習 – ゲームのルールは知らなくても、「どの画面で、どの操作をすれば、どのように点数が変 化するか」というデータを「あらゆる画面の状況」に対して取得すれば、原理的には学習 できるはず。 – 囲碁のルールを知らなくても、「どの盤面で、どこに石を打てば、どのように優劣が変化 するか」というデータを「あらゆる盤面」に対して取得すれば、原理的には最強の囲碁ア ルゴリズムができるのと同じ原理。 https://www.youtube.com/watch?v=r3pb-ZDEKVghttps://www.youtube.com/watch?v=V1eYniJ0Rnk
  • 5.
    Open Cloud Campus 5 TensorFlowで学ぶDQN DQNの理論的枠組み 「現在の状態 (State) s とその時の操作 (Action) a 」に対して、その直後に得られ る「点数 (Reward) r と新しい状態 s' 」の4つ組データ (s, a, r, s') があらゆる (s, a) に対して分かっているものと仮定します。 – 「どの画面で、どの操作をすれば、どのように点数が変化するか」というデータに相当す るものです。実際には、すべての (s, a) についてのデータを得ることは不可能ですが、十 分たくさんのデータがあるものと考えておいてください。 – 数学的には、r と s' は、(s, a) の関数になっている点に注意してください。  このようなデータがあれば、単純に考えると、現在の状態 s が与えられた時、次の ルールで操作を決定すればよい気がします。             ⇒ 「状態 s において、その直後に得られる点数 r が最大になる行動 a を選択する」  しかしながら、これは必ずしもベストな結果にはなりません。 – たとえば、ブロック崩しの場合、急いでブロックを消して目先の点数を稼ぐよりも、少し 時間がかかっても、隅のブロックを狙った方が、トータルの点数は高くなります。 – 直後の点数ではなく、「長期的なトータルの点数」を最大化する行動 a を見つける方法が 必要なのです。
  • 6.
    Open Cloud Campus 6 TensorFlowで学ぶDQN 魔法の「Q関数」の存在を仮定する  長期的なトータルの点数を次のように定義します。 –   と  は n ステップ目の状態と操作を表します。 は 0.9 程度の値とします。(トータ ルの点数が発散しないための計算上の工夫として入れてあります。)  ここで、どうやって計算するかはまったく謎ですが、次のような都合のよい魔法の 関数 Q(s, a) があったと仮定してみます。 Q(s, a) = 「状態 s において行動 a を選択したとして、さらにその後、常にベストな行動      をとり続けた場合のトータルの点数」  魔法の関数 Q(s, a) が手に入れば、状態 s におけるベストな行動は、次のルールで 決まります。  ⇒ 「状態 s において、その後にベストな行動をとり続けた場合のトータルの点数が最大に    なる行動 a を選択する」
  • 7.
    Open Cloud Campus 7 TensorFlowで学ぶDQN 数学における「帰納的関係」の魔力 関数 Q(s, a) の計算方法はまったく謎ですが、少なくとも、次の関係式を満たすこ とは言えます。 – ここでは、これを「Q関係式」と呼んでおきます。(証明は次ページを参照)
  • 8.
    Open Cloud Campus 8 TensorFlowで学ぶDQN 数学における「帰納的関係」の魔力 証明 – 状態  から出発して、ベストな行動をとり続けた場合に、状態と行動は次のように変化 したとします。 – この時、 Q(s, a) の定義より、次が成り立ちます。 – ここで、最初の状態が  ではなくて だったとすると、そこからベストな行動をとり続 けると、状態と行動は次のように変化します。 – この時、 Q(s, a) の定義より、次が成り立ちます。 – (1) を次のように変形して、(2) を代入します。 – 次の関係に注意すると、「Q関係式」が得られます。 ―― (1) ―― (2)
  • 9.
    Open Cloud Campus 9 TensorFlowで学ぶDQN Q関係式を手がかりにQ関数を近似的に求める パラメーターを含む関数を適当に用意して、パラメーターをうまく調整した結果、 Q関係式を満たすようにできれば、それが求めるべきQ関数に他なりません。 – 厳密には、必要条件であって十分条件ではありませんが、(一定の条件の下に)十分性が 成り立つことも数学的に示されています。  具体的には、次の手順でパラメーターを調整していきます。 – (1) 手元にある4つ組データ (s, a, r, s') のすべてを D とします。 – (2) Q関数の候補 Q(s, a | w) を用意します。パラメーター w には、適当な値をセットして おきます。 – (3) D に含まれるすべて(もしくは、一部)のデータについて、Q関係式の両辺の差(の 2乗)の合計を「誤差関数 E(w)」として計算します。 – (4) 誤差関数の値が小さくなるようにパラメーター w の値を修正して、(3)に戻ります。  (3)(4)を繰り返して、誤差関数 E(w) が十分小さくなれば、近似的にQ関数が求めら れたことになります。 – ただし、最初に用意した「パラメーターを含む関数」が単純な関数だと、よい近似にはな りません。できるだけ複雑な関数を用意するほうが得策です。
  • 10.
    Open Cloud Campus 10 TensorFlowで学ぶDQN できるだけ複雑な関数??? そっそそそっそそっそそそそっそそそそそそれって・・・・ ディープニューラルネットワーク!  前述の「パラメーターを含む関数」として、多段ニューラルネットワークを利用し たものが、「Deep Q-Network」の正体です。
  • 11.
    Open Cloud Campus 11 TensorFlowで学ぶDQN え?ニューラルネットワークって何? ものすごく単純化して言うと、単一の関数を表すノードを組み合わせて、複雑な関 数を作り出すテクニックです。
  • 12.
    Open Cloud Campus 12 TensorFlowで学ぶDQN 4つ組データの収集方法について 4つ組データ (s, a, r, s') はどのようにして収集するのでしょうか? – 基本的には、ランダムなアクションでゲームをプレイしまくって集めます。 – 無限の時間プレイすれば、理屈上は、すべての状態のデータが集まるはずです。  とはいえ、ランダムなアクションでは(確率的になかなか)得られない状態もある ので、次のような工夫をします。 – ある程度データが溜まったら、その時点のデータで近似的なQ関数を学習します。 – それ以降は、ランダムなアクションと現時点のQ関数を用いた(現時点でベストと判断さ れる)アクションを適当な割合でまぜてプレイして、さらにデータを集めます。 – さらに集まったデータで、再度、近似的なQ関数を学習します。 – これを繰り返すと、より上達したQ関数を得ながら、上達したプレイでないと得られない データを収集していくことが可能になります。  ランダムなアクションを混ぜずに、その時点のQ関数でベストなプレイのデータだ け集めたらだめなの? – だめです。ダメなアクションを含めて、あらゆる状態のデータを集めることで、「短期的 にはダメだけど長期的には成功する」という判断が可能になります。
  • 13.
  • 14.
    Open Cloud Campus 14 TensorFlowで学ぶDQN 倒立振子(とうりつしんし)の問題 –Chainerで4層NNを用いた実装例が紹介されています。 – あえて0層〜2層の単純なNNを用いた場合に、結果がどのように変わるかをTensorFlowで 実験しています。 http://qiita.com/ashitani/items/bb393e24c20e83e54577 http://enakai00.hatenablog.com/entry/2016/05/18/125007
  • 15.
  • 16.