Python(強化学習の試し04_学習率α、割引率γを変える)

■学習率、割引率を変えて試す。
引き続き、過去の試行3回分をもとに強化学習をさせてみる。条件は次のように変える。
・試行は100回。これを1エピソードとして、400エピソード実行する。
エピソードが進むにつれてQ値は更新されていくので、1つの状態のものを取り上げてグラフ化した。

Q値を更新する式は下のもので、alphaが学習率、gammaが割引率というらしい。
self._Qtable[val, action] = (1 - alpha) * self._Qtable[val, action] + alpha * (reward + gamma * next_maxQ)

式からもalphaが高くなれば、Q値の更新は大きくなりそう(学習が速い)。
まず、gamma = 0.9 に固定してalphaの値を変化させてQ値を見てみた。下表では、縦軸が、ある状態に対して、actionを0とするQ値(赤)と 1とするQ値(オレンジ)を表示している。横軸はエピソード数。

alpha = 0.1

alpha = 0.01
alpha = 0.001

alpha = 0.1, 0.01, 0.001 のグラフを見比べると、0.1ではすぐにQ値が収束している。0.001ではまだ学習の途中であるように見える。0.001でエピソード数を4000まで増やすと、下のようなグラフとなった。
このサンプルコードはシンプルなものなので、どんな学習率でも正解と思われるところに収束すると思う。もう少し複雑なものなら学習率によって誤学習とか影響が出るのかな。

次は、gamma。alpha = 0.01 としてgammaの値を変えてみる。gamma = 0.9 は上にあるので、他2つの結果を追加した。

gamma = 0.7

gamma = 0.5

gammaの値を変えると最終的なQ値の大きさが変わる。そのせいか、収束までにかかるエピソード数もgammaが大きいほど大きくなっている。Actionを選択する際にQ値が大きいものを選択するため、重要なのは比較の値で絶対値は重要でないのではと思う。こちらもgammaの値を変えても違う結果は出てこない。

学習率、割引率については、複雑なサンプルでもう一度見てみたい。