MDP에서의 상태가치함수(Value Function)

마르코프 결정 과정(MDP)에서의 상태가치함수(Value Function) 완벽 이해

상태가치함수란?

상태가치함수(State Value Function) 마르코프 결정 과정(MDP)에서 핵심이 되는 개념이다. 함수는 어떤 상태에 도달했을 , 이후로 정책을 따라 행동하면서 얻게 보상의 기대값을 의미한다. , “지금 상태가 얼마나 가치 있는 상태인가?” 수치로 평가하는 함수이다.

v(s) vπ(s) 차이

처음 배우는 사람들은 상태가치함수 v(s) vπ(s) 서로 다르게 생각하기 쉽다. 하지만 둘은 본질적으로 같은 개념을 다룬다. 차이는 vπ(s) 정책(π) 따랐을 때의 기대값을 계산한 것이라는 점이다. , 정책이 어떤 행동을 얼마나 자주 선택하는지를 반영해 계산한 상태가치함수이다.

상태가치함수의 계산 원리

상태가치함수는 크게 가지 요소로 구성된다. 첫째는 현재 상태에서 선택한 행동에 대해 바로 받을 있는 즉시 보상이며, 둘째는 행동 이후 도달할 다음 상태에서의 가치이다. 이를 계산할 때는 정책(π), 보상 함수(R), 상태전이 확률(P), 감가율(γ) 함께 고려한다.

행렬로 표현하는 상태가치함수

복잡한 수식을 간단하게 정리하고 효율적으로 계산하기 위해, 상태가치함수는 행렬 형태로 자주 표현된다. 행렬로 표현하면 다음과 같은 수식이 사용된다:

vπ = Rπ + γPπvπ

여기서 모든 상태의 가치를 담은 벡터, Rπ 정책을 따른 보상의 기대값 벡터, Pπ 정책을 반영한 상태전이확률 행렬, γ 감가율이다.

s s′ 구분하지 않아도 되는 이유

원래 상태가치함수를 수식으로 계산할 때는 다음 상태 s′ 가치인 vπ(s′) 사용하는 것이 일반적이다. 그러나 행렬로 계산할 때는 s s′ 따로 구분할 필요가 없다. 이유는 행렬 모든 상태쌍(s → s′) 대한 전이 정보를 포함하고 있고, 벡터 모든 상태의 가치를 동시에 담고 있기 때문이다. , 행렬 곱셈 자체에 다음 상태의 가치가 이미 포함되어 있어, 별도로 s′ 표시하지 않아도 계산 결과는 동일하다.

직관적인 비유: 수식 vs 행렬

일반 수식 방식은 학생 명에게 ' 어떤 과목에서 점을 받았니?'라고 물어보는 방식과 같다. 하나의 상태에서 다음 상태를 개별적으로 계산하는 접근이다. 반면 행렬 방식은 엑셀 시트에 모든 학생 점수를 정리한 다음, 평균을 번에 계산하는 방식과 같다. 줄의 수식으로 전체 상태에 대한 가치를 효율적으로 계산할 있다.

 

상태가치함수 계산 예제

import numpy as np

#(1)상태와 행동, 감가율 정의
states = ["S", "R1", "R2", "R3", "F"]
actions = ["A1", "A2"]
gamma = 0.5

#(2)정책 π(s, a): 상태 s에서 행동 a를 선택할 확률
policy = {
    "S": {"A1": 0.6, "A2": 0.4},
    "R1": {"A1": 0.7, "A2": 0.3},
    "R2": {"A1": 1.0},
    "R3": {"A1": 1.0}
}

#(3) 상태 전이 확률 P(s, a, s')
transition_probs = {
    ("S", "A1"): "R1",
    ("S", "A2"): "R2",
    ("R1", "A1"): "R3",
    ("R1", "A2"): "R2",
    ("R2", "A1"): "R3",
    ("R3", "A1"): "F"
}

#(4) 보상 함수 R(s, a)
rewards = {
    ("S", "A1"): 0.5,
    ("S", "A2"): 1.5,
    ("R1", "A1"): 1.0,
    ("R1", "A2"): 1.5,
    ("R2", "A1"): 2.0,
    ("R3", "A1"): 3.0
}

#(5) 경로 시뮬레이션 기반 기대 반환값 계산
def simulate_episode(start_state="S"):
    state = start_state
    total_return = 0
    discount = 1.0

    #(6) 에피소드 반복 실행
    while state != "F":
        # 현재 상태에서 정책에 따라 행동 선택
        action_probs = policy[state]
        actions_list = list(action_probs.keys())
        probs = list(action_probs.values())
        action = np.random.choice(actions_list, p=probs)

        # 보상 받기
        reward = rewards.get((state, action), 0)
        total_return += discount * reward

        # 다음 상태로 이동
        next_state = transition_probs.get((state, action), "F")
        state = next_state
        discount *= gamma

    return total_return

