ValueIterationで価値が決まっていくイメージ
Value Iterationでの強化学習のイメージを持てるような例を紹介します.
これだけ知っとく! : Value Iteration概要

Points!
前置き! : 状況設定
下記の可視化は以下のようなルールに基づいたゲームです.このゲームでは今いるマスが「状態\(s\)」です.
- よくある2Dを移動して高い報酬を目指すゲーム
- スタートのマスからゴールのマスに移動できればOK
- ダメージがあるマスとゲームオーバーになるマスあり
- マスをクリックすることでマスの状態を変更可能
- 歩くと少しずつ減点されるので最短でゴールを目指すと報酬が高くなります
- パラメータを変更することで学習のされ方/可視化を変更可能
- Game Startボタン : 迷路を解きます.
- Game Start Slowボタン : 全体を一回更新して止まるを繰り返し迷路を解きます.
- Game Start Super Slowボタン : 一つのマスを一回更新して止まるを繰り返し迷路を解きます.
可視化! : スタートからゴールまで行くGame
もうちょっと知っとく! : Value Iterationの処理概要
ValueIterationは、全ての状態(\(s\))に対する価値(\(V[s]\))を持っており,
一つずつ何度も全状態の価値を更新をしていきます.
更新しようとしても値が変わらなくなったら、収束したものとして更新を終了します.
その価値の更新は
$$V[s]:状態Sの価値$$
$$P(s'|s,a):状態sから行動aをとって状態s'になる確率$$
$$R(s, a, ,s'):状態sから状態s'へ行動aで遷移したときの報酬$$
$$\gamma : 報酬の割引$$
$$V[s] = \displaystyle \max_a \displaystyle \sum_{s'} P(s'|s, a) (R(s,a,s') + \gamma V[s'])$$
で行われます.
この式のままだとわかりにくいので二つに分解すると,
まず大枠からいえば
$$V[s] = \displaystyle \max_a ExpectedReward(a)$$
式の意味するところは、
「最も価値を取れる行動を選択して(max_a)得られる報酬の期待値をその状態の価値とする」.
そして各動作\(a\)を取った時の期待値は
$$ExpectedReward(a) = \displaystyle \sum_{s'} P(s'|s, a) (R(s,a,s') + \gamma * V[s'])$$
\(a\)の行動をして遷移しうるすべての次の状態で得られる報酬を計算します.
具体的には「遷移して得られる報酬(\(R(s,a,s')\))」と「期待される未来の報酬(\(V[s']\))」の合算した報酬
を計算しています.
合算した期待報酬にその状態になる確率\(P(s'|s,a)\)をかけることで
その状態に遷移した時の期待報酬を計算します(\(P(s'|s, a) (R(s,a,s') + \gamma * V[s'])\))
それらのすべての遷移先での期待報酬を足し合わせてそのアクションを取った時の期待報酬(\(ExpectedReward(a)\))とし、最も報酬の高い行動を選択した場合の価値を状態の価値(\(V[s]\))としています.