마르코프 연쇄가 "시간의 흐름에 따라 상태가 어떻게 변하는지(관찰)"에 대한 것이었다면, MDP는 여기에 '우리의 선택(Action)'과 그에 따른 '보상(Reward)'을 추가한 개념입니다.
즉, "어떤 행동을 해야 미래에 가장 큰 보상을 받을 수 있을까?"를 수학적으로 풀어내는 과정입니다.
1. MDP의 5가지 핵심 요소 $(S, A, P, R, \gamma)$
MDP는 다음 5가지 요소로 정의됩니다.
- 상태 (State, $S$): 현재의 상황. (예: 환자의 현재 건강 상태, 게임판의 위치)
- 행동 (Action, $A$): 에이전트가 선택할 수 있는 행동. (예: 약물 투여, 수술, 대기)
- 전이 확률 (Transition Probability, $P$): 행동 $a$를 했을 때, 상태가 $s \to s'$로 바뀔 확률.
- $P^a_{ss'} = P(S_{t+1}=s' | S_t=s, A_t=a)$
- (주의: 약을 쓴다고 100% 낫는 건 아닙니다. 확률적으로 변합니다.)
- 보상 (Reward, $R$): 행동의 대가로 받는 점수. (예: 완치=+100, 부작용=-10)
- 감가율 (Discount Factor, $\gamma$): 미래의 보상을 현재 가치로 환산하는 비율 ($0 \le \gamma \le 1$).
- 당장 받는 100원이 1년 뒤의 100원보다 소중하듯이, 미래의 보상은 할인해서 계산합니다.
2. 반환값 (Return, $G$)
우리의 목표는 단순히 당장의 보상 하나($R_{t+1}$)를 챙기는 게 아니라, 미래에 받을 모든 보상의 합(반환값)을 최대화하는 것입니다.
$$G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1}$$
- $\gamma$가 0에 가까우면: "오늘만 산다" (근시안적)
- $\gamma$가 1에 가까우면: "미래를 위해 참는다" (원시안적)
3. 격자 세상 (Grid World) 예제
강의 자료에 나온 Grid World는 MDP를 이해하는 가장 고전적인 예제입니다.
시나리오
- 목표: 출발점($S_1$)에서 시작해 함정(Trap)을 피해 목적지(Goal, +1)에 도달하기.
- 행동: 상, 하, 좌, 우
- 보상:
- 목적지 도착: +1
- 함정 빠짐: -1
- 이동할 때마다(Step): -0.02 (빨리 가는 게 이득이라는 뜻)
4. [실습] Python 코드 (Grid World & 반환값 계산)
에이전트가 이동 경로를 선택했을 때 총 반환값($G$)이 어떻게 계산되는지 확인해 보겠습니다.
import numpy as np
# 1. 환경 설정 (Grid World)
# 0: 길, -1: 함정, 1: 목적지
# 3x3 맵 구성 (S1~S9)
grid = np.array([
[0, 0, 0], # S1, S2, S3
[0, -1, -1], # S4, S5(함정), S6(함정)
[0, -1, 1] # S7, S8(함정), S9(목적지)
])
# 보상 설정 (이동 비용 -0.02)
step_reward = -0.02
gamma = 0.9 # 감가율
# 2. 에이전트의 경로 시나리오 (Trajectory)
# 시나리오 A: S1 -> S2 -> S3 -> S6(함정) (실패)
path_A_rewards = [step_reward, step_reward, -1.0]
# 시나리오 B: S1 -> S4 -> S7 -> S8(함정) (실패)
path_B_rewards = [step_reward, step_reward, -1.0]
# 시나리오 C: S1 -> S4 -> S7 (이동 후 대기?) -> S9(목적지)
# 최적 경로 가정: S1(0,0) -> S4(1,0) -> S7(2,0) -> S8(함정 피해서 우회 필요하지만 여기선 단순화)
# 예시: S5(함정)에 빠진 경우를 계산해봅시다.
# S1 -> S2 -> S5(함정)
path_C_rewards = [step_reward, -1.0]
# 3. 반환값(Return) 계산 함수
def calculate_return(rewards, gamma):
G = 0
# 역순으로 계산하면 편함: G_t = R_t+1 + gamma * G_t+1
for r in reversed(rewards):
G = r + gamma * G
return G
# 4. 결과 출력
print(f"감가율(gamma): {gamma}")
# Case 1: 두 번 이동해서 함정에 빠짐 (강의 자료 예시: -0.02, -1)
# 경로: 출발 -> 이동(-0.02) -> 함정(-1)
rewards_1 = [-0.02, -1]
G_1 = calculate_return(rewards_1, gamma)
print(f"\n[Case 1] 2번 만에 함정 (보상: -0.02, -1)")
print(f"계산: -0.02 + 0.9 * (-1)")
print(f"반환값(G): {G_1:.4f}")
# Case 2: 3번 이동해서 목적지 도착 (보상: -0.02, -0.02, +1)
rewards_2 = [-0.02, -0.02, 1]
G_2 = calculate_return(rewards_2, gamma)
print(f"\n[Case 2] 3번 만에 목적지 도착 (보상: -0.02, -0.02, +1)")
print(f"계산: -0.02 + 0.9*(-0.02) + 0.9^2*(1)")
print(f"반환값(G): {G_2:.4f}")

[코드 실행 결과 해석]
1. Case 1 (함정에 빠짐):
- 보상: -0.02, -1
- 반환값: $-0.02 + 0.9 \times (-1) = \mathbf{-0.92}$
- $\rightarrow$ 매우 나쁜 결과입니다.
2. Case 2 (목적지 도착):
- 보상: -0.02, -0.02, +1
- 반환값: $-0.02 + 0.9(-0.02) + 0.81(1) = -0.02 - 0.018 + 0.81 = \mathbf{0.772}$
- $\rightarrow$ 긍정적인 반환값을 얻었습니다. 에이전트는 이 경로를 선택하도록 학습됩니다.
분석가의 Insight
MDP는 의사가 환자를 치료하는 과정과 매우 흡사합니다.
- 에이전트: 의사 (AI 모델)
- 환경: 환자의 신체
- 상태($S$): 혈압, 염증 수치, 체온 등
- 행동($A$): 항생제 투여, 수술, 경과 관찰
- 보상($R$):
- 생존/퇴원: +100
- 재입원/합병증: -50
- 치료 비용/부작용: -1 (Step Reward)
결론:
MDP를 통해 우리는 "장기적으로 환자의 생존율을 최대화(반환값 최대화)하는 최적의 치료 순서(정책, Policy)"를 찾아낼 수 있습니다. 이것이 바로 의료 AI의 핵심 목표 중 하나인 '개인 맞춤형 정밀 의료(Precision Medicine)'의 수학적 모델입니다.
'Study Note > 통계' 카테고리의 다른 글
| 어려운 적분은 가라, 뽑아서 푼다! MCMC와 메트로폴리스-헤이스팅스 (0) | 2025.12.19 |
|---|---|
| 확률은 변한다? 베이즈 통계와 켤레 사전 확률 (1) | 2025.12.19 |
| 어제는 잊어라, 오직 오늘만 본다: 마르코프 연쇄 (Markov Chain) (0) | 2025.12.19 |
| PCA와 비슷하지만 다른, 요인분석(Factor Analysis)의 모든 것 (0) | 2025.12.19 |
| PCA 활용: 복잡한 데이터를 한눈에 보는 법 (차원 축소 & 시각화) (0) | 2025.12.18 |