행동가치 함수

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Fouad Trad

Machine Learning Engineer

행동가치 함수(Q값)

  • 기대 반환:
    • 시작 상태 $s$
    • 행동 $a$ 수행
    • 정책을 따름
  • 상태 내 행동의 바람직함을 추정

정책에 대해 Q(s,a)를 즉시 보상과 다음 상태가치(할인 적용)의 합으로 계산하는 공식.

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

그리드 월드

두 개의 산과 다이아몬드가 있는 커스텀 환경.

  • 상태가치

이전에 계산한 모든 상태의 상태가치.

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(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값에서 상태별 최대값에 동그라미 표시.

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

연습해 봅시다!

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Preparing Video For Download...