行動価値関数

Pythonで学ぶGymnasiumによるReinforcement Learning

Fouad Trad

Machine Learning Engineer

行動価値関数(Q値)

  • 期待収益:
    • 開始状態 $s$
    • 行動 $a$ をとる
    • 方策に従う
  • 状態内での行動の望ましさを評価

状態・行動のQ値Q(s,a)を、行動直後の即時報酬と、特定の方策で計算した次状態の割引価値の和として表す式。

Pythonで学ぶGymnasiumによるReinforcement Learning

グリッドワールド

山が2つとダイヤがあるカスタム環境。

  • 状態価値

先に計算した全状態の状態価値。

Pythonで学ぶGymnasiumによるReinforcement Learning

Q値 - 状態4

状態4にいるエージェント。

  • エージェントは状態4で開始

先に計算した全状態の状態価値。

Pythonで学ぶGymnasiumによるReinforcement Learning

Q値 - 状態4

状態4で可能な4つの行動とその報酬。

  • 上・下・左・右に移動可能

先に計算した全状態の状態価値。

Pythonで学ぶGymnasiumによるReinforcement Learning

状態4 - 下方向の行動

エージェントが状態4から下へ移動して状態7になる様子。

  • 報酬: -2、状態価値: 5

先に計算した全状態の状態価値。

Pythonで学ぶGymnasiumによるReinforcement Learning

状態4 - 下方向の行動

エージェントが状態4から下へ移動して状態7になり、対応するQ値が3である様子。

  • $Q(4, \text{down}) = -2 + 1 \times 5 = 3$

先に計算した全状態の状態価値。

Pythonで学ぶGymnasiumによるReinforcement Learning

状態4 - 左方向の行動

エージェントが状態4から左へ移動して状態3になり、対応するQ値が1である様子。

  • $Q(4, \text{left}) = -1 + 1 \times 2 = 1$

先に計算した全状態の状態価値。

Pythonで学ぶGymnasiumによるReinforcement Learning

状態4 - 上方向の行動

エージェントが状態4から上へ移動して状態1になり、対応するQ値が7である様子。

  • $Q(4, \text{up}) = -1 + 1 \times 8 = 7$

先に計算した全状態の状態価値。

Pythonで学ぶGymnasiumによるReinforcement Learning

状態4 - 右方向の行動

エージェントが状態4から右へ移動して状態5になり、対応するQ値が9である様子。

  • $Q(4, \text{right}) = -1 + 1 \times 10 = 9$

先に計算した全状態の状態価値。

Pythonで学ぶGymnasiumによるReinforcement Learning

全Q値

全ての状態-行動ペアに対して計算したQ値。

Pythonで学ぶGymnasiumによるReinforcement Learning

Q値の計算

def compute_q_value(state, action):

if state == terminal_state: return None
_, next_state, reward, _ = env.unwrapped.P[state][action][0] return reward + gamma * compute_state_value(next_state)

状態・行動のQ値Q(s,a)を、行動直後の即時報酬と、特定の方策で計算した次状態の割引価値の和として表す式。

Pythonで学ぶGymnasiumによるReinforcement Learning

Q値の計算

Q = {(state, action): compute_q_value(state, action)
     for state in range(num_states) 
     for action in range(num_actions)}

print(Q)
Pythonで学ぶGymnasiumによるReinforcement Learning

Q値の計算

{(0, 0): 0, (0, 1): 1, (0, 2): 7, (0, 3): 0, 
 (1, 0): 0, (1, 1): 5, (1, 2): 8, (1, 3): 7, 
 (2, 0): 7, (2, 1): 9, (2, 2): 8, (2, 3): 8, 
 (3, 0): 1, (3, 1): 2, (3, 2): 5, (3, 3): 0, 
 (4, 0): 1, (4, 1): 3, (4, 2): 9, (4, 3): 7, 
 (5, 0): 5, (5, 1): 10, (5, 2): 9, (5, 3): 8, 
 (6, 0): 2, (6, 1): 2, (6, 2): 3, (6, 3): 1, 
 (7, 0): 2, (7, 1): 3, (7, 2): 10, (7, 3): 5, 
 (8, 0): None, (8, 1): None, (8, 2): None, (8, 3): None}

全ての状態-行動ペアに対して計算したQ値。

Pythonで学ぶGymnasiumによるReinforcement Learning

方策の改善

全ての状態-行動ペアに対して計算したQ値。

Pythonで学ぶGymnasiumによるReinforcement Learning

方策の改善

  • 各状態でQ値最大の行動を選択

全ての状態-行動ペアのQ値。各状態の最大Q値に丸印。

Pythonで学ぶGymnasiumによるReinforcement Learning

方策の改善

旧方策と対応するQ値。 旧方策

各状態で最大Q値となる行動を選んだ新しい方策。

Pythonで学ぶGymnasiumによるReinforcement Learning

方策の改善

improved_policy = {}


for state in range(num_states-1): max_action = max(range(num_actions), key=lambda action: Q[(state, action)])
improved_policy[state] = max_action
print(improved_policy)
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 1, 
 6: 2, 7: 2}
Pythonで学ぶGymnasiumによるReinforcement Learning

Passons à la pratique !

Pythonで学ぶGymnasiumによるReinforcement Learning

Preparing Video For Download...