最近 Spinning Up というものの輪読会的なものを始めることになりました。 そこでその準備のため Spinning Up の和訳をつらつらと書いていこうと思います。 なお、全文ではなく僕が重要そうだな〜と思った部分を和訳してメモしていく感じです。

Part1: Key Concepts in RL

該当ページは ここ です。 主に Key Concepts and Terminology を和訳していきます。

Key Concepts and Terminology

Action Space

離散的行動空間 (descrete action space) と連続的行動空間 (continuous action space) があるよ〜的な説明

Policies

方策 (policy) はエージェント (agent) が行動を決定する際に使用されるルールである。 方策は決定論的 (deterministic) な場合は $\mu$ を用いて下記のように記述する。 $$ a_t = \mu(s_t) $$

確率論的 (stochastic) の場合は通常 $\pi$ を用いて下記ように記述する。 $$ a_t \sim \pi(\cdot|s_t) $$

パラメータがある場合は $\theta$ や $\phi$ を用いて下記のように記述する。 $$ a_t = \mu_{\theta}(s_t) $$ $$ a_t \sim \pi_{\theta}(\cdot|s_t) $$

Deterministic Policies

pytorchでの実装例が書いてあるだけ。

Stochastic Policies

深層強化学習で最もよく使われるのは categorical policies と diagonal gausian policies である。 categorical policies は離散的行動空間の場合に使用され、diagonal gausian policies は連続的行動空間の場合に使用される。

確率論的な方策の使用やトレーニングにおいて重要なことは

  • 方策によって選択する行動をサンプリングすること
  • 特定の行動 $a$ の対数尤度を計算すること $log\pi_{\theta}(a|s)$

である。

Categorical Policies

クラス分類のニューラルネットワークと似ている。 最後の層に softmax 層を作って出力を確率に変換する。

対数尤度の求め方は下記の通り
最後の層の出力を $P_{\theta}(s)$ とすると $$ log\pi_{\theta}(a|s) = log\bigl[P_{\theta}(s)\bigr]_a $$ となる。

Diagonal Gausian Policies

多変量ガウス分布 (または多変量正規分布) は平均ベクトルである $\mu$ と共分散行列である $\Sigma$ によって記述される。 対角ガウス分布 (Diagonal Gaussian distribution) は特殊なケースで、共分散行列が対角線上でのみ対応しているケースである。 このような特殊な場合ではそれをベクトルで表すことができる。

対角ガウス方策 (Diagonal Gaussian Policies) には常に観測値を行動の平均値 $\mu_\theta(s)$ に対応させるようなニューラルネットワークがあります。 共分散行列は通常2通りの定義のされかたがある。

  1. 状態の関数ではない単体のベクトルである標準偏差の対数 $log\sigma$ がある。すなわち $log\sigma$ は独立したパラメータである。(これらは VPG, TRPO, PPO などで使われている)
  2. 状態と標準偏差の対数 $log\sigma_\theta(s)$ を対応させるニューラルネットワークがある。オプションで平均ネットワークといくつかのレイヤーを共有できる。

どちらの場合でも、標準偏差を直接出力するのではなく、標準偏差の対数を出力することを留意する必要がある。 なぜなら、標準偏差は負でない限り標準偏差の対数は $(-\infty, \infty)$ の間の値を自由にとるからである。 このような制約を適用する必要がない場合は、パラメータを訓練する方が簡単である。 標準偏差は、指数化することで標準偏差の対数からすぐに取得できるため、このように表現してもなんの情報も失うことはない。

Sampling: 行動の平均 $\mu_\theta(s)$ 、標準偏差 $\sigma_\theta(s)$ と spherical Gaussian ($z \sim {\cal N}(0,I)$) から 生成されるノイズベクトル $z$ からアクションサンプルは下記のように計算できる。 $$ a=\mu_\theta(s)+\sigma_\theta(s)\odot z $$

$\odot$ は2つのベクトルの要素ごとの積を表す。 pytorchとtensorflowだとこんな感じの関数で計算できる的なことが書いてある。

対数尤度の求め方: $k$ 次元の行動ベクトル $a$ の対数尤度は、 対角ガウス分布から求められる平均 $\mu=\mu_\theta(s)$ と標準偏差 $\sigma=\sigma_\theta(s)$ から下記のように計算できる。 $$ log\pi_\theta(a|s)=-{\frac 1 2}\Biggl(\sum_{i=1}^k \Bigl({\frac {(a_i-\mu_i)^2} {\sigma_i^2}}+klog2\pi\Bigr)\Biggr) $$

Trajectories

状態・行動シーケンスを $\tau$ を使って下記のように記述する。 $$ \tau = (s_0, a_0, s_1, a_1, \dots) $$

初期状態 $s_0$ が初期状態分布にしたがってランダムで設定されることを下記のように記述する。 $$ s_0 \sim \rho_0(\cdot) $$

環境の状態遷移が決定論的な場合は $$ s_{t+1} = f(s_t, a_t) $$ 確率論的な場合は $$ s_{t+1} \sim P(\cdot|s_t, a_t) $$ と記述する。
行動はエージェントの方策に準拠する。Trajectory は episode や rollouts と呼ばれることもある。

