Link Search Menu Expand Document

5. ローカルプランニング - パート I.

この講義では、

  1. ローカルプランニングを紹介し、
  2. 決定的なMDPに対して、呼び出しあたりの実行時間が状態空間のサイズに依存しないローカルプランナがあることを示し、
  3. 実際に、そのローカルプランナの最悪ケースでの実行時間が近似的に最適になることを示す。

ローカルプランニングって?

前回の講義で、状態数$S$・行動数$A$の割引MDPがテーブル表現で与えられたとき、$\delta\le \gamma/(1-\gamma)$より良い方策を$\Omega( S^2 A )$より少ない計算コストで計算できるアルゴリズムが存在しないことがわかった。ここで$SA$の項は、方策を決めるために全ての状態でどの行動をとるか計算する必要があるので登場している。またもう一つの$S$の項は、ある行動の良し悪しを確認するために、次状態分布のベクトルをほぼ全て見ないといけないので出てきている。

この世界についてのあまり喜ばしくない傾向だが、ある問題がMDPとしてモデル化されるのであれば (つまり、マルコフ性の仮定が厳密に観測されるのであれば)、状態空間の大きさはしばしば膨れ上がってしまう。 ベルマンの次元の呪いは、これが起こる原因の一つだ。 そういった巨大なMDPに対処するためには、アルゴリズムの実行時間が状態空間のサイズに依存しないことが期待される。しかし、この講義で求めた下界は、それが幻想だと教えてくれる。

しかし、なぜプランナは完全な方策を出力する必要があったのだろうか?また、なぜMDPについての情報を得る唯一の方法を、遷移確率の巨大なテーブルを見ることだと仮定したのだろうか?実際、プランナが環境に埋めこまれた「エージェント」の中で使われるのであれば、プランナは完全な方策を出力する必要はない。各ステップでプランナに求められるのは、ただ環境における現在の状態でとる行動を計算することだけだ。とりわけ、現在の状況以外の全ての状況について、どの行動をとるべきかを計算する必要は全くない!

この講義での通例どおり、環境はMDPで、エージェントは意思決定が求められる各ステップごとに状態にアクセスできると仮定する。 更に、エージェントが幸運なことに、環境を記述するMDPのシミュレータにアクセスできると仮定する。ブラックボックスなシミュレータで、状態行動対を与えられ、即時報酬とランダムな次状態を正しい分布からサンプルするものを考えよう。すると、このブラックボックスに対し「ほんの少しの」クエリを投げてエージェントがとる行動を返し、環境をランダムな次状態に遷移させ、そしてこの一連のプロセスを続けていくようなプランナを、たぶん作れるだろう。

いま、プランナは全ての状態で行動を出力する必要はなく、長ったらしい確率ベクトルを読むのに時間を費やす必要もない。ならば理論上は、状態数非依存の下界を得るための障壁は取り除かれたはずだ。 疑問に残るのは、この新しい問題設定において、プランナが確かに状態数非依存の実行時間を得られるのかという問題だ。この疑問に答えてしまうと、答えはイエスで、状態遷移が決定的な環境については簡単に従う。確率的な環境については、もう少し多くの仕事が必要だ。

この講義の残りで、さっきインフォーマルに説明したローカルプランニング問題にフォーマルな定義を与える。続いて、決定的な環境についての結果を説明する。この結果から、ある下界が得られるだろう。

ローカルプランニング: フォーマルな定義

まず、MDPシミュレータの定義から始めよう。ここで使う用語は、(0次の、1次の、ノイジーな、とか)色々なオラクルのもとでの最適化について話すときのものと似ている。 全てのMDPが有限だと仮定しているので、状態と行動空間を自然数の部分集合により定める。更に、行動数を$\mathrm{A}$とした時、行動集合が$[\mathrm{A}]$によって定まるとする。これによって、説明がかなり簡単になる。


