Expand 단계 — g가 호출되는 순간
Select가 끝나면 리프에 도착한다. 이제 그 리프를 확장(expand)할 차례 — MuZero에서 가장 특징적인 단계.
📖 Expand에서 일어나는 일
도착한 리프 노드를 L, L의 부모를 P, L까지 오는 데 사용된 행동을 a라고 하자.
- g(P.state, a)를 호출 → L의 잠재 상태
s_L과 그 행동의 보상r_L - f(s_L)를 호출 → L에서의 정책
p_L과 가치v_L - L에 잠재 상태
s_L와 보상r_L를 저장 - L 아래에 가능한 행동만큼 자식 노드 생성, 각 자식의 prior에
p_L분포 분배
💡 g 한 번이 만들어내는 것
g 한 번 호출이 트리에 어떤 정보를 추가하느냐:
- 잠재 상태: 트리의 다음 깊이로 이동
- 보상: 이 행동의 즉시 보상 (체스/바둑은 0, 아타리는 점수)
이 두 가지가 MCTS에 들어와야 트리 탐색이 진행될 수 있다.
🎯 AlphaZero vs MuZero — Expand에서의 정확한 차이
| 단계 | AlphaZero | MuZero |
|---|---|---|
| 다음 상태 | next_state(s, a) — 게임 규칙 |
g(s, a) → s′ — 학습된 dynamics |
| 보상 | 게임에서 정의됨 (예: 승=+1, 패=-1) | g(s, a) → r — 학습된 값 |
| 정책/가치 | f(s) |
f(s) — 똑같음 |
| 상태 표현 | 보드 (특징판) | 잠재 벡터 |
⚠ 결과 — MuZero는 "규칙 없이" 트리를 만든다
외부에서 받는 함수가 하나도 없다. 모든 정보가 신경망에서 생성된다.
이게 MuZero가 보드 게임에서 아타리 게임까지 같은 알고리즘으로 다 풀 수 있는 이유다 — 아타리는 게임 규칙을 코드로 받지 못하지만, MuZero는 그래도 작동한다.
그런데 한 가지 더 — Expand는 보통 Evaluate와 같이 일어난다. 정확히 어떻게? 다음 섹션.