HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

ベルマン最適方程式とベルマン期待方程式【強化学習基礎】

 

 

follow us in feedly

はじめに

強化学習の勉強では、まず間違いなく「ベルマン方程式」なる数学の壁でつまづく人が多いと思われます。 強化学習という、もともと問題がかなり複雑な設定で「ベルマン方程式」なる見た目が仰々しい式が出てくるために、数学が苦手な人はそもそも理解を諦めてしまうのではないでしょうか。

ベルマン方程式が何を意味していて、どのような成り立ちで出てくるものなのかを下記の記事で「制御問題」という出発点によって記述しました。

www.hellocybernetics.tech

上記の記事ではそれなりに納得感のある形でベルマン方程式を簡潔に導出しましたが、実際のところ、強化学習の問題設定は、最適制御問題よりも一般には複雑です。 その理由は、制御したい対象のシステムが根本的に確率的な振る舞いをするためです。これにより、数学的に解くのが難しいということに加え、仮に数学的に記述できたとて、決定論的に何かの意思決定ができないのです。

そのため、確率や統計で出てくる概念をふんだんに盛り込んで強化学習という枠組みが完成します。今、上記の記事などでベルマン方程式の生い立ちや意味をある程度理解した前提で、これが確率システムの制御を行うためにどのように発展していくのかを解説します。

ベルマン期待方程式

ベルマン最適方程式の復習

まず、ベルマン最適方程式は

$$ V ({\bf x} _ t) = \max _ {\bf u} R({\bf x } _ t, {\bf u } _ t) + \gamma \max _ {\bf u} \sum _ {{\bf x} _ { t + 1}} p( {\bf x} _ {t + 1} \mid {\bf x} _ t , {\bf u} _ t) V ({\bf x} _ {t+1}) $$

と表せるのでした。ここで ${\bf x} _ t$ は制御したい対象の時刻 $t $ における状態です。また ${\bf u} _ t $ は制御対象に外部から与える制御入力です。 $V({\bf x} _ t)$ は価値関数と呼ばれ、その意味は時刻 $t$ における状態 ${\bf x} _ t$ と、それ以降に状態が変化していく振る舞いが最適であった場合の評価値を返す関数です。

ここで、なぜに ${\bf x} _ t$ が引数なのかというと、現在の状態次第では未来に取る状態の振る舞いは変わるであろうからです。すなわち、今後は可能な限り最適な状態遷移をしていくという前提で行く場合、今の状態がどのようなものであれば良いのかは、この価値関数に現在取りうる値を全て代入して値を評価してみれば分かるということです(なぜなら、それ以降は最適な状態遷移をする前提なのだから)。

$R ({\bf x} _ t, {\bf u} _t)$ は状態 ${\bf x} _ t$ の時に制御入力 ${\bf u} _ t$ を与えることの良さを評価するものです。この項が現在の状態に対して、どのような制御入力を与えてやるのが良いのかを表してくれます。第二項の複雑に見える式は、未来のことについて言及しており、 $p( {\bf x} _ {t + 1} \mid {\bf x , u}) $ が状態 $\bf x$ に対して制御入力 $u$ を与えた場合に次の状態 ${\bf x} _ t$ がどのように遷移するのかを表す確率分布です。ある次の状態が ${\bf x} _ {t+1}$ なのだとすれば、それ以降の最適な評価値は、価値関数 $V({\bf x} _ {t+1})$ によって再帰的に表せます。もちろんこの第二項は「状態が最適な振る舞いをする前提」なのですから、最適な状態の振る舞いをするような制御入力 $\bf u$ が入ったという前提であり、$\max _ {\bf u }$がそれを表しています。また $\sum$ は、確率的な振る舞いによって次の状態は確定してはいないのですから、考えうる状態全ての和を考慮しているのです(要するに、次の時刻での価値関数を、状態遷移確率によって期待値演算しているのです)。

$\gamma $は割引率と呼ばれ、数学的には $1$ 未満の正数とすることで再帰的な式が発散しないようにする役割を担います。気持ちとしては、「未来の確率的な振る舞いによる不確実な評価より、現在の直近の評価を優先しよう」という意図が込められます。

以降では、強化学習の慣習に従い、 $\bf x$ は $s$ とし、 $\bf u$ は $a$ と書くことにします。すなわち制御問題におけるシステムの状態は環境の状態であり、制御入力はエージェントの行動というふうに読み替えます。

$$ V (s _ t) = \max _ a R(s _ t, a _ t) + \gamma \max _ a \sum _ {s _ { t + 1}} p( s _ {t + 1} \mid s _ t , a _ t) V (s _ {t+1}) $$

