전체 파이프라인 요약
지금까지 본 코드들을 합치면 AlphaGo Zero 학습 파이프라인:
📖 의사 코드 — 전체 학습 루프
# 초기화
net = NetworkZero() # 무작위 가중치
best_net = net.copy()
replay_buffer = []
# 메인 루프 (700 사이클)
for cycle in range(700):
# ===== Stage 1: Self-play =====
cycle_data = []
for game in range(25000):
game_data = play_one_game(best_net) # MCTS 800 시뮬
cycle_data.extend(game_data)
# Replay buffer 갱신
replay_buffer.extend(cycle_data)
if len(replay_buffer) > 500_000 * 200: # 50만 게임 × 200수
replay_buffer = replay_buffer[-500_000 * 200:]
# ===== Stage 2: 학습 =====
for step in range(1000):
batch = sample(replay_buffer, batch_size=2048)
loss = compute_loss(net.forward(batch), batch_targets)
loss.backward()
optimizer.step()
# ===== Stage 3: 평가 =====
wins = 0
for game in range(400):
winner = play_evaluation(net, best_net)
if winner == net: wins += 1
if wins / 400 >= 0.55:
best_net = net.copy() # 채택
print(f"Cycle {cycle}: 새 모델 채택, 승률 {wins/400:.2%}")
else:
print(f"Cycle {cycle}: 새 모델 폐기, 승률 {wins/400:.2%}")
💡 우리가 본 모든 부품의 역할
- play_one_game (Ch 4 §2): self-play 한 게임 → 학습 데이터 생성
- mcts_visits: 각 수에서 MCTS visits 분포 (π_target)
- compute_loss (Ch 4 §3): 데이터 → 손실 신호
- play_evaluation: 새 모델 채택 결정
- 이 4개의 반복: 700 사이클
📊 실제 학습 자원 (논문)
| 자원 | 사용량 |
|---|---|
| 하드웨어 | 4 TPU (Google 자체) |
| 총 자가 대국 게임 | 4,900만 |
| 총 시뮬레이션 | 약 78조 |
| 학습 데이터 (보드) | 약 90억 |
| 학습 시간 | 40일 |
| 최종 ELO | 5,200+ |
4 TPU 40일 = $10,000~50,000 비용 (당시 추정). 알파고보다 훨씬 효율.