isatoの活動日記

管理人isatoが毎日の生活で気になったこと、勉強になったことを書いています。

強化学習の行動価値関数について

強化学習ではある状態に対してどのような行動をとれば、その後に得られる総報酬が最大化されるかを学習していきます。

強化学習ではこの指標を「行動価値」とよび、「行動価値関数」というもので表現しています。  

行動価値関数Q(s_t,a_t)の理想的な定義は、状態s_tと行動a_tを渡すと時刻t以降で得られる報酬rの総和を返してくれるものです。

つまりざっくり式で表すと

$$ Q(s_t,a_t) = r_t + r_{t+1} + r_{t+2} + r_{t+3} + ・・・\;\;\;\;\;\;\;\;(1)$$

のようになってほしいわけです。

ですがこの定義だと、(報酬が常に同符号だと仮定すると)値が無限に発散してしまいます。 また、行動a_tが大きな影響を与えるのは報酬r_tであって、報酬r_{t+T}に大きな影響を与えるのは行動a_{t+T}です。にもかかわらず全てのrが同列に扱われているのは不適切であると考えられます。

そこで割引率\gammaというものを導入します。\gammaは0~1の値で、経過時間に応じて報酬に乗算していきます。

式(1)に割引率を適用すると以下のようになります。

$$ Q(s_t,a_t) = r_t +\color{red}{\gamma}・r_{t+1} + \color{red}{{\gamma}^2}・r_{t+2} + \color{red}{{\gamma}^3}・r_{t+3} + ・・・\;\;\;\;\;\;\;\;(2)$$

これによって行動価値はある一定値に定まります。

さて、行動価値関数の定義ができたところで、これを実際に学習していきたいわけです。

機械学習では、目標となる数式の両辺の情報が手に入れば、教師あり学習として学習できます。

ということで情報を集めていきたいわけですが、式(2)の右辺が無限和になっていて、全て集めるのは困難です。

そこで、式(2)を少し工夫します。

$$ Q(s_t,a_t) = r_t +{\gamma}・r_{t+1} + {{\gamma}^2}・r_{t+2} + {{\gamma}^3}・r_{t+3} + ・・・$$ $$ \;\;\;\;\;\;\;\;\;\;\;\;\;\;= r_t +{\gamma}・(r_{t+1} + {{\gamma}}・r_{t+2} + {{\gamma}^2}・r_{t+3} + ・・・)$$ $$ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;= r_t +{\gamma}・Q(s_{t+1},a_{t+1})\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;(3)$$

式(3)のようにしますと、両辺の情報が時刻tと時刻t+1のみで構成されているため、容易に集めることができます。

そして、あらゆる状態行動の組み合わせで式(3)の等号が満たされるなら、実質的に式(2)が満たされているとみなすことができます。

Q(s_t,a_t) を作るために学習しているのに、学習中にQ(s_t,a_t) を使ってもいいのか?と思われる方もいらっしゃるかと思います。

これが強化学習の特徴的な部分で、教師信号も学習していくということです。

分かりづらかったかもしれませんが、ざっくりとはこんな感じです。

もう少し勉強します~。