개성(기풍)을 가진 바둑 AI를 연구하는 플랫폼
강한 공통 실력층 위에 서로 다른 기풍(style)을 학습·비교·보존할 수 있도록 설계한 바둑 AI 연구용 CLI 플랫폼입니다. AI 시대에 기사마다의 개성이 하나의 '정답'으로 수렴한다는 바둑계의 오랜 고민에 대한 연구적 응답으로, 초반 수십 수에 드러나는 스타일을 style latent와 다중 알고리즘 비교로 다룹니다. 최강의 단일 엔진 대신, 여러 개성이 공존할 수 있는 연구 환경을 지향합니다.
Internal Research Platform바둑계의 오랜 관심사 — 개성, 기풍 — 을 연구 과제로 다뤄보기 위한 플랫폼
한 기사의 첫 50수는 오랫동안 그 사람의 사고가 새겨지는 구간으로 이야기되어 왔습니다. 어디에 두는지, 어느 변을 먼저 키우는지, 언제 침입하는지 — EulerGo는 이 초반의 스타일 차이를 학습 가능한 신호로 다루는 것을 출발점으로 삼습니다.
단일 강한 망을 더 강하게 만드는 대신, 강한 공통 실력층 위에 서로 다른 개성 헤드를 바꿔 끼울 수 있는 구조를 택했습니다. 한 모델이 아니라 여러 스타일이 같은 기반 위에 공존하는 방향입니다.
상용 엔진이 아니라 연구 플랫폼입니다. 스타일을 어떻게 정의하고, 학습시키고, 측정하고, 분류하고, 보존할 것인가 — 이 질문들에 대해 재현 가능한 실험을 돌려볼 수 있는 환경을 제공합니다.
한 모델, 여러 인격. 같은 기반, 서로 다른 손길.
입력 텐서는 9개의 base 채널 위에 N개의 style 채널을 더합니다. 각 style 차원은 보드 전체에 broadcast된 상수 평면입니다. style_vector=None이면 기존 9채널과 완전히 호환됩니다. Trainer는 features.shape[1]로 in_channels를 자동 감지하고 체크포인트의 architecture metadata로부터 자동 복원합니다.
같은 self-play / eval / league 인터페이스 위에서 --algorithm 한 줄로 MCTS, Gumbel, QZero, PGS, native_mcts, random을 바꿔 끼웁니다. 알고리즘은 손잡이입니다. 동일 조건 비교, 동일 메트릭 측정.
selfplay → train → checkpoint → 더 강한 selfplay → analyze / league. 각 반복은 자동으로 RunManifest (seed/git/profile/version)를 남기고, 파이프라인은 chain.json으로 warm-start 체인을 감사 가능하게 기록합니다.
스타일 분류기를 학습해서 어떤 게임이 어느 인격에 속하는지 자동으로 라벨링합니다. v1은 reference-based, v2는 학습된 모델 기반(--model). Style loss weight로 학습 중 개성 신호를 직접 강화할 수 있습니다.
같은 인터페이스 위에서 비교 가능한 계열들
| 알고리즘 | Tier | 설명 |
|---|---|---|
mcts | stable | AlphaZero-class PUCT MCTS — 기본 baseline |
random | stable | 합법수 균일 (control) |
gumbel | beta | Gumbel root selection — 단순화된 대조 baseline |
gumbel_full | stable | Sequential-halving + 완전 σ(q), Danihelka 2022 충실 구현 |
qzero | stable | Searchless Q-derived policy — 트리 없음 |
pgs | stable | Policy-Gradient Search — 트리 없는 짧은 stochastic rollouts |
native_mcts | stable | Root-parallel MCTS + C++ playouts (19x19 실용) |
distributed_selfplay | planned | Multi-machine selfplay (coordinator/worker 명령으로 운영) |
Self-improvement loop의 데이터 흐름
플러그인 자동 발견 기반 단일 진입점 eulergo
| 명령 | 설명 |
|---|---|
selfplay | 셀프플레이 게임 생성 (--algorithm, --workers N) |
train | 신경망 학습 (PyTorch, --style-loss-weight) |
shuffle | 학습 데이터 셔플/합치기 |
export | 체크포인트 내보내기/목록 |
eval | 두 설정 간 대국 평가 |
analyze | 초수 분석 및 스타일 비교 |
league | 라운드로빈 토너먼트 + ELO (--bootstrap CI) |
algorithms | 사용 가능한 알고리즘 + tier 출력 |
classify | 스타일 자동 라벨링 (reference-based 또는 학습된 v2) |
coordinator | (Phase 6) 분산 selfplay 코디네이터 |
worker | (Phase 6) 분산 selfplay 워커 |
tournament | (Phase 6) 정보량 기반 동적 페어링 |
dashboard | (Phase 6) 웹 대시보드 (i18n) |
pipeline | (Phase 6) 반복 학습 파이프라인 |
app | (Phase 6.1, optional) Toga 기반 GUI 앱 — pip install eulergo[app] |
모든 help와 실행 출력이 --lang ko|en|zh|ja|es 에 따라 번역됩니다.
단계별 가이드 18편 — 입문부터 분산 학습, GUI 앱까지
| 01 | EulerGo 시작하기 — 입문 + --workers 멀티코어 (5분) |
| 02 | 9x9 스타일 비교 — 같은 알고리즘 + 다른 하이퍼파라미터 |
| 03 | 멀티 알고리즘 비교 (Phase 4) |
| 04 | JSON 기보 읽기 (Phase 4) |
| 05 | 리그 + ELO 추정 |
| 06 | Style Latent 입력 채널 (Phase 3 도입) |
| 07 | 19x19 Baseline 재현 |
| 08 | QZero — Searchless Self-Play (Phase 5) |
| 09 | PGS — Tree-Free Rollouts (Phase 5) |
| 10 | Style Loss + Style Classifier (Phase 5) |
| 11 | Bootstrap ELO 신뢰구간 (Phase 5) |
| 12 | Native C++ MCTS + GPU Batching (Phase 5) |
| 13 | 다중 머신 분산 Self-Play (Phase 6) |
| 14 | 정보량 기반 Tournament Scheduler (Phase 6) |
| 15 | Web Dashboard (Phase 6, i18n) |
| 16 | 19x19 Long-Running Training Pipeline (Phase 6) |
| 17 | Style Classifier v2 — 학습된 분류기 (Phase 6) |
| 18 | 데스크톱/모바일 앱으로 체크포인트와 직접 플레이 (Phase 6.1) |
가상환경, 설치, 첫 selfplay 한 줄까지
5개국어 CLI, 선택적 GUI, 선택적 네이티브 빌드
모든 help 와 실행 출력이 --lang ko|en|zh|ja|es 옵션으로 전환됩니다. 기본은 한국어. 한국 바둑 문화에 뿌리를 두되, 처음부터 다국어로 설계되었습니다.
pip install eulergo[app]로 Toga 기반 크로스플랫폼 GUI 앱을 설치합니다 (Mac/Win/Linux/iOS/Android). 학습된 체크포인트와 직접 둘 수 있습니다. app 명령은 패키지가 import 가능할 때만 CLI에 노출됩니다 (strict plugin 정책).
bash eulergo/native/build.sh로 19x19 실용 속도를 위한 root-parallel MCTS + C++ playouts를 빌드합니다. 빌드되지 않아도 native_mcts는 Python MCTS로 자동 fallback합니다.
상용 엔진이 아닙니다. 한 사람의 기풍이 어떻게 학습되고, 비교되고, 보존될 수 있는지에 대한 재현 가능한 실험 환경을 지향합니다.
이세돌 九단의 공개 발언에 영감을 받아 시작된 프로젝트이며, 그분께 어떤 형태로든 공식적으로 연결되어 있지 않습니다.
GitHub에서 시작하기 문의하기