Evaluate 단계 — f가 새 리프에서 평가
Expand에서 새로 만든 리프 L의 가치를 평가해야 Backup에서 거꾸로 거슬러 올라갈 수 있다. 이게 Evaluate 단계.
📖 가치 추정 방법의 진화
역사적으로 MCTS의 가치 추정 방법은 세 단계로 진화했다.
- 오리지널 MCTS (2006): 무작위 rollout으로 게임 끝까지 가본 결과 (시즌 1 PART 3 Ch 1)
- AlphaGo (2016): rollout + 가치 신경망의 평균 (시즌 1 PART 5 Ch 4)
- AlphaZero / MuZero (2017~): 가치 신경망 단독 — rollout 제거
MCTS가 학습된 가치 신경망에 점점 더 의지하는 방향으로 발전한 것.
🎯 MuZero의 Evaluate — 한 줄
이미 Expand에서 f(s_L)를 호출해서 (p_L, v_L)을 얻었다.
그 v_L이 바로 리프의 가치다 — 추가 계산 없음.
💡 그래서 Expand와 Evaluate는 사실상 한 호출이다
구현 관점에서는 Expand와 Evaluate가 한 번에 일어난다.
# 한 번의 신경망 호출로 둘 다 처리
s_L, r_L = g(parent.state, a) # Expand의 dynamics
p_L, v_L = f(s_L) # Evaluate + 자식 prior 준비
# 트리 갱신
L.state = s_L
L.reward = r_L
for action in legal_actions:
L.children[action] = Node(prior=p_L[action])
아주 정확하게 두 함수 호출 — g 한 번, f 한 번. 이게 MCTS 시뮬레이션 한 번의 "비용"이다.
📖 v_L의 정확한 해석
v_L은 "잠재 상태 s_L에서 시작했을 때 앞으로 받게 될 누적 보상의 기대값"이다.
학습 과정에서 실제 게임의 결과(승/패 또는 누적 점수)와 가까워지도록 훈련된다 — 그래서 잘 학습된 모델에서는 매우 유용한 신호.
단, 이건 어디까지나 신경망의 추측이다. 그래서 더 많은 시뮬레이션으로 평균을 내서 정확도를 올린다 — 그게 다음 단계.