ベルマン期待方程式

さて、強化学習で本格的に使われるのは下記のベルマン期待方程式と呼ばれるベルマン方程式です。

$$ V ^ \pi (s _ t) = \sum _ a \pi(a _ t \mid s _ t) R(s _ t, a _ t) + \gamma \sum _ a \pi(a _ t \mid s _ t) \sum _ {s _ { t + 1}} p( s _ {t + 1} \mid s _ t , a _ t) V ^ \pi (s _ {t+1}) $$

びっくりする必要はありません。ベルマン方程式をしっかり理解していれば、単に $\max _ a$ という演算子が $ \sum _ a \pi(a _ t \mid s _ t)$に代わっているだけだということにすぐ気づきます。 もしも、ベルマン最適方程式の時点で詰まっている場合は、ぜひ下記の記事を読んでください。

www.hellocybernetics.tech

さて、ベルマン期待方程式で突如現れた $\pi(a _ t\mid s _ t)$ について説明します。これは制御の言葉で言うならばフィードバック制御則と言えます。 これまでは、制御入力、あるいは行動を決める何かの存在を明示していませんでした。要するに環境が状態 $s$ だったとして、外から $a$ を神の如く最適に選べるかのように扱っていたのです。

しかし実際はそうはいきません。環境が状態 $s$ であるということを観測したのならば、その観測に応じて、行動 $a$ を 何らかの規則で上手に決定 してあげなければなりません。フィードバック制御の理論では、このような規則は何らかの関数で記述できます。すなわち $a = f(s)$ という式によって表すことができ、 $f$ を上手に設計するのが制御設計の役割であるということです。

強化学習でも同様に $a = f(s)$ という決定論的な振る舞いをするエージェントを作れば良いのですが、後に説明する事情によって、 $\pi (a _ t\mid s _ t) $ という $s$ に応じた $a $ の条件付き分布としてエージェントの振る舞いを決めます。この $\pi $のことを通常は方策 >と呼びます。

さて、この方策は確率分布であるのです。そうだとすれば、例えば第一項 $ \max _ a R(s _ t, a _ t)$ というのを$\sum _ a \pi(a _ t \mid s _ t) R(s _ t, a _ t) $に書き換えたというのはすなわち、最大の報酬を得られるような $a$ を選択して $R$ を得るのではなく、 ある方策 $\pi $ でどの程度の報酬が見込めるかを考えることにしたということです。これは要するに、現在の報酬 $R(s _ t, a _ t)$ の方策 $\pi(a _ t \mid s _ t)$ による期待値です。

現在の状態 $s _ t$ は既に観測済なので、これに対して確率的に $a _ t $ を決めた場合には、どんな報酬 $R$ が得られるのかを全ての可能な $a _ t$ のパターンで計算しているわけです。そうすることで、確率的に行動を決める方策 $\pi $そのものの評価ができるようになるということです(なぜなら、$\pi $ に行動の決定権を全て委ねた場合に、どんな報酬が得られるのか、その期待値を見積もっているのだから)。

第二項も同様で、もともとは今後の状態が最適になるような都合の良い $a $ を神のごとく選定できる前提ではなく、$\pi$ に行動の決定を委ねた場合の、次の時刻の価値関数を見積もっているのです。

故にこの式は、ベルマン最適方程式に対して、ベルマン期待方程式と呼ばれるのです。

ところで、なぜフィードバック制御則のごとく、決定論的関数 $a = f(s)$ によってではなく、条件付き分布 $a \sim \pi(a \mid s)$ などと行動を選ぼうとしたのでしょうか。ここからが、最適制御の話から離れ、強化学習問題そのものに向き合わなければならないフェイズです。

環境というシステムを探る

知識の活用と蓄積

さて、最適制御のごとく決定論関数を使わないのは、簡単に言えば「環境という未知のシステムを探る」必要性があるからです。最適制御問題では環境のモデル、すなわち制御対象のシステムというのは既に同定されている前提でした。何を言っているのかというと、例えばそのシステムはロボットであるとか、化学プラントであるとか、何かしらの設計によって物理的に振る舞いが分かっているものであるということです。とはいえ、例えばロボットが消費電力をなるべく少なくしながらも、上手に歩行をしなければならないとしたならば、その要望を評価関数に織り込んで、制御の方法を決定しなければなりません。それが最適制御問題なのです。つまり、何かの入力を入れればどんな振る舞いをするのかの微分方程式を知っているのだが、では要望の通りの振る舞いを達成するには、どんな入力を入れてあげれば良いのか?というところにフォーカスしていることになります。