定義 (MDPシミュレータ): MDP \(M=(\mathcal{S},\mathcal{A},P,r)\)を実装するシミュレータは、状態行動対\((s,a)\in \mathcal{S}\times\mathcal{A}\)のクエリを投げられた時に報酬\(r=(r_a(s))_{s,a}\)と\(P = (P_a(s))_{s,a}\)を返す、「ブラックボックスオラクル」である。


このブラックボックスのユーザーは、$\mathcal{S}\times \mathcal{A}$からはみ出すような状態行動対のクエリを投げないように、気をつけなければならない。次はローカルプランナだ。


定義 (ローカルプランナ): ローカルプランナは、行動数$\mathrm{A}$、状態$s\in \mathbb{N}$、MDPシミュレータへの「アクセスポイント」を受け取る。このシミュレータに有限回のクエリを投げた後、プランナは$[\mathrm{A}]$から行動を返す必要がある。


(ローカル) プランナはランダムに計算を行うかもしれないし、行わないかもしれない。たとえランダムに計算を行わなくとも、プランナが使うシミュレータのランダム性により、一般にプランナが返す行動はランダムだ。プランナがwell-formedであるとは、たとえシミュレータを通してどんなMDPと接していたとしても、シミュレータに有限回クエリした後に何らかの行動を返すということだ。これはまた、プランナはシミュレータに決して、規定の集合外の状態行動対を与えないということでもある。

もしローカルプランナがシミュレータ$M$へのアクセスを与えられたならば、プランナとMDP $M$の双方により、そのMDPでのある方策が定まる。この方策を、どのMDPを扱っているか文脈から明らかであれば、ただプランナにより定まる方策$\pi$と書く。それでも、この方策はシミュレータにより実装されたMDPに依存する。もしローカルプランナがwell-formedであれば、この方策はどのMDPがシミュレータにより実装されているかに関わらずwell-definedだ。

ローカルプランナは、良い方策を出すことを求められる。


定義 ($\delta$-健全なローカルプランナ): あるローカルプランナが任意のMDP $M$に対してwell-formedであり、そのMDPのもとで定まる方策$\pi$と、$M$を実装するシミュレータが$M$において$\delta$-最適であるとき、そのローカルプランナは$\delta$-健全であると言う。

$v^*$が$M$において最適価値関数であるとき、以下が成り立つ。

\[v^\pi \ge v^* - \delta \boldsymbol{1}\]

ローカルプランナの(状態ごと、最悪ケース) クエリコストは、プランナがシミュレータに投げる最大のクエリ数だ。これは、MDPと初期状態両方についてとった最大値になる。

以下に、ローカルプランニングの問題を要約するテーブルを示す。

モデル: 任意の有限MDP $M$
オラクル: $M$のブラックボックスシミュレータ
ローカルな入力: 状態 $s$
ローカルな出力: 行動 $A$
得られるもの: 方策 $\pi$
事後条件: \(v^\pi_M \ge v^*_M-\delta \boldsymbol{1}\)

最適化問題として、ローカルプランナは入力として、目標とするサブオプティマリティレベル$\delta$もとる。

価値反復法と行動価値関数によるローカルプランニング

価値反復法を思い出そう。

  1. \(v_0 = \boldsymbol{0}\)とする
  2. \(k=1,2,\dots\) について、\(v_{k+1} = Tv_k\) とする

これまで見てきたように、 もし反復が $k\ge H_{\gamma,\delta(1-\gamma)/(2\gamma)}$ を満たして止まるならば、

\[\pi_k(s) = \arg\max_a r_a(s) + \gamma \langle P_a(s),v_k \rangle\]

により定まる方策$\pi_k$は、$\delta$-最適であることが保証される。 これは、ローカルプランニングにも使えるのだろうか?これから見ていくように、ある方法を使えば、答えはイエスだ。 しかし、それを示す前に、いくつかの記法を追加で紹介しておこう。これは、短期的にはいくらか記述を楽にしてくれる。 さらに、より重要なことだが、アルゴリズムの設計にも影響を与えることになる。