Reward and Return

報酬関数 $R$ は強化学習において非常に重要です。それはタスクの現在の状態、選択した行動、そしてタスクの次の状態に依存している。 $$ r_t = R(s_t, a_t, s_{t+1}) $$ 多くの場合は現在の状態 $r_t = R(s_t)$ や現在の状態と行動のペア $r_t = R(s_t, a_t)$ への依存に単純化されている。

エージェントの目標は軌跡の累計報酬を最大化することであるが、これは実際にはいくつかの意味を持つ。 これらのいずれのケースにおいてもすべて $R(\tau)$ で表記しますが、どのケースを意味しているかは文脈から明らかになるか、そもそも問題になることはないだろう(同じ式がすべてのケースに適用されるからである)。

有限時区間 (finit-horizon) の報酬和は、単純な固定幅のエピソードで得られる報酬の合計である。 $$ R(\tau) = \sum_{t=0}^{T} r_t $$

その他の返値としては、無限時区間割引報酬和 (unfinit-horizon return) である。これはエージェントがこれまでに得た報酬の合計ですが獲得するタイミングが未来であれば未来であるほど割引率として小さな値がかけられる。 割引率 $\gamma$ は $\gamma \in (0,1)$ の範囲である。 $$ R(\tau) = \sum_{t=0}^{\infty} \gamma^{t}r_t $$

割引率が必要な理由としては1エピソードが有限ステップで終わらないようなタスクでは、報酬和が有限に収束しない可能性があるためである。 割引率があると報酬和は有限和に収束する。

割引前の報酬和を最適化するためにアルゴリズムを設定することはよくあるが、価値関数を推定する際には割引係数を使用する。

The RL Problem

どのような報酬和の計算方法を選択したとしても (finit-horizon retrun や unfinit-horizon retrun) 、 そしてどんな方策を選択したとしても、強化学習の目的はエージェントが報酬和の期待値を最大化するような行動を選択する方策を選択することである。

報酬和の期待値の話をするには、まず軌跡の確率分布の話をしなければいけない。

環境の遷移と方策の両方共に確率的だったと仮定する。 この場合、$T$-stepの軌跡の確率は下記のようになる。 $$ P(\tau|\pi) = \rho_0(s_0)\prod_{t=1}^{T-1} P(s_{t+1}|s_t,a_t)\pi(a_t|s_t) $$

報酬和の期待値は $J(\pi)$ と表記され下記のように定義される。 $$ J(\pi) = \int_{\tau} P(\tau|\pi)R(\tau) = \underset{\tau\sim\pi}{\Epsilon} \bigl[R(\tau)\bigr] $$

そして強化学習の最適化問題は、次のように表すことができます。 $$ \pi^{} = \argmax_{\pi} J(\pi) $$ このとき、$\pi^{}$ は最適方策となる。

Value Function

多くの場合、状態の価値または状態と行動のペアの価値を知っておくと便利である。 価値とは、その状態または状態と行動のペアでタスクを開始して特定の方策に従って行動した場合の報酬和の期待値を意味している。 価値関数はほぼすべての強化学習アルゴリズムの中でなんらの方法で使用される。

ここでは4つの主な価値関数について説明する。

  1. on-policy の価値関数 $V^{\pi}(s)$ は、ある状態 $s$ からスタートして特定の方策 $\pi$ に常に従って行動した場合の報酬和の期待値を返す。 $$ V^{\pi}(s) = \underset{\tau\sim\pi}{\Epsilon} \bigl[R(\tau)|s_0=s\bigr] $$
  2. on-policy の行動価値関数 $Q^{\pi}(s,a)$ は、ある状態 $s$ において任意の行動 $a$ をとって開始してそれ以降は方策 $\pi$ に従って行動を選択し続けた場合の報酬和の期待値を返す。 $$ Q^{\pi}(s,a) = \underset{\tau\sim\pi}{\Epsilon} \bigl[R(\tau)|s_0=s,a_0=a\bigr] $$
  3. 最適な価値関数 $V^(s)$ は、ある状態 $s$ からスタートして最適な方策に従って行動した場合の報酬和の期待値を返す。 $$ V^(s) = \max_{\pi} \underset{\tau\sim\pi}{\Epsilon} \bigl[R(\tau)|s_{0}=s\bigr] $$
  4. 最適な行動価値関数 $Q^(s,a)$ は、ある状態 $s$ において任意の行動 $a$ をとって開始してそれ以降は最適な方策に従って行動を選択し続けた場合の報酬和の期待値を返す。 $$ Q^(s,a) = \max_{\pi} \underset{\tau\sim\pi}{\Epsilon} \bigl[R(\tau)|s_{0}=s,a_{0}=a\bigr] $$
知っておくといいこと

価値関数と行動価値関数の間には高頻度で発生する重要な関係がある。 $$ V^\pi(s) = \underset{a\sim\pi}{\Epsilon}\bigl[Q^\pi(s,a)\bigr] $$ と $$ V^(s) = \max_a Q^(s,a) $$ である。
これらの関係性はこれまで与えられた定義から求めることができます。 あなたはこれらを証明できますか?

