시즌 1 · 알파고편 / PART 4 · PART 4 · 신경망 등장: 직관을 학습한다 / Ch 3 · Policy Network

Policy Network를 MCTS에서 사용하기

학습된 policy network가 있으면 MCTS에서 두 가지 방식으로 사용:

🎯 사용법 1: Expand에서 우선순위

PART 3의 MCTS Expand 단계 수정:

# 이전 (무작위)
m = random.choice(node.untried_moves)

# 이후 (policy 활용)
move_probs = policy_net(node.game.board)
m = max(node.untried_moves, key=lambda x: move_probs[x])

또는 더 우아하게 — UCB1을 PUCT로 확장 (PART 5에서):

PUCT = w/n + c · P(s,a) · √(N)/(1+n)

P(s,a)가 policy network의 그 자리 확률. 확률 높은 수에 더 자주 가지치기 자원 배분.

🎯 사용법 2: Simulate (rollout)의 품질 향상

PART 3 rollout은 완전 무작위:

# 이전 (완전 무작위)
g = g.play(random.choice(g.possible_moves()))

# 이후 (policy로 그럴듯한 수)
move_probs = fast_policy_net(g.board)
move = sample_by_probability(move_probs)
g = g.play(move)

"무작위" 자리에 "그럴듯한" 수가 들어감. rollout의 결과가 사람 게임 분포와 가까워져 → MCTS 신호가 정확해짐.

💡 알파고의 두 policy network

알파고는 사실 두 개의 policy network를 씀:

  1. SL Policy Network (Supervised Learning) — 13층 CNN, 정확함, 느림(~3ms). MCTS의 Expand에 사용.
  2. Fast Rollout Policy — 단순 선형 모델, 부정확하지만 빠름(~2μs). MCTS의 Simulate(rollout)에 사용.

왜 둘? 한 번의 MCTS iteration에서 Expand는 한 번, Rollout은 수십 수. 속도 / 정확도 트레이드오프. PART 5에서 자세히.

📊 효과 — 알파고 논문 (2016)에서
  • Pure MCTS (PART 3): ELO ~2700
  • + SL Policy in Expand: ELO ~3000 (+300)
  • + Fast Rollout in Simulate: ELO ~3100 (+100)
  • + RL Policy (자가 학습): ELO ~3200 (+100)
  • + Value Network: ELO ~3500 (+300) — 이세돌급

각 부품이 100~300 ELO씩 기여. 누적 효과로 사람 초월.

다음 챕터에서 Value Network를 본다.