ここでの観察は、どの行動をとるか決めるためには、複数の行動について、1ステップ先読みした価値を計算しなければいけないということだ。上記の$\pi_k(s)$の計算ではこれを別のステップで行った1が、1ステップ先読みの値を、アルゴリズム全体の手続きの間じゅう記録しておくという選択ができる。実際、 \(\tilde T: \mathbb{R}^{\mathcal{S}\times \mathcal{A}} \to \mathbb{R}^{\mathcal{S}\times \mathcal{A}}\)を

\[\tilde T q = r + \gamma P M q, \qquad (q \in \mathbb{R}^{\mathcal{S}\times \mathcal{A}})\,,\]

となるように定義しよう。ただしここで$r\in \mathbb{R}^{\mathcal{S}\times \mathcal{A}}$、 作用素$P: \mathbb{R}^{\mathcal{S}} \to \mathbb{R}^{\mathcal{S}\times \mathcal{A}}$ および$M: \mathbb{R}^{\mathcal{S}\times \mathcal{A}} \to \mathbb{R}^{\mathcal{S}}$は、以下により定義される。

\[\begin{align*} r(s,a) = r_a(s)\,, \quad (P v)(s,a) = \langle P_a(s), v \rangle\,, \quad (M q)(s) = \max_{a\in \mathcal{A}} q(s,a) \end{align*}\]

ここで、 \(s\in \mathcal{S}\)、 \(a\in \mathcal{A}\)、 \(v\in \mathbb{R}^{\mathcal{S}}\)、 \(q\in \mathbb{R}^{\mathcal{S}\times \mathcal{A}}\)だ。

よって、$\pi_k$の定義は次のように縮められる。

\[\pi_k(s) = \arg\max_a (\tilde T^{k+1} \boldsymbol{0})(s,a)\,.\]

以上の計算を、再帰的で、アルゴリズム的なかたちで書いておくと教育的だろう。

\[q_k = \tilde T^k \boldsymbol{0}.\]

とする。 Pythonライクな疑似コードを使うと、価値 $q_k(s,\cdot)$ を計算する関数を、次のように書ける。

