機械学習とかコンピュータビジョンとか

CVやMLに関する勉強のメモ書き。

OpenAIのSpinning Upで強化学習を勉強してみた その1

はじめに

OpenAIが提供するSpinning Upで深層強化学習の勉強をしたのでメモ.ちなみに強化学習は完全素人で何も知らない状態から始めていて,とりあえずの取っ掛かりとしてSpinning Upを利用してみたと言うところ.個人的にtensorflowで書かれているのがしんどい.

Part 1: Key Concepts in RL

まず,強化学習(RL; Reinforcement Learning)とは何かというざっくりとした概念の説明.

Part 1のページはこちら

Key Concepts and Terminology

RLはエージェント(agent)と環境(environment)という二つの主要な要素から成り立っている.環境はエージェントが存在して行動をする世界のこと.エージェントは行動のたびに世界の状態を観測して取りべき行動(action)を決定する.例えば将棋(趣味が将棋なので)の場合は,盤面の駒の配置(環境)を観測した後エージェントはどの駒をどこに動かすか(action)を決定するということ.

ただ,エージェントは闇雲に行動しても意味がないので,エージェントは行動した結果に対し環境から報酬(reward)を受け取る.報酬は行動の良し悪しによって与えられる報酬が変わり,この報酬を目安として最適な行動を取るように学習していくと言うものがRL.

以下,RLを学ぶ上で基本かつ重要な概念など.

States and Observations

状態(state)sは世界(environmentとworldの違いがイマイチわからないがとりあえず環境,世界と区別して書く)の状態を記述したもので,sに含まれない世界の状態の情報はない.それに対し観測(observation)oは状態の一部を記述したもの.

Deep RLにおいて状態と観測はreal-valued vector, matrixまたはhigher-order tensorによって記述される.例えばロボットは観測をRGBカメラによって得るとすれば,oはカメラによって得られたRGBの画像となる.この場合小さな部屋にロボットがいれば世界はその部屋の中で,観測はカメラで撮影された部屋の一部ということ.

仮にエージェントが環境の全ての状態を観測可能な場合には,その環境のことをfully observedといい,一部しか観測できない場合にはpartially observedという.

Action Spaces

異なる環境においては取れる行動の種類は異なる.車の制御ならアクセルとブレーキとハンドル操作,囲碁ならどこに石を置くかなど.逆にいえば車の制御という課題で碁石をおくという行動はできない.そのため,与えられた環境で許されている行動の集合をaction spaceと呼ぶ.このaction spaceは離散な行動のみを許すdiscrete action spacesと連続な行動を許すcontinuous action spacesがある.さっきあげた例だと車はcontinuousで囲碁はdiscrete.

このdiscreteかcontinuousかはRLの手法に大きな影響を与え,多くの場合どちらか一方にしか適用できないことが多く,もう一方のaction spacesに適用する場合にはアルゴリズムに大きな変更を要する場合があるとのこと.

Policies

Policyはエージェントがどの行動を取るか決めるのに使うルール.行動の選択が決定的な場合次のように\muによって表現される.

\displaystyle
a_t=\mu(s_t)

もしくは確率的なものとして\piを使って次のように表現される.

\displaystyle
a_t\sim\pi(\cdot|s_t)

場合によってはagentをpolicyと置き換えて使うこともあるそう.

Deep RLにおいてはparameterized policiesを使い,上記の\mu\piニューラルネットによって表されるとのこと.つまり,ニューラルネットのパラメータを\thetaと表現すれば次のように表現可能.

\displaystyle
a_t=\mu_\theta(s_t)\\ \displaystyle
a_t\sim\pi_\theta(\cdot|s_t)

Deterministic Policies

Continuous action spaceにおけるdeterministic policiesの例として次のようなtensorflowのコードがあげられてた.

obs = tf.placeholder(shape=(None, obs_dim), dtype=tf.float32)
net = mlp(obs, hidden_dims=(64,64), activation=tf.tanh)
actions = tf.layers.dense(net, units=act_dim, activation=None)

これは先ほどの数式を使えばa_t=\mu_\theta(s_t)で表現できて,\muがいわゆる1層の全結合層になっている状態.

Stochastic Policies

Deep RLにおけるstochastic policiesは基本的にcategorical policiesかdiagonal Gaussian policiesを使うとのこと.

Categorical policiesはdiscrete action spacesの場合に使われ,diagonal Gaussian policiesはcontinuous action spacesの時に使われる.

Stochastic policiesでは次の2つの計算が重要となる.

・policyからの行動のサンプリング

・特定の行動の対数尤度\log\pi_\theta(a|s)の計算