The Optimal Q-Function and the Optimal Action

最適な行動価値関数 $Q^(s,a)$ と最適な方策によって選択された行動の間には重要な関係がある。 $Q^(s,a)$ は状態 $s$ で任意の行動 $a$ でタスクを初め、その後に最適方策に従って行動を選択した場合の報酬和の期待値を返す、と定義する。

状態 $s$ での最適な方策は、$s$ でのスタートからの報酬和の期待値を最大化する行動を選択することである。 その結果、$Q^* $ があれば最適な行動 $a^(s)$ を以下の方法で直接得ることができる。 $$ a^(s) = \argmax_{a} Q^*(s,a) $$

Note: $Q^*(s,a)$ を最大化する行動が複数存在する場合は、それらの行動はすべて最適な行動であり、最適な方策はそれらの行動をランダムに選択することができる。 しかし、ある行動を決定論的に選択する最適な方策は必ず存在する。

Bellman Equations

4つの価値関数は、いずれもベルマン方程式と呼ばれる特殊な自己無撞着方程式 (self-consistency) に従う。 ベルマン方程式の基本的な考え方は次の通りです。

スタート地点の価値とは、そこにいることで得られるであろう報酬と、次に降り立つ場所の価値を足したものである。

on-policyの価値関数のベルマン方程式は下記のようになる。 $$ V^{\pi}(s) = \underset{s^{\prime}\sim P}{\underset{a\sim\pi}{\Epsilon}}\bigl[r(s,a)+\gamma V^\pi(s^{\prime})\bigr] $$ $$ Q^{\pi}(s,a) = \underset{s^{\prime}\sim P}{\Epsilon}\Bigl[r(s,a)+\gamma\underset{a^{\prime}\sim\pi}{\Epsilon}\bigl[Q^\pi(s^{\prime},a^{\prime})\bigr]\Bigr] $$

上記の $s^{\prime}\sim P$ は $s^{\prime}\sim P(\cdot|s,a)$ を省略したものであり、次状態 $s’$ が環境の遷移規則からサンプリングされていることを示している。 上記の $a\sim\pi$ は $a\sim\pi(\cdot|s)$ を省略したものであり、$a^{\prime}\sim\pi$ は $a^{\prime}\sim\pi(\cdot|s^{\prime})$ を省略したものである。

ベルマン方程式の最適価値関数は下記のように記述する。 $$ V^(s) = \max_a \underset{s^{\prime}\sim P}{\Epsilon}\bigl[r(s,a)+\gamma V^(s^{\prime})\bigr] $$ $$ Q^(s,a) = \underset{s^{\prime}\sim P}{\Epsilon}\Bigl[r(s,a)+\gamma\max_{a^{\prime}} Q^(s^{\prime},a^{\prime})\Bigr] $$

on-policyの価値関数と最適な価値関数の重要な違いは、行動選択の際に $\max$ がないかあるかの違いである。 これは、エージェントが行動を選択する際に、最適な行動をとるためには最高の価値を得ることができる行動を選択しなければならないという事実を反映している。

知っておくといいこと

“ベルマン・バックアップ (Bellman backup)“という言葉は強化学習の文献によく出てくる。 ベルマン・バックアップとは、ベルマン方程式の右辺である「報酬 $+$ 次の値」のことである。

Advantage Functions

強化学習では、ある行動が絶対的に優れているかどうかではなく、平均的にどれだけ優れているかを説明しる必要がある。 つまり、その行動の相対的な優位性を知りたいのである。 この概念を正確に表現するために、advantage関数 ( advantage function ) がある。

状態 $s$ において特定の行動 $a$ をとるという特定の方策 $\pi$ に対応するadvantage関数 $A^{\pi}(s,a)$ は、 その後ずっとランダムに行動を選択することよりも、$\pi$ の従って行動すると場合の方が、どれだけ効率的かを表している。 $$ A^{\pi}(s,a) = Q^{\pi}(s,a) - V^{\pi}(s) $$

知っておくといいこと

これについてはあとで詳しく説明するが、advantage関数は方策勾配法によって非常に重要である。

(Optional) Formalism

ここまでは、エージェントの環境について非公式に説明してきたが、文献を調べようとするとこの設定のための標準的な数学的定義に遭遇する可能性がある。
マルコフ決定過程,Markov Decision Processes (MDPs) は5つの tuple で $\langle S,A,R,P,\rho_0 \rangle$ と表され、それぞれは下記のような意味がある。

  • $S$ は有効な状態の集合である。
  • $A$ は有効な行動の集合である。
  • $R : S \times A \times S \rarr \reals$ は報酬関数であり次のように表される。$r_t=R(s_t,a_t,s_{t+1})$
  • $P : S \times A \rarr {\cal P}(S)$ は遷移確率関数であり次のように表せる : $P(s^{\prime}|s,a)$ 、この式が意味していることが状態 $s$ で行動 $a$ をとり次状態 $s^{\prime}$ に遷移する確率を意味している。
  • そして $\rho_0$ は開始状態の分布となる

参考