1. define q(k,s):
2.  if k = 0 return 0 # base case
3.  return [ r(s,a) + gamma * sum( [P(s,a,s') * max(q(k-1,s')) for s' in S] ) for a in A ]
4. end

再帰的な関数呼び出しがある3行目では、Pythonのリスト内包表記が使われている。角かっこ([]) はリストを作成する記法で、この関数自体もリストを返す。 この関数は、3行目で自身を呼び出しているので、再帰的な関数だ。 実行時間は容易に$(\mathrm{A}\mathrm{S})^k$だとわかる。これは、このMDPが決定的だと気づかない限り、あまり希望がない。つまり、$P(s,a,\cdot)$ が一つだけ1で残りが全て0ならば、全ての状態を訪問せずとも、どのエントリがそれなのかを確認する方法があることになる。 つまり、$g: \mathcal{S}\times \mathcal{A} \to \mathcal{S}$ が次状態をかえす関数ならば、上記の関数を次のように書きかえられる。

1. define q(k,s):
2.  if k = 0 return 0 # base case
3.  return [ r(s,a) + gamma * max(q(k-1,g(s,a))) for a in A ]
4. end

3行目で、次状態について和をとるループがないので実行時間は

\[O(A^k)\,\]

になる。この講義で初めて、良い行動が状態空間のサイズによらない労力で計算できた!そしてもちろん、あるシミュレータが与えられたとき、そのシミュレータが基づいているMDPが決定的ならば、$g$の呼び出しはシミュレータを(一度)呼び出すことと等価だ。 しかしこのアイデアは、確率的な場合にも拡張できるのだろうか?答えはイエスだが、詳細については次回の講義で与えよう。 かわりにこの講義では、上に示した再帰的な関数よりも、より良いものを作れる可能性があるかどうかを見てみよう。

下界


定理 (ローカルプランニングの下界): 報酬の範囲が$[0,1]$の割引MDPで、$\delta<1$について$\delta$-健全であるような任意のローカルプランナ$p$を考える。 このとき、$p$が少なくとも\(\Omega(\mathrm{A}^{k})\)回のクエリを必要とするような状態を持つMDPが存在する。ただし、$k$は以下で与えられる。

\[\begin{align} k=\left\lceil \frac{\ln( 1/(\delta(1-\gamma)) )}{\ln(1/\gamma)}\right\rceil, \label{eq:kdeflb} \end{align}\]

ここで、\(\mathrm{A}\)はMDPの行動数だ。


$k_\gamma$により、式 $\eqref{eq:kdeflb}$で定められた価値を表記する。 このとき、$\gamma\to 1$で、$k_\gamma =\Omega( H_{\gamma,\delta})$ となる。

Proof: これは典型的な、干し草の中で針を探す式の主張だ。宿題で、いかなるアルゴリズムも長さ$m$のバイナリ配列のどの要素が1なのかを、$\Omega(m)$回より少ないクエリ数で見つけられないことを確認した。 深さ$k$の正規化された根つき$\mathrm{A}$-ary木2を考えよう。この木はちょうど$\mathrm{A}^k$枚の葉を持っている。 この木のノードに対応する状態と、追加で吸引状態を一つ持つMDPを考える。 根を$s_0$として、遷移が決定的だとしよう: この木のあるノードである行動を選択すると、次の状態として現在のノードの子ノードに遷移する。 葉ノードである行動をとると、吸引状態に遷移する。吸引状態でも、任意の行動により吸引状態に遷移する。 葉ノードのある状態である行動を選択すると報酬$1$がもらえるが、残り全ての状態行動対について、報酬は$0$だとする。

あるプランナが$\delta$-健全ならば、それが$s_0$で必ず最適行動を選択すると主張できる。 これが成り立つのは、最適行動の価値が$\sum_{i=k}^\infty \gamma^i=\gamma^k/(1-\gamma)$であり、上記(式$\eqref{eq:kdeflb}$)での$k$の決め方により、$\gamma^k/(1-\gamma) \ge \delta$となるためだ。[^note_gamma_k] よって、プランナは報酬が$1$となりうるようなただ一つの葉ノードで、報酬が$1$となるただ一つの行動を判別できなければならない。これは、宿題にした問題より、少なくとも$\Omega(\mathrm{A}^{k})$回のクエリを必要とする。 \(\qquad \blacksquare\)

少し追加の仕事をするだけで、$k_\gamma$の値は$k=\Omega( H_{\gamma,\delta(1-\gamma)} )$に改善でき、これは上界と一致する。

ノート

より大きな状態空間に対処する

完全にフォーマルな記述として、読者は状態がどのような記述方法でローカルプランナに与えられるかが気になるかもしれない。数えきれないほどたくさんの状態がある場合などは、特にそうだろう。 ローカルプランナは、入力として与えられる状態と、シミュレータからかえってくる他の状態にだけアクセスできるので、ローカルプランナ・環境・シミュレータ間のコミュニケーションの目的には、ただこれらの状態だけを判別するためだけの固有な番号を割り振ればよいだろう。

下界と上界のギャップ

下界と上界の間には明らかなギャップがあり、これは閉じられるべきだ。

翻訳者注

  1. 状態価値関数しか持っていないならば\(\arg\max_a r_a(s) + \gamma \langle P_a(s),v_k \rangle\)によって次の行動を計算する必要があるが、状態行動価値関数があるならこのステップを削減できるという意味。 

  2. A-ary木 (A-ary tree) は「葉以外のノードがA個の子ノードを持っている木」という意味。