#(7) 여러 번 실행하여 평균 반환값 추정
n_episodes = 10000
returns = []  # 에피소드별 반환값을 저장할 리스트

for i in range(n_episodes):
    episode_return = simulate_episode()
    returns.append(episode_return)
expected_return = np.mean(returns)

print(f"정책을 따른 기대 반환값(에피소드 평균, 상태가치함수): {expected_return:.4f}")
정책을 따른 기대 반환값(에피소드 평균, 상태가치함수): 2.4235

마르코프 결정과정 상태가치함수

(1) 상태와 행동, 감가율 정의

  • 이 프로그램에서는 에이전트가 위치할 수 있는 다섯 가지 상태(S, R1, R2, R3, F)를 정의하고, 가능한 행동은 두 가지(A1, A2)로 설정한다. 감가율(할인율)은 0.5로 설정되며, 이는 시간이 지날수록 미래 보상의 가치를 절반씩 줄여서 고려하겠다는 의미이다.

(2) 정책 정의

  • 에이전트는 각 상태에서 행동을 무작위로 선택하는 것이 아니라, **정해진 확률(정책)**에 따라 행동을 선택한다. 예를 들어, S 상태에서는 A1 행동을 60% 확률로, A2 행동을 40% 확률로 선택한다. 이처럼 각 상태에서 어떤 행동을 선택할지의 확률 분포가 미리 정해져 있다.

(3) 상태 전이 확률 정의

  • 에이전트가 특정 상태에서 어떤 행동을 하면, 그 결과로 어떤 다음 상태로 이동하는지가 정의되어 있다. 예를 들어 S 상태에서 A1을 선택하면 항상 R1으로 이동하고, R1에서 A1을 선택하면 R3로 이동한다. 이 프로그램에서는 상태 전이가 확률이 아닌 결정적(deterministic)으로 정의되어 있다.

(4) 보상 함수 정의

  • 각 상태와 행동의 조합에 따라 에이전트가 받게 되는 즉시 보상이 정의된다.
    예를 들어, S 상태에서 A1을 선택하면 0.5의 보상을 받고, R2에서 A1을 선택하면 2.0의 보상을 받는다. 보상은 에이전트가 환경과 상호작용하면서 얻게 되는 성과 지표이다.

(5) 경로 시뮬레이션 함수 실행

  • 에이전트가 S 상태에서 출발하여 정책에 따라 행동을 선택하고, 종료 상태(F)에 도달할 때까지 이동하면서 보상을 누적한다. 이때, 시간이 지남에 따라 미래 보상의 영향력을 줄이기 위해 감가율을 곱해가며 보상을 합산한다. 즉, 현재 보상은 그대로 더하고, 다음 보상은 절반, 그 다음은 4분의 1... 이런 식으로 계산하여 총 누적 보상을 구한다.

(6) 에피소드 반복 실행

  • 이 경로 시뮬레이션을 한 번만 수행하면 운에 따라 결과가 달라질 수 있으므로, 신뢰할 수 있는 평균값을 얻기 위해 같은 과정을 수천 번 반복한다. 에이전트가 10,000번 에피소드를 수행하도록 설정되어 있고, 각 에피소드에서 계산된 누적 보상은 리스트에 저장된다.

(7) 평균 기대 반환값 계산 및 출력

  • 마지막으로, 수집된 10,000개의 반환값을 평균 내어 정책을 따랐을 때 기대할 수 있는 보상의 평균값을 계산한다. 이 값은 현재 정책이 얼마나 효율적인지를 수치적으로 표현한 것이며, 상태 S에서 시작할 때의 상태가치함수 vπ(S)를 시뮬레이션 기반으로 추정한 값이라고 볼 수 있다.

이 프로그램은 에이전트가 정책을 따라 행동했을 때, 출발 상태 S에서 어떤 평균 보상을 기대할 수 있는지를 시뮬레이션을 통해 측정하는 강화학습 실습 예제이다. 보상, 감가율, 정책, 상태전이 등 강화학습의 핵심 개념을 실험적으로 이해하는 데 매우 유용하다.

 

결론

MDP에서의 상태가치함수는 정책 기반 의사결정의 핵심 도구이다. 정책, 보상, 상태전이확률, 감가율을 통합하여 상태의 가치를 수치로 평가하고, 이를 기반으로 강화학습 알고리즘이 동작하게 된다. 행렬 표현은 계산을 효율화하고, 강화학습의 수학적 모델링을 보다 간단하게 만들어주는 강력한 수단이다.

댓글 쓰기

Please Select Embedded Mode To Show The Comment System.*

다음 이전