MCTS (Monte Carlo Tree Search)

거대한 탐색 트리에서 모든 경로를 다 펼치지 않고, 무작위 시뮬레이션(Monte Carlo rollout)으로 각 행동의 가치를 추정하면서 유망한 가지에 탐색 자원을 집중하는 의사결정 알고리즘.
바둑/체스 같은 거대한 상태공간의 게임에서 다음 수를 고르는 데 쓰이며, RL과 결합해 AlphaGo의 핵심 엔진이 되었다.

MCTS reinforcement-learning search UCB

왜 필요한가

  • 바둑의 상태공간은 약 . Minimax처럼 전체 트리를 깊이까지 전부 펼치는 brute-force 탐색은 불가능하다.
  • 핵심 아이디어: 트리를 균일하게 키우지 말고, 좋아 보이는 곳을 더 깊이 파자. 그리고 “좋은지”의 판단은 끝까지 빠르게 시뮬레이션(rollout)한 평균 결과로 근사한다 → 이름 그대로 Monte Carlo.

네 단계 사이클

한 번의 “탐색(iteration)“은 다음 4단계를 반복한다. 시간/연산 예산이 허락하는 만큼 수천~수십만 번 돌린다.

1. Selection (선택)

루트에서 시작해 이미 만들어진 트리 안에서 자식 노드를 골라 내려간다. 이때 단순히 평균 승률이 높은 노드만 고르면(greedy) 잘못 저평가된 가지를 영영 못 살핀다. 그래서 exploration vs. exploitation 균형을 맞추는 UCT 점수로 고른다.

2. Expansion (확장)

더 내려갈 자식이 없는 leaf에 도달하면, 아직 시도하지 않은 행동 하나(또는 여럿)에 대한 새 자식 노드를 트리에 추가한다.

3. Simulation / Rollout (시뮬레이션)

새로 추가한 노드에서부터 게임 끝(terminal)까지 빠르게 플레이아웃한다. 전통적으로는 무작위(random policy) 또는 가벼운 휴리스틱 정책으로 진행. 결과(승/패, 또는 보상 )를 얻는다.

4. Backpropagation (역전파)

시뮬레이션 결과를 방문 경로를 따라 루트까지 거슬러 올라가며 각 노드의 통계( 방문 횟수 , 누적 가치 )에 반영한다.
주의: 신경망 backprop과는 다른 의미 — 여기선 트리 경로를 따라 통계를 갱신하는 것.

사이클이 끝나면, 루트에서 가장 많이 방문된(또는 가치가 가장 높은) 자식을 실제 수로 선택한다. (방문 횟수가 강건한 추정치라 보통 이쪽을 쓴다.)

        [Root]
       /  |   \      ← 1. Selection: UCT로 내려감
     ...  ...  ●     ← 2. Expansion: 새 노드 ● 추가
                |
                ┊    ← 3. Simulation: terminal까지 rollout
              (z=+1)
                ↑
        ← 4. Backprop: 경로의 N, W 갱신

UCT(Upper Confidence bound for Trees)

Selection 단계의 핵심 공식. Multi-Armed Bandit의 UCB1을 트리에 적용한 것.

각 노드(행동) 에 대해 다음 점수가 가장 큰 자식을 고른다:

  • : 그 노드의 평균 가치(승률) → 좋은 곳을 더 가자(exploitation).
  • : 덜 방문한 노드일수록 커지는 보너스 → 안 가본 곳도 가보자(exploration). 는 둘의 균형을 조절하는 상수(가 이론적 기본값).
  • 부모 방문 가 늘수록 보너스는 천천히 커지고, 자식 방문 가 늘수록 빠르게 줄어든다 → 자연스럽게 유망 가지로 수렴.

Multi-Armed Bandit과의 연결

UCT의 뿌리는 Multi-Armed Bandit 문제(여러 슬롯머신 중 어느 것을 당길까)다. MCTS의 각 노드에서 “어느 자식으로 갈까”를 매번 작은 bandit 문제로 보고, 후회(regret)를 최소화하는 UCB1 전략을 재귀적으로 적용한 것이 UCT. 그래서 MCTS는 **이론적으로 최적 행동으로 수렴(asymptotic convergence)**한다는 보장이 있다.

AlphaGo / AlphaZero에서의 발전 (PUCT)

순수 MCTS의 약점: 무작위 rollout은 분산이 크고, 깊은 게임에선 신뢰도가 낮다. AlphaGo 계열은 두 가지로 이를 대체·보강했다.

  1. Policy network : 어느 수가 유망한지 사전 확률을 줘서 Selection을 가이드 → 탐색 폭을 줄임.
  2. Value network : 끝까지 rollout하는 대신 상태의 가치를 직접 예측 → 시뮬레이션을 신경망 평가로 대체(분산↓).

Selection 공식도 PUCT로 바뀐다:

  • exploration 항에 policy prior 가 곱해져, 신경망이 추천한 수를 우선 탐색.
  • AlphaZero는 사람 기보 없이 self-play + MCTS만으로 policy/value를 학습 → MCTS가 “탐색 기반 정책 개선 연산자(policy improvement operator)” 역할.

정리: 장점과 한계

장점한계
도메인 지식 없이도 동작(random rollout)분기 계수(branching factor)가 매우 크면 비효율
언제든 멈춰도 그때까지 최선의 답(anytime)rollout 분산이 크면 수렴 느림
트리를 비대칭적으로(유망한 쪽만) 키움메모리에 트리를 저장해야 함
신경망(policy/value)과 자연스럽게 결합결정론적·완전관측 게임에 가장 잘 맞음

Related