【強化学習】Potential based Reward Shaping を試してみる

今回はPotential based Reward Shapingをgrid world問題上で試してみます。

Potential based reward shaping

Potential Based Reward Shaping(PBRS)はreward shapingの一手法になります。
reward shapingは名前の通り、環境から直接得られる報酬を成形することによって学習を高速化、安定化させることを目指したフレームワークです。
そのreward shapingの一手法がPBRSであり、
この手法では、報酬をshapingしない時とshapingした時の最適方策が変化しないことが、理論的に示されている手法で、近年数多く研究されています。
前にも概要だけ紹介しました

【強化学習】Reward Shaping
Reward Shapingとは強化学習の通常の報酬値に、追加の値を加えることで、学習速度を向上させることを目指すフレームワークです。最もシンプルなReward Shapingは、以下のように、通常の報酬値\(r\)に追加の報酬\(F\...

簡単にいうと以下のように通常の報酬値\(r\)にある値を加える手法です。

$$\begin{aligned}
r_{shaped} = r + \gamma \phi(s’) – \phi(s)
\end{aligned}$$

\(\phi(s)\)がポテンシャル関数といい、この関数をどのように設定するかによって、 PBRSの性能が変わってきます。

試してみるポテンシャル関数

元の論文では、最適なポテンシャル関数とは、
学習済みの状態価値関数と述べられています。
しかしながら、学習途中に
学習済み状態価値関数を用いることは困難です。
そこで、ランダムな値をとるポテンシャル関数と、
学習途中の状態価値関数の2つのパターンをポテンシャル関数を用いて
実験してみます。

1.ランダム

各状態のポテンシャル関数を0から10の間の値をとる一様乱数で設定します。
これは比較用です。

2. 学習途中の状態価値\(\phi(s)=V(s)\)

2つめのポテンシャル関数として、
状態価値関数を用います。
今回の状態価値観数は、\(Q(s, a)\)の総和とします。
数式で表すと以下のように設定します。

$$\begin{aligned}
\phi(s) &= V(s) \\
&= \sum_{a \in A}Q(s, a)
\end{aligned}$$

つまりshapeされた報酬\(r_{shaped}\)は

$$\begin{aligned}
r_{shaped} &= r + \gamma \phi(s’) – \phi(s) \\
&= r + \gamma V(s’) – V(s) \\
&= r + \gamma \sum_{a \in A}Q(s’, a) – \sum_{a \in A}Q(s, a)
\end{aligned}$$

となります。

Grid world problem

いつものGrid world problemを用いて評価します。
単純にスタート地点からゴール地点に着くまでの最短ルートを求める問題です。

f:id:ttt242242:20190418110358j:plain

プログラム

githubにあげました。

tocom242242/reward_shaping_sample
Contribute to tocom242242/reward_shaping_sample development by creating an account on GitHub.

cloneして、run.pyを実行すれば、実験できます。

実験結果

通常のQ学習(no shaping)、ポテンシャル関数をランダムな値としたReward shaping を用いたQ学習(shaping_random)、状態価値関数をポテンシャル関数としたQ学習(shaping_V)と比較しました。
結果が以下のグラフです。

f:id:ttt242242:20190525144834j:plain

状態価値関数をポテンシャル関数としたQ学習が最も早く累積報酬を最大化することができていることがわかります。
思ったより優秀でした。
また、ランダム値のポテンシャル関数を用いても通常のQ学習と差がそこまでないのと、累積報酬を最大化できていることがわかります。
すごいですね。ランダム値でも最終的な学習結果にそこまで影響しないのは大きいと思います。

コメント

タイトルとURLをコピーしました