雑なメモです.
#割引率(discount factor)
強化学習では,累積割引報酬
\sum_{t=0}^{T} \gamma^{t} R_t
を最大化する.ここで,$R_t$は各時刻$t$に貰える報酬,$\gamma$が割引率(discount factor)である.割引率とは,「将来に貰える報酬をどれだけ割り引いて考えるか」を表すパラメータで,範囲は$0 \leq \gamma < 1$.通常0.9あたりに設定する.割引率が大きいときは遠い未来の報酬まで考える方策を,小さいときには直近の報酬しか考えない方策を学習する.
割引率のグラフ
$y=\gamma^{t}$のグラフを示す.横軸が$t$,縦軸が$y$.
よく使われる$\gamma=0.95$は,およそ$t=100$付近でほぼ$0$になっている.たとえば,OpenAI Gym環境のCartPole-v0は最長ステップ数が200であるが,200ステップ先の報酬に掛かる割引率は$\gamma^{200}=0.95^{200} \fallingdotseq 0.000035$であり,非常に小さい.
割引率が特定のしきい値を下回るステップ数
y= \gamma^{t} \\
\ln y = t \ln \gamma \\
t = \frac{\ln y}{\ln \gamma}
と変形すると,割引率$\gamma^t$が特定の値$y$になるようなステップ数$t$を求めることができる.
割引率$\gamma^{t}$が特定の値より小さくなるステップ数を示す.
割引率$\gamma$ | $<0.5$ | $<0.1$ | $<0.01$ | $<1.0 \times 10^{-100}$ |
---|---|---|---|---|
0.999 | 693 | 2302 | 4603 | 230143 |
0.99 | 69 | 230 | 459 | 22911 |
0.95 | 14 | 45 | 90 | 4490 |
0.9 | 7 | 22 | 44 | 2186 |
0.8 | 4 | 11 | 21 | 1032 |
0.5 | 2 | 4 | 7 | 333 |
0.1 | 1 | 2 | 3 | 101 |
割引率の逆算
こういうやり方がよいかは微妙だが,逆に,あるステップ数$t$で特定の値$y$になるような割引率$\gamma$を求めたい時.
y= \gamma^{t} \\
\ln y = t \ln \gamma \\
\frac{\ln y}{t} = \ln \gamma \\
\gamma = \exp (\frac{\ln y}{t})
たとえば,先述したCartPole-v0で,最長ステップ数$t=200$のとき$y=0.01$になる$\gamma$は,$\exp(\frac{\ln 0.01}{200}) \fallingdotseq 0.977$である.