<基礎学習>10/19-20 cartpole問題を強化学習で攻略する6(+雑記)

以下の記事の続きです。
kurupical.hatenablog.com

cartpoleについては、以下の記事を参照ください。
kurupical.hatenablog.com

考察

Q-Tableをデバッグ→チューニング

報酬を-1〜1にClippingしているのに、Q-Table(報酬の期待値)が-1〜1の間になっていません。
誤差逆伝播しながらQ-Tableが修正されていくのかもしれませんが、最初の値が大きいのはよくなさそうです。
TD誤差の式にargmax(Q(s',a'))が入っているので、Q-Tableの初期値がおかしいと誤差逆伝播も正しく動かない気がすします。

ということで、ニューラルネットワークの重みの初期化をいろいろ試してみました。

正規分布

stddev=1.0(標準正規分布)だと、Q-Table(output)の初期値が大きくなる(-100〜100)。
ので、stddevをチューニングした。

# initial = tf.truncated_normal(shape, mean=0.0, stddev=1.0)
initial = tf.truncated_normal(shape, mean=0.0, stddev=0.1)

一様分布

initial = tf.random_uniform(shape, minval=-1, maxval=1)

重み付けを-1〜1にして4層のニューラルネットワークを組んでいるのに、何故か出力の絶対値が1を超えてしまうのが不思議。-1〜1の間のランダムな数字を掛け算して、1超えるってありえないですよね?
biasはゼロで初期化してるので、余計な数字が足されていることもないはずです。

Huber損失を導入

学習の収束が早くなるみたいで。
Huber損失 - Wikipedia

結果

学習の結果、ゲームクリアできました。
しかし、同じ条件でもう一度学習させてみたがゲームクリアには至らず。
重み付けの値がたまたま良かったためにゲームクリアに至っただけみたいでした。

まぐれじゃなく、毎回ゲームクリアできるようになるまで、頑張ってみたいです。

雑記:強化学習は人間味があって面白い

強化学習で使われる「ε-greedy法」って、人間の「好奇心」モデルそのものだなあと思います。
「εーgreedy法」とは、簡単に言うとAIがゲームを学習するときの方針決定のやり方です。

ざっくり説明すると… AIがゲームを学習するとき、最初は何もわからないのでランダム動く確率(ε)は100%です。(ε=1.0)
AIはランダムに動いていくなかで、最適な手段がわかってきます。AIは、学習の経過によりランダムに動く確率を減らして、すでに学習した最適な行動(greedy)を取るように調整をします。(例 : ε=1.0 - 0.0001 * 試行回数)
最適な手段を取りつつも、そこが局所的な最適解である恐れがあるのでランダムに動いて更に良い解がないかを探っていきます。

強化学習はこんな感じでAIがゲームを攻略していきます。

これって人間の好奇心と似てませんか?

例1)職場の近くのランチを探すとき
最初は何が美味しいかわからないのでランダムな店に入ります(ε=1.0)が、ある程度わかってくると決まった店にしか行かなくなります(ε=0.0)。

例2)赤ちゃんが大人になるまで
最初はランダムに動きながら(レゴを食べたりするし、コンセントに針金を突っ込んだりする (ε=1.0)、大人になるまでには解を見つけて(それが最適解なのか局所的な解なのかは不明ですが)いつのまにか自分の脳内ネットワークで編み出した解に従ってのみ行動するようになります(ε=0.0)。

僕のεは今いくつなんだろうな〜なんて思いながら過ごしています。
今日はわざとεを上げて、店に入っても普段食べたことのないものを食べるようにしてみました。
オムライスはケチャップじゃなくてミートソースを、コーヒーじゃなくて紅茶を選びました。
オムライスは美味しかったのですが紅茶は失敗に終わりました。(やっぱり口にあわない)
こうやって苦い経験やいい経験をしながら自分のなか最適解を見つけるとともにεが下がっていくんですね。

とまあこんな感じで、強化学習はすごく人間味があって面白い分野だなと思います。
こじつけが入ってるところもあると思いますが笑。

雑記が長くなってしまいました。