これのどこが難しいのかというと、強化学習に比べたら問題設定としては難しくないという回答になります。しかし、大抵の場合強化学習で達成しようとする性能より、遥かにシビアな性能が要求されるケースが多いです。「なるべく良さそうな」では許されず、一歩間違えば大損失を被るような問題であることが多いでしょう(転んで大破したり、プラントが炎上したり…)。つまり、解いては見たものの満足の行く結果を得られない…という難題にぶつかるのです。

一方で強化学習問題というのは、制御対象のシステム、あるいは環境が、「なんだか時刻的に規則のある振る舞いをしている」ということは分かっているのだが、その詳細を知らないという前提で問題を解かなければなりません。つまり、どんな入力を入れたらどんな状態変化が起こるのかを知らないのだから、その状態変化の振る舞いも探りながら、うまい制御則を見つけなければいけないということです。

そうすると、今、適当な最適制御則と思われるものが見つかったとて、それは単に環境の状態の振る舞いに関する知識が乏しいからそう思えるだけかもしれないのです。そうであれば、そこまでの知識では最適だと思っている行動から、あえて外れた行動をして、あくまでデータ収集というつもりで状態変化を起こして新しい観測を得たい…というふうに思えてきます。

従って、今の知識で最適だと思われる行動+状態の遷移の仕方(環境の振る舞い)に関する情報集めのための行動を上手に織り交ぜながら、時を過ごしていかねばなりません。(これは知識の活用と知識の蓄積のトレードオフと呼ばれるようである)

それを実現するために決定論的関数の代わりに、確率的に行動を決める方策関数なる条件付き分布を使うのです。

ここまでを理解すると

$$ V ^ \pi (s _ t) = \sum _ a \pi(a _ t \mid s _ t) R(s _ t, a _ t) + \gamma \sum _ a \pi(a _ t \mid s _ t) \sum _ {s _ { t + 1}} p( s _ {t + 1} \mid s _ t , a _ t) V ^ \pi (s _ {t+1}) $$

という価値関数を考えることは自然に思えないでしょうか。 すなわち、今適当な方策 $\pi$ (こいつは大抵は今の知識で最適だと思われる行動をとるが、たまに冒険もする)によって、得られるであろう時刻 $t$ 以降の価値であるということです。

冒険の結果から学びを得る

さて、ある方策 $\pi$ で一連の冒険を過ごしてみたとしましょう。すなわち実際に方策から行動を決定し、その時の知識では最適だと思われる行動を取りつつも、たまに知識の蓄積のために違う行動もしてみる、ということを一定時刻(あるいは最後まで)やってみるのです。例えば、ある戦術を決めて、その戦術を曲げずに最後まで囲碁の対局を勧めてみるのです。すると勝つかもしれないし負けるかもしれないですが、今回の方策が良かったのかを知ることができますし、いろいろな打ち手(状態の遷移)を経験できるので、これを方策の更新に活かせます。

そうして方策の更新を行ったのならば、次は新たな方策で次の冒険に挑むのです。この一連の冒険を「エピソード」などと呼びますが、実際には1エピソードを丸々費やす必要はありません(例えば、人生は1エピソードで終わりですから、もっと細かく方策の更新をしてもいいはずですね)。

モデルベースとモデルフリー

さて、今、大雑把に知識の活用と蓄積の話、そして学習の話をしました。ところで、強化学習においては環境の振る舞いは(一定の仮定はあれど)未知であるということを思い出してください。 この未知に立ち向かう方法は、ひたすら経験を積んで良さそうな行動の仕方(方策)を頑張って見つける方法と、経験を積んでいく仮定で、どんな行動をとったらどんな状態遷移が起こるのか、すなわち環境そのものを知ろうという方法の2つがあります。

前者をモデルフリー、後者をモデルベースと言います。仮に環境の状態が概ねわかったのであれば、最適制御がそうであったように、そもそも環境の振る舞いを知っている前提で上手に行動を組み立てる手立てが見つかるかもしれません。これはプランニングと呼ばれる方法であり、強化学習の枠組みと最適制御の枠組みのちょうど中間に位置します。動的計画法による方法が最も有名ですが、たとえモデルフリーの荒っぽい手法であっても、「環境がある程度分かっている時には上手い解決方法がある」という前提に立って、その結果を上手く活かして手法が作られていることは知っておいて損はないでしょう(つまり強化学習の手法は動的計画法などの基礎的手法に支えられているのである)。

最後に

今回はベルマン最適方程式からベルマン期待方程式につなげることと、その意義を説明するために軽く学習の話まで踏み込みました。