시즌 1 · 알파고편 / PART 7 · PART 7 · AlphaZero (2017) / Ch 1 · 같은 코드로 여러 게임

MCTS의 게임 독립성

MCTS 알고리즘은 게임 독립적. 인터페이스만 만족하면 어떤 게임이든 동작.

📖 PART 5 우리 미니 알파고 코드 재검토

PART 5 Ch 6 §2의 코드를 보면:

def mcts_alphago(board, net, n_iter=500):
    # Select(PUCT) → Expand → Evaluate → Backup
    ...
    return root, best_move

이 함수가 board.possible_moves(), board.play(), board.is_terminal(), board.winner_value() 만 호출. board가 다른 게임이어도 동작.

🎯 PUCT의 보편성

PUCT 공식 다시:

PUCT = Q(s,a) + c·P(s,a)·√N/(1+n)
  • Q: 평균 보상 — 모든 게임에 동일
  • N, n: 방문 수 — 모든 게임에 동일
  • P: policy prior — 신경망에서 옴 (게임마다 다른 신경망)
  • c: 탐험 상수 — 게임마다 약간 다름 (체스 더 큼, 쇼기 더 큼)

공식 자체는 같음. 단지 게임에 따라 c 조정.

💡 학습 알고리즘의 보편성
  • 자가 대국 루프: 같은 코드, 다른 Game 인스턴스
  • 학습 손실: (v-z)² + cross_entropy + L2 — 모든 게임에 동일
  • SGD 갱신: 같은 옵티마이저
  • Replay buffer: 같은 구조

차이는 단지:

  • Game 인스턴스 (인터페이스 구현)
  • 신경망 출력 크기 (361 vs 4672 vs 11259)
  • 학습 하이퍼파라미터 (c, lr 등) 약간 조정
📖 AlphaZero 논문의 코드 일관성

논문에 명시: "체스, 쇼기, 바둑 학습에 사용된 코드는 거의 동일. 단지 게임 인터페이스만 교체."

구체적:

  • MCTS 코드: 100% 동일
  • 신경망 구조: 99% 동일 (출력 크기만 다름)
  • 학습 루프: 100% 동일
  • 하이퍼파라미터: 약간 다름 (c, learning rate)

이게 진짜 일반화. "알고리즘이 게임에 의존하지 않음".