Diagonal Gaussian policyに関してはガウス分布の平均は状態に関する関数\mu_\theta(s)として表現するのが一般的だが,分散\sigma^2に関しては2種類の表現が使われていて,一つは状態とは関係のないただのベクトル\log\sigmaとして表現する方法で,もう一つは\log\sigma_\theta(s)とする方法.

Trajectories

Trajectory \tauは次のような世界の状態と行動の系列のこと.

\displaystyle
\tau=(s_0,a_0,s_1,a_1,\dots)

つまり強化学習していく上で,環境がどのように変化したか,その時どのような行動をとったかのログ.初期の状態s_0はstart-state distribution \rho_0なる分布からサンプリングされる.

\displaystyle
s_0\sim\rho(\cdot)

状態の遷移(時刻tの状態s_tから時刻t+1で状態s_{t+1}への移り変わり)は環境における自然な法則によって拘束されていて(つまりありえない移り変わりはできない),直近の行動a_tにのみ依存する.この遷移も決定的,確率的なものがあり次のように表現される.

\displaystyle
s_{t+1}=f(s_t,a_t)\\ \displaystyle
s_{t+1}\sim P(\cdot|s_t,a_t)

また,行動はpolicyから決められる.ちなみにtrajectoriesはepisodesやrolloutsと呼ばれることもあるとのこと.

Reward and Return

Reward function RはRLにおいてめちゃくちゃ重要で,世界の現在の状態と選択された行動,それによって遷移した状態に依存する.

\displaystyle
r_t=R(s_t,a_t,s_{t+1}

ただし,場合によっては簡単化されて現在の状態のみに依存r_t=R(s_t),または状態と行動に依存r_t=R(s_t,a_t)する場合もある.

目標としてはtrajectoryに対してcumulative reward R(\tau)を最大化すること.選択肢の一つとしてfinite-horizon undisputed returnがあり,これは次のように固定ウィンドウ幅Tで報酬の和を取るというもの.

\displaystyle
R(\tau)=\sum_{t=0}^Tr_t

もう一つの選択肢としてはinfinite-horizon discounted returnで,エージェントから得られた全ての報酬の和を取るというもの.ただし,一般には適当な減衰率\gamma\in(0,1)を使って重み付き和で表現される.

\displaystyle
R(\tau)=\sum_{t=0}^\infty\gamma^tr_t

この減衰という操作には直感的な解釈と数学的な利点があって,直感的には後で受け取る報酬より直近の報酬の方が重要(出だしでつまづいたらどうしようもないということか),数学的には無限の足し合わせだと有限の値に収束しなくなって扱いにくいが,適当な減衰係数があることで収束するから嬉しいということらしい.

通常のRLだと上の二つのreturnは明確に定義されているが,ことdeep RLに関しては明確でない場合があるそう.deep RLだとしばしばundiscounted returnを最適化するアルゴリズムをセットアップするが,value functionsを推定するのに減衰係数を使うとのこと.(まだ詳しい話出てきてないのにいきなりこんなこと言われてもよくわからないが)

The RL Problem

Return functionやpolicyをどう選んだとてRLの目標はexpected returnを最大化するpolicyを選択すること(policyの選択がなんであろうとゴールは最適なpolicyを選ぶとはこれいかに\dots).

Expected returnの説明をするために,状態遷移とpolicyが確率的な状況について考える.この時,Tステップめのtrajectoryの確率は次のように与えられる.

\displaystyle
P(\tau|\pi)=\rho_0(s_0)\prod_{t=0}^{T-1}P(s_{t+1}|s_t,a_t)\pi(a_t|s_t)

この式は状態s_{t+1}s_t,a_t以外とは独立なことから得られる.この時returnがどのようなものであれ,expected return J(\pi)は次のように計算できる.

\displaystyle
J(\pi)=\int_\tau P(\tau|\pi)R(\tau)=\underset{\tau\sim\pi}{E}[R(\tau)]

これは普通に期待値の計算.するとRLの最適化問題はexpected returnの最大化なので次のように表現される.

\displaystyle
\pi^\ast=\underset{\pi}{\mathrm{argmax}}J(\pi)

Value Functions

Value functionsは状態または状態と行動のペアの価値を知るために使われる関数でほぼ全てのRLアルゴリズムで使われる.一般的にはexpected returnで表現され,主に次の4種類に分類される.

  1. On-Policy Value Function

状態sから始まり,常にpolicy\piに従って行動する場合

\displaystyle
V^\pi(s)=\underset{\tau\sim\pi}{E}[R(\tau)|s_0=s]

2.On-Policy Actoin-Value Function

状態sから始まり,最初にある行動aを取り,その後常にpolicy \piに従って行動する場合

\displaystyle
Q^\pi(s,a)=\underset{\tau\sim\pi}{E}[R(\tau)|s_0=0,a_0=a]

  1. Optimal Value Function

状態sから始まり,その環境において最適なpolicyに従って常に行動するような場合

\displaystyle
V^\ast(s)=\max_\pi\underset{\tau\sim\pi}{E}[R(\tau)|s_0=s]

  1. Optimal Action-Value Function

状態sから始まり,最初にある行動aを取り,その後その環境において最適なpolicyに従って常に行動するような場合.

\displaystyle
Q^\ast(s,a)=\max_\pi\underset{\tau\sim\pi}{E}[R(\tau)|s_0=s,a_0=a]

Value FunctionとAction-Value Functionの間には次のような関係がある.

\displaystyle
V^\pi(s)=\underset{a\sim\pi}{E}[Q^\pi(s,a)] \\ \displaystyle
V^\ast(s)=\max_aQ^\ast(s,a)

要は取りうる行動に対してaction-value functionを周辺化すればvalue functionになる.

The Optimal Q-Function and the Optimal Action

状態sにおける最適なpolicyはsから始まるexpected returnを最大化する行動を選択する.その結果もしQ^\astが得られれば,最適な行動a^\ast(s)を直接得ることができる.

\displaystyle
a^\ast(s)=\underset{a}{\mathrm{argmax}}Q^\ast(s,a)

ただし,expected returnを最大化する行動が複数存在する場合もあり,その時は行動はランダムに選ぶ.

Bellman Equations

実は先ほどあげた4つのタイプのvalue functionsは全てBellman equationsと呼ばれるspecial self-consistency equations(これは日本語だとなんて訳を当てるのか\dots)に従う.

On-policy value functionsにおけるBellman方程式は次のように表現される.

\displaystyle
V^\pi(s)=\underset{\overset{a\sim\pi}{s'\sim P}}{E}[r(s,a)+\gamma V^\pi(s')]\\ \displaystyle
Q^\pi(s,a)=\underset{s'\sim P}{E}\left[r(s,a)+\gamma\underset{a'\sim\pi}{E}[Q^\pi(s',a')]\right]

s'\sim Ps'\sim P(\dot|s,a)のことで,次の状態s'が環境の遷移分布からサンプリングされることを意味していて,a\sim\pia\sim\pi(\dot|s)a'\sim\pia'\sim\pi(\dot|s')を表す,Bellman方程式は開始点における価値(value)はその点から期待される報酬( Reward)r(s,a)と次の点の価値[V^\pi(s')]の足し合わせであるという考えに基づいている.

Optimal value functionsに関するBellman方程式も同様に表現できる.

\displaystyle
V^\ast(s)=\max_a\underset{s'\sim P}{E}[r(s,a)+\gamma V^\ast(s')]\\ \displaystyle
Q^\ast(s,a)=\underset{s'\sim P}{E}\left[r(s,a)+\gamma\max_{a'}Q^\ast(s',a')\right]

On-policy/optimal value functionのBellman方程式間の明確な違いは行動に対する最大化があるかないかのみ.

Advantage Functions

RLにおいてたまに,特定の状況下でとった行動がどれくらいよかったかではなく,ほかと比べて平均的にどれくらいよかったかを知りたい場合がある(ローカルに見るかグローバルに見るかという感じ).そのためadvantage functionの概念を作る.

あるpolicy \piに対応するadvantage function A^\pi(sea)は,永久に\piに従って行動するという仮定の下,ある状態sにおいて特定の行動aをとった時にどれくらいよかったかを記述するもの.数学的には次のようにかける.

\displaystyle
A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s)

Advantage functionsに関してはまた後ほど解説がある.

Formalism

文献を読んでいくとMarkov Decision Processes (MDPs)の設定に遭遇する場合があるだろうということ.ここはoptionalなので特に詳しいことはないが,MDPsは5-tuple,\langle S,A,R,P,\rho_0\rangleで定義されるもので,

Sは取りうる全ての状態の集合

Aは取りうる全ての行動の集合

R:S\times A\times S\rightarrow\mathbb{R}はreward functionでr_t=R(s_t,a_t,s_{t+1}

P:S\times A\rightarrow \mathcal{P}(S)は遷移確率関数でP(s'|s,a)は状態sで行動aをとった時に状態s'に遷移する確率

\rho_0は初期状態分布(starting state distribution)

まとめ

とりあえずpart 1まで.まだここで出てきたものがどのように使われるか出てきてないので理解が進みにくいがなんとなく雰囲気はつかめた.