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)
이게 진짜 일반화. "알고리즘이 게임에 의존하지 않음".