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)は世界(environmentとworldの違いがイマイチわからないがとりあえず環境,世界と区別して書く)の状態を記述したもので,に含まれない世界の状態の情報はない.それに対し観測(observation)は状態の一部を記述したもの.
Deep RLにおいて状態と観測はreal-valued vector, matrixまたはhigher-order tensorによって記述される.例えばロボットは観測をRGBカメラによって得るとすれば,はカメラによって得られた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はエージェントがどの行動を取るか決めるのに使うルール.行動の選択が決定的な場合次のようにによって表現される.
もしくは確率的なものとしてを使って次のように表現される.
場合によってはagentをpolicyと置き換えて使うこともあるそう.
Deep RLにおいてはparameterized policiesを使い,上記のやがニューラルネットによって表されるとのこと.つまり,ニューラルネットのパラメータをと表現すれば次のように表現可能.
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)
これは先ほどの数式を使えばで表現できて,がいわゆる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からの行動のサンプリング
・特定の行動の対数尤度の計算
Diagonal Gaussian policyに関してはガウス分布の平均は状態に関する関数として表現するのが一般的だが,分散に関しては2種類の表現が使われていて,一つは状態とは関係のないただのベクトルとして表現する方法で,もう一つはとする方法.
Trajectories
Trajectory は次のような世界の状態と行動の系列のこと.
つまり強化学習していく上で,環境がどのように変化したか,その時どのような行動をとったかのログ.初期の状態はstart-state distribution なる分布からサンプリングされる.
状態の遷移(時刻の状態から時刻で状態への移り変わり)は環境における自然な法則によって拘束されていて(つまりありえない移り変わりはできない),直近の行動にのみ依存する.この遷移も決定的,確率的なものがあり次のように表現される.
また,行動はpolicyから決められる.ちなみにtrajectoriesはepisodesやrolloutsと呼ばれることもあるとのこと.
Reward and Return
Reward function はRLにおいてめちゃくちゃ重要で,世界の現在の状態と選択された行動,それによって遷移した状態に依存する.
ただし,場合によっては簡単化されて現在の状態のみに依存,または状態と行動に依存する場合もある.
目標としてはtrajectoryに対してcumulative reward を最大化すること.選択肢の一つとしてfinite-horizon undisputed returnがあり,これは次のように固定ウィンドウ幅で報酬の和を取るというもの.
もう一つの選択肢としてはinfinite-horizon discounted returnで,エージェントから得られた全ての報酬の和を取るというもの.ただし,一般には適当な減衰率を使って重み付き和で表現される.
この減衰という操作には直感的な解釈と数学的な利点があって,直感的には後で受け取る報酬より直近の報酬の方が重要(出だしでつまづいたらどうしようもないということか),数学的には無限の足し合わせだと有限の値に収束しなくなって扱いにくいが,適当な減衰係数があることで収束するから嬉しいということらしい.
通常のRLだと上の二つのreturnは明確に定義されているが,ことdeep RLに関しては明確でない場合があるそう.deep RLだとしばしばundiscounted returnを最適化するアルゴリズムをセットアップするが,value functionsを推定するのに減衰係数を使うとのこと.(まだ詳しい話出てきてないのにいきなりこんなこと言われてもよくわからないが)
The RL Problem
Return functionやpolicyをどう選んだとてRLの目標はexpected returnを最大化するpolicyを選択すること(policyの選択がなんであろうとゴールは最適なpolicyを選ぶとはこれいかに).
Expected returnの説明をするために,状態遷移とpolicyが確率的な状況について考える.この時,ステップめのtrajectoryの確率は次のように与えられる.
この式は状態が以外とは独立なことから得られる.この時returnがどのようなものであれ,expected return は次のように計算できる.
これは普通に期待値の計算.するとRLの最適化問題はexpected returnの最大化なので次のように表現される.
Value Functions
Value functionsは状態または状態と行動のペアの価値を知るために使われる関数でほぼ全てのRLアルゴリズムで使われる.一般的にはexpected returnで表現され,主に次の4種類に分類される.
- On-Policy Value Function
状態から始まり,常にpolicyに従って行動する場合
2.On-Policy Actoin-Value Function
状態から始まり,最初にある行動を取り,その後常にpolicy に従って行動する場合
- Optimal Value Function
状態から始まり,その環境において最適なpolicyに従って常に行動するような場合
- Optimal Action-Value Function
状態から始まり,最初にある行動を取り,その後その環境において最適なpolicyに従って常に行動するような場合.
Value FunctionとAction-Value Functionの間には次のような関係がある.
要は取りうる行動に対してaction-value functionを周辺化すればvalue functionになる.
The Optimal Q-Function and the Optimal Action
状態における最適なpolicyはから始まるexpected returnを最大化する行動を選択する.その結果もしが得られれば,最適な行動を直接得ることができる.
ただし,expected returnを最大化する行動が複数存在する場合もあり,その時は行動はランダムに選ぶ.
Bellman Equations
実は先ほどあげた4つのタイプのvalue functionsは全てBellman equationsと呼ばれるspecial self-consistency equations(これは日本語だとなんて訳を当てるのか)に従う.
On-policy value functionsにおけるBellman方程式は次のように表現される.
はのことで,次の状態が環境の遷移分布からサンプリングされることを意味していて,は,はを表す,Bellman方程式は開始点における価値(value)はその点から期待される報酬( Reward)と次の点の価値[V^\pi(s')]の足し合わせであるという考えに基づいている.
Optimal value functionsに関するBellman方程式も同様に表現できる.
On-policy/optimal value functionのBellman方程式間の明確な違いは行動に対する最大化があるかないかのみ.
Advantage Functions
RLにおいてたまに,特定の状況下でとった行動がどれくらいよかったかではなく,ほかと比べて平均的にどれくらいよかったかを知りたい場合がある(ローカルに見るかグローバルに見るかという感じ).そのためadvantage functionの概念を作る.
あるpolicy に対応するadvantage function は,永久にに従って行動するという仮定の下,ある状態において特定の行動をとった時にどれくらいよかったかを記述するもの.数学的には次のようにかける.
Advantage functionsに関してはまた後ほど解説がある.
Formalism
文献を読んでいくとMarkov Decision Processes (MDPs)の設定に遭遇する場合があるだろうということ.ここはoptionalなので特に詳しいことはないが,MDPsは5-tuple,で定義されるもので,
・は取りうる全ての状態の集合
・は取りうる全ての行動の集合
・はreward functionで
・は遷移確率関数では状態で行動をとった時に状態に遷移する確率
・は初期状態分布(starting state distribution)
まとめ
とりあえずpart 1まで.まだここで出てきたものがどのように使われるか出てきてないので理解が進みにくいがなんとなく雰囲気はつかめた.