Backup 단계 — 보상이 트리를 거슬러 올라간다
마지막 네 번째 단계. Backup에서 방금 계산한 가치 v_L을 트리에 반영한다.
📖 Backup의 기본 — AlphaZero 버전
리프 L의 가치 v_L을 루트까지 거꾸로 올라가며 각 노드에 더한다.
value = v_L
for node in reversed(path): # L → ... → root
node.visit_count += 1
node.value_sum += value
value = -value # (체스/바둑처럼 zero-sum 게임에서 부호 바꿈)
핵심: 보드 게임에서는 한 노드의 "내 입장 가치"가 다음 노드에서는 "상대 입장 가치"가 되기 때문에 부호를 뒤집어준다.
🎯 MuZero의 Backup — 보상까지 포함
MuZero는 보상 r도 함께 처리한다. 즉 일반적인 강화학습의 누적 보상 공식을 따라간다.
G_t = r_t + γ · G_{t+1}
의사코드로 풀면:
value = v_L # 리프의 신경망 추정 가치
for node in reversed(path):
node.visit_count += 1
node.value_sum += value
value = node.reward + gamma * value # 한 단계 위로 올라갈 때 보상 합치고 할인
gamma (보통 0.997 같은 값)는 "먼 미래는 조금 덜 중요"를 표현하는 할인율.
📖 보드 게임 vs 일반 강화학습 — Backup이 보이는 차이
- 보드 게임 (체스, 바둑): 중간 보상 없음 → r = 0 → G_t = v_L. 부호 뒤집기로 양 플레이어 처리.
- 아타리 게임: 중간 보상 있음 (점수) → r ≠ 0 → 누적 보상 형태로 backup.
MuZero는 두 경우를 같은 공식으로 다룬다 — 이게 PART 8 Ch 5의 "일반 알고리즘" 주제로 연결된다.
💡 Backup의 효과를 한 줄로
"리프에서 본 미래 가치를, 거기까지 이르는 모든 조상 노드들의 Q값에 반영한다."
그 결과 다음 시뮬레이션에서 Select가 같은 PUCT 공식으로 더 나은 길을 고를 수 있게 된다 — 즉 트리가 점점 똑똑해진다.