割引率のメモ


雑なメモです.

割引率(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$である.