本記事は書籍のコードを参考にしているため、全てのコードは公開致しません。
また、AI初心者が投稿している記事です。
理解不足・不正確な情報があることはご容赦ください。
##目次
1.概要
2.参考書籍
3.環境構築
4.弱点と思われる箇所
5.方向の選択方法
6.一筆書き迷路
7.行動価値関数Q
8.提案
##1.概要
下記の書籍を参考に、オリジナルの一筆書き迷路をAIに強化学習させてみた。
その時に、Sarsa、Q学習の弱点と思われる箇所を発見した。
##2.参考書籍
・書籍名:AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門
・著 者:布留川 英一
・初版
##3.環境構築
・Google Colaboratory(2022/01/17)
##4.弱点と思われる箇所
AIの解説に「最初は答えがわからないため、模索方向をランダムにする」と良く目にする。
参考書籍にも、行動価値関数の初期値をランダムにするコードが記載されている。(p.149)
参考書籍では、学習が進むにつれ、その状態の中で最も高い行動価値関数の値(方向)を選択するようになっている。(p.149)
しかし、行動価値関数の初期値をランダムにすると不正解ルートの行動価値が高く設定されるケースが見られた。
この場合、学習が進むにつれ、不正解ルートしか辿らなくなり無限ループに陥ってしまう。(何時まで経ってもゴールできない)
##5.方向の選択方法
IF=Trueの場合、ランダムで方向を選択する。
elseの場合、行動価値関数で最も高い値の方向を選択する。
変数epsilonは初期値0.5で、1エピソード完了ごとに1/2に減らしていく。
そのため、最初の方のエピソードはIF=Trueとなることもあるが、徐々に高確率でelseになる。
def get_a(s, Q, epsilon, pi_0):
if np.random.rand() < epsilon:
return np.random.choicekl([0, 1, 2, 3], p=pi_0[s])
else:
return np.nanargmax(Q[s])
0は上、1は右、2は下、3は左を意味する。
変数pi_0は、初期状態で移動できる方向を示唆している。
数値は確率である。(状態0の場合は、左0% 右50% 下50% 上0%)
##6.一筆書き迷路
・今回は、正解が1通りしかない。
・状態「0」が、スタート地点。
・ポイントは、状態「0」の時に下方向(状態「3」)、状態「4」では上方向(状態「1」)に行動すること。
・エピソードは、全10回とする。
##7.行動価値関数Q
問題となった、ランダムによる行動価値関数Q
###状態0について
<初期値>
右が「0.701」、下が「0.004」と、不正解ルート(右)が圧倒的に行動価値が高くなっている。
<エピソード7回目終了時点>
右が「0.701」、下が「0.396」と、初期値に比べ正解ルート(下)の行動価値が高くなっている。(不正解ルート右は、変化なし)
しかし、エピソード8回目からはepsilonが非常に小さなりelse(行動価値が最も高い方向=右、不正解ルート)ばかりが選択され、無限ループに陥った。
###状態4について
状態0と同じ現象のため、割愛
##8.提案
<提案1>
エピソード回数をもっと増やし、epsilonの減り具合ももっと緩やかにする。
例:エピソードを全100回にし、epsilonの減り方を0.9倍ずつにする。
<提案2>
行動価値関数の初期値を、ランダムにしない。
初期値は、全て同じ配分にする。
例:初期値は全て0.1、進めない方向はnanにする。