반응형
MCP(Monte Carlo Prediction)란 무엇인가요?
강화학습에서는 에이전트가 환경과 상호작용하면서 어떤 상태(state)가 얼마나 좋은지를 학습하게 됩니다. 이때 상태의 가치를 예측하는 대표적인 방법 중 하나가 MCP(Monte Carlo Prediction) 입니다.
예시로 쉽게 설명드리겠습니다
예를 들어, 어떤 게임을 여러 번 플레이한 뒤 특정 위치에서 시작하면 평균적으로 200점이 나온다는 사실을 알게 되었다고 가정해보겠습니다. 이렇게 여러 번의 경험을 바탕으로 기대 보상을 계산하는 방식이 바로 MCP입니다.
즉, 한 번의 경험으로 결정하지 않고, 여러 번의 시도를 통해 어떤 상태에서 얼마만큼의 보상을 기대할 수 있는지를 예측하는 방식입니다.
MCP의 핵심 아이디어
- 전체 에피소드(처음부터 끝까지의 한 번의 시뮬레이션)를 실행한 뒤,
- 각 상태에서 받은 보상의 총합(누적 리턴)을 기반으로
- 해당 상태의 가치를 평균값으로 계산합니다.
이는 다음과 같은 수식으로 표현됩니다.
$$
V(s) = \mathbb{E}[G_t \mid S_t = s]
$$
여기서
- $V(s)$: 상태 $s$의 가치(value)
- $G_t$: 시점 $t$부터 종료 시점까지 받은 총 보상(return)입니다.
파이썬 예제 (Blackjack 환경)
강화학습 라이브러리인 gymnasium
의 Blackjack 환경을 활용하여 MCP를 구현한 예제를 소개해드립니다.
import gym
import numpy as np
from collections import defaultdict
env = gym.make('Blackjack-v1', sab=True)
# 상태별 리턴 총합과 방문 횟수 저장
returns_sum = defaultdict(float)
returns_count = defaultdict(int)
V = defaultdict(float) # 상태 가치 함수
# 에피소드 생성 함수
def generate_episode(env, policy):
episode = []
state = env.reset()[0]
while True:
action = policy(state)
next_state, reward, terminated, truncated, _ = env.step(action)
episode.append((state, action, reward))
state = next_state
if terminated or truncated:
break
return episode
# 단순 정책: 플레이어 합이 20 이상이면 스탠드, 아니면 히트
def simple_policy(state):
return 0 if state[0] >= 20 else 1
# MCP 알고리즘
num_episodes = 500000
for i in range(num_episodes):
episode = generate_episode(env, simple_policy)
visited_states = set()
G = 0
# 리워드 역순으로 합산
for t in reversed(range(len(episode))):
state, _, reward = episode[t]
G = reward + G # 누적 리턴
if state not in visited_states:
returns_sum[state] += G
returns_count[state] += 1
V[state] = returns_sum[state] / returns_count[state]
visited_states.add(state)
# 일부 상태 출력
for state in list(V.keys())[:10]:
print(f"State: {state}, Estimated Value: {V[state]:.2f}")
정리하며
- MCP는 에피소드가 끝난 후 상태의 가치를 업데이트합니다.
- 경험을 축적한 후 평균을 구하기 때문에 신뢰도 있는 예측이 가능합니다.
- 단점은 매번 에피소드를 끝까지 실행해야 하므로 실시간 업데이트가 어렵다는 점입니다.
반응형
'개발 창고 > AI' 카테고리의 다른 글
중국, 휴머노이드 로봇 축구 리그 개막! 어린이 수준 AI의 실제 경기 도전기 (1) | 2025.07.07 |
---|---|
파라미터 수는 많지만 계산은 빠르게: Mixture of Experts(MoE)란? (1) | 2025.07.06 |
실전 EDA 튜토리얼: 삼성전자 주가 데이터 분석하기 (1) | 2025.07.03 |
코딩 없이 모델 학습? H2O AutoML로 누구나 머신러닝 시작하기 (1) | 2025.07.02 |
LangChain이 뭐예요? ChatGPT를 내 서비스에 붙이는 프레임워크! (1) | 2025.07.01 |