PUCT 공식 — 자세히
PUCT 공식의 각 부분을 자세히:
📖 PUCT 분해
PUCT(s, a) = Q(s,a) + U(s,a)
두 부분:
- Q(s,a) (활용) = 이 가지의 평균 보상 = w/n
- U(s,a) (탐험) = c · P(s,a) · √(N) / (1 + n)
🎯 U(s,a) 분석
- c (탐험 상수): 알파고 ≈ 5.0 (UCB1보다 큼, 더 많이 탐험)
- P(s,a) (policy prior): SL Policy 또는 RL Policy 출력. 그 자리의 확률 (0~1)
- √(N) / (1+n): 부모 방문 수 ÷ 자식 방문 수. 자식을 적게 가봤을수록 큼
이 곱이 크면 → 더 탐험. 작으면 → 덜 탐험.
💡 P(s,a)의 효과 — 구체적 예
두 자식 A, B. 둘 다 visits=0 (아직 안 가봄):
- UCB1: 둘 다 점수 ∞ → 한 번씩 가봄 (그 후 다시 비교)
- PUCT:
- P(A) = 0.30 (좋은 자리) → U = 5 × 0.30 × √(0)/1 = ? (사실 root visits N이 있어야)
실제 시작: A는 P가 크니까 자주 선택. B는 P가 작으니 거의 안 선택. 시뮬레이션 자원이 좋은 자리에 집중.
📊 알파고에서 P(s,a)의 출처
- P_SL(s,a): SL Policy Network 출력
- 일부 변형: P_RL(s,a) 사용
- 알파고 논문은 SL Policy 사용 (다양성 좋음)
- AlphaGo Zero (2017): combined network의 policy head
이유: RL Policy는 너무 첨예해서 (한 자리에 90% 같은 수) MCTS 탐험이 좁아짐. SL이 다양성 좋아서 MCTS 탐색에 더 적합.