게임에서 UCB1 적용
UCB1을 게임 트리에 어떻게 적용하지?
지난 챕터 끝의 Pure Monte Carlo를 떠올려. 9개 자리에 1000번씩 균등 시뮬레이션. 만약 UCB1로 바꾸면?
📖 게임에서 UCB1 의사 코드
- 각 첫 수에 대해 1번씩 rollout (초기화)
- 이후 N번 반복:
- 각 수의 UCB1 점수 계산
- UCB1 점수가 가장 높은 수 선택
- 그 수에서 rollout 1번
- 결과로 그 수의 wins, counts 갱신
- 마지막에 가장 많이 시도된 수를 답으로 (최고 UCB1이 아닌 최고 counts!)
💡 왜 마지막에 max(counts)?
UCB1은 "탐험"을 위해 가끔 안 좋은 수도 시도해. 그래서 UCB1 점수만 보면 마지막에 운 좋게 강조된 수가 뽑힐 수 있어.
대신 "가장 많이 시도된 수" = "UCB1이 가장 자주 좋다고 판단한 수" — 더 안정적인 선택. 알파고도 이 방식.
이 단순한 변경만으로 Pure Monte Carlo가 훨씬 강해짐. 그런데 — 아직 한 가지 문제가 남아있어:
⚠️ 여전히 깊이를 못 봄
UCB1을 첫 수 선택에만 쓰고, 그 후로는 여전히 무작위 rollout. 여러 수에 걸친 계획은 아직 못 함.
이상적인 방법: 두 번째 수, 세 번째 수에도 UCB1을 적용 — 트리 형태로 점진적으로 키움.
이게 다음 챕터의 MCTS. UCB1 + 트리 = 마법.
UCB1은 단지 한 부품이야. 진짜 알고리즘은 다음 챕터에서 완성돼.