시즌 2 · 알파폴드편 / PART 8 · PART 8 · MuZero (2019) / Ch 5 · Atari + 바둑 + 체스 = 같은 알고리즘

보상 구조 — 끝에 한 번 vs 매 스텝

또 하나의 큰 차이 — 보상이 들어오는 방식.

📖 두 종류의 보상
  • 희소 보상 (sparse): 게임 끝에서 한 번만. 체스/쇼기/바둑이 이 부류.
    • 승: +1, 무: 0, 패: -1
    • 중간 수에는 보상 없음 — 좋은 수든 나쁜 수든 즉시 점수가 안 매겨짐
    • 학습 어려움: "긴 시퀀스 끝의 한 신호로 모든 수를 평가해야 함"
  • 밀집 보상 (dense): 매 스텝마다 들어옴. 아타리가 이 부류.
    • 매 프레임 게임 점수 변화량이 보상
    • 대부분의 프레임은 0이지만, 가끔 +10, +100 등
    • 학습 좀 더 쉬움 — 즉시 신호가 자주 들어옴
🎯 MuZero가 두 경우를 다루는 방식

같은 backup 공식을 쓴다:

value = node.reward + γ · value (위로 올라가며)
  • 희소 보상 환경 (보드): node.reward = 0 거의 항상 → value 한 신호가 길게 흐름. γ ≈ 1.
  • 밀집 보상 환경 (아타리): node.reward 자주 0 아님 → 단계마다 값이 누적. γ ≈ 0.997.

공식 자체는 그대로다. 차이는 "실제 데이터의 분포"에서만 일어남.

💡 알고리즘이 보상 구조에 무관한 이유

일반적인 강화학습 공식 G_t = r_t + γ G_{t+1}은 보상이 매 스텝이든 끝에 한 번이든 그대로 작동한다.

  • 끝에만 r이 있으면 → 중간 r=0이라 그냥 value가 흘러 내려옴
  • 매 스텝 r이 있으면 → 각 노드의 r이 누적되며 흘러 내려옴

두 경우 모두 같은 한 줄 코드. MuZero가 같은 알고리즘으로 처리할 수 있는 핵심 이유 중 하나.

📖 한 가지 미묘한 점 — 부호 뒤집기

보드 게임은 양 플레이어가 번갈아 두기 때문에 한 노드의 "내 가치"가 다음 노드에서는 "상대 가치"가 된다.

  • 이걸 처리하려고 backup에서 value = -value 부호 뒤집기를 추가
  • 아타리는 1인 게임이라 부호 안 뒤집음

이건 환경 명세의 차이로 자동 처리할 수 있다(two_player=True/False 플래그 같은 것). 알고리즘 본체는 안 바꿈.