같은 벽, 다른 해법 — AI는 더 커져서가 아니라 더 깊이 생각해서 정체를 넘었습니다
같은 벽, 완전히 다른 해법
지난번엔 YINSH AI가 더 강해지지 못했고, 답은 더 큰 두뇌였습니다 — 신경망 크기를 2배로 키우자 옛 챔피언을 이겼고, 새 챔피언 gen-202가 탄생했습니다. 그런데 gen-202도 정체됐습니다. 본능적으로는 같은 해법에 손이 갔습니다 — 신경망을 또 키우는 것. 하지만 그건 틀린 선택이었을 겁니다. 이번 벽의 원인은 달랐습니다. AI가 충분히 좋은 예제로 배우지 못하고 있었던 것입니다. 해법은 각 대국을 교훈으로 바꾸기 전에 더 깊이 생각하게(더 깊이 탐색하게) 만드는 것이었습니다. 효과가 있었고, 학생이 어떻게 자기 선생을 이길 수 있는지 가르쳐 주었습니다.
TL;DR
gen-202(지난번의 더 큰 신경망)가 더 나아지지 못했습니다 — 새로운 정체.- 신경망을 키우는 대신, AI가 자기 연습 대국을 만들 때 2배 더 깊이 탐색하게 했습니다 (수당 평균 약 400 → 800회 “앞 내다보기”).
- 결과: 두 번의 추가 승급, 새 챔피언
gen-205, 기준 상대 대비 승률이 0.70 → 0.75 → 0.81로 상승. - 함정: 더 깊은 탐색은 학습 속도를 절반으로 떨어뜨려야 했습니다. 뻔한 해법(병렬 worker 추가)은 아무 효과가 없었습니다. 진짜 병목은 다른 곳에 있었고, 작은 변경 하나로 속도를 되찾았습니다.
- 지금 이 순간에도 18시간 실험이 더 깊이 들어가며
gen-205를 넘어서려 하고 있습니다.
AI가 배우는 방식, 그리고 “더 깊이”가 중요한 이유
루프를 간단히 복습합니다. AI는 자기 자신과 대국을 두고, 새 신경망이 그 대국을 모방하도록 학습하며, 엄격한 통계 심판인 gate가 새 신경망이 더 많이 이긴다고 입증될 때만 챔피언으로 인정합니다. 이 모든 작업에서 심판은 한 번도 손대지 않았으므로, 모든 “승급”은 운이 아니라 측정된 진짜 향상을 뜻합니다.
핵심은 AI가 자기 대국을 두면서 각 수를 어떻게 고르는가입니다. 직감만 믿지 않습니다. 매 수 전에 **탐색(search)**을 합니다 — 여러 진행 가능성을 상상하고, 앞을 내다본 뒤 가장 잘 버티는 수를 둡니다. 그 탐색된 수는 신경망의 즉각적 직감보다 강하고, 바로 그 차이가 신경망이 배우는 재료입니다. 그래서 교훈의 품질은 전적으로 AI가 얼마나 깊이 탐색했는가에 달려 있습니다. 얕은 탐색은 평범한 교훈을 만들고, 학생은 얕은 선생을 넘어설 수 없습니다.
학생은 선생을 이길 수 있습니다 — 선생이 더 깊이 생각한다면
기억해 둘 만한 발상이 여기 있습니다. 챔피언 gen-202는 일정한 탐색량으로 자기 학습 대국을 만들었습니다. 그 대국으로 학습한 새 신경망은 gen-202를 모방할 수 있지만 — 딱 gen-202 수준까지만입니다. 베끼는 것으로는 선생을 넘을 수 없습니다.
그래서 선생이 평소 두는 것보다 더 깊이 생각하게 했습니다 — 대국을 기록할 때 앞 내다보기를 2배로. 이제 교훈으로 저장되는 수들이 gen-202의 직감보다 강해졌습니다. 학생은 갑자기 챔피언보다 나은 것을 모방하게 되었고 — 그래서 챔피언을 넘어설 수 있습니다. 그리고 넘어서는 순간, 새 챔피언은 더 깊은 대국을 만들고, 다음 학생은 그것을 다시 넘어섭니다. 향상이 복리처럼 쌓입니다. 그게 트릭의 전부입니다.
하마터면 성과를 가릴 뻔한 성능 함정
더 깊은 생각은 공짜가 아닙니다. 2배 깊은 탐색은 2배의 작업이고, 매 라운드가 2배 길어져야 합니다 — 그러면 너무 느려서 할 가치가 없습니다. 뻔한 해법은 무거운 연산을 맡은 그래픽 카드(GPU)의 여유를 써서 더 많은 대국을 동시에 두는 것이었습니다. 그래서 병렬 worker를 2배로 늘렸는데… 속도는 거의 그대로였습니다. GPU는 절반만 일하고 있었습니다.
그게 그 주의 진짜 교훈이었습니다 — 제가 병목이라 가정한 부분이 병목이 아니었습니다. worker가 한계가 아니라, GPU에 일을 넘겨주는 단 하나의 “배차원(dispatcher)” 프로그램이 한계였습니다. 일감을 넘기는 속도가 정해져 있어서, 뒤에 worker가 아무리 줄 서도 GPU는 절반만 찼습니다. 두 번째 배차원을 돌리자 흐름이 2배가 됐습니다 — GPU가 절반에서 거의 가득으로 뛰었고, 더 깊은 탐색이 사실상 추가 시간 없이 끝났습니다. 두 배의 생각, 같은 시간.
이 일이 다시 각인시킨 습관은 거의 시시하지만 거의 항상 옳습니다 — 느리다고 가정한 것을 빠르게 만들기 전에, 실제로 놀고 있는 게 무엇인지 보십시오. 절반 빈 GPU가 결정적 단서였습니다.
결과, 그리고 지금 돌고 있는 것
이 두 조각 — 더 나은 교훈을 위한 깊은 탐색, 그리고 그것을 빠르게 유지하는 두 번째 배차원 — 으로 루프는 첫 진지한 시도에서 gen-202 정체를 넘었습니다. 두 세대가 손대지 않은 심판을 통과해 승급했고, 기준 상대 대비 승률은 0.81까지 꾸준히 올랐습니다. 새 챔피언은 **gen-205**이고, 이제 플레이어가 직접 상대할 수 있습니다. 이 글을 쓰는 지금, 18시간 실험이 더 깊이 — 탐색을 또 2배로 — 들어가며 같은 트릭이 계속 통하는지, 아니면 다음 벽은 정말 크기 문제인지를 알아보고 있습니다.
가장 시간을 많이 잡아먹은 실수들
둘 다 무언가를 측정하는 사람이라면 익숙할 것입니다. 첫째, 저는 하마터면 낡은 숫자를 믿을 뻔했습니다 — 처음의 “너무 느리다”는 판단은 오해를 부르는 수치, 즉 짧은 초반 대국의 첫 30초였지 진짜 지속 속도가 아니었습니다. 진짜 기준값을 다시 재자 결론이 “가망 없음”에서 “괜찮음”으로 뒤집혔습니다. 결과가 의외라면 기준값부터 다시 구하십시오. 둘째, 이전 실험에서 남은 타이머 파일은 새 실행을 시작하자마자 종료시켰을 것이고, 절반만 끝난 연습 대국 묶음은 첫 교훈을 오염시켰을 것입니다 — 둘 다 실행 전에 그에 관한 메모가 아니라 디스크의 실제 파일을 읽어서 잡아냈습니다.
이것이 바꾸는 것
두 번의 정체, 완전히 다른 두 해법 — 처음엔 더 큰 두뇌, 이번엔 더 깊은 생각. 제가 간직할 교훈은 “모델이 더 나아지지 않는다”는 것은 진단이 아니라 증상이라는 점입니다 — 매번 진짜 원인은 제가 아직 보지 않은 곳에 있었습니다. 그리고 가장 재사용할 만한 발상은 거의 철학적입니다 — 학습자가 자기 선생을 넘게 하려면, 선생이 평소보다 더 깊이 생각하게 한 뒤 그것을 다시 증류해 넣으십시오.
Keywords
- Self-play — AI가 자기 자신과 대국을 두어 사람 기보 없이 스스로 학습 예제를 만드는 것.
- Search / 앞 내다보기 (MCTS) — 매 수 전에 여러 진행을 상상하고 앞을 내다본 뒤 가장 좋아 보이는 수를 두는 것; 더 많이 내다볼수록 더 강하지만 더 느립니다.
- Distillation(증류) — 더 강한 신호를 모방하도록 새 신경망을 학습시키는 것; 여기서는 챔피언의 깊게 탐색된 수들.
- GPU — 무거운 수학을 처리하는 그래픽 칩; 이걸 바쁘게 유지하는 게 성능 싸움의 대부분입니다.
- Gate — 도전자가 더 많이 이긴다고 입증될 때만 챔피언으로 인정하는 통계 심판.
- Plateau(정체) — 강함이 더 오르지 않는 상태; 원인(너무 작아서? 교훈이 약해서? 숨은 병목?)은 매번 진단해야 하는 증상.
- Compounding(복리) — 더 나은 챔피언은 더 나은 연습 대국을 만들어, 다음 학생이 더 높은 바닥에서 출발합니다.
References
docs/task-log/20260614-yinsh-ai-impl-plan/25-deep-mcts-run-result.md— 더 깊은 탐색이gen-202정체를 넘은 실험 (새 챔피언gen-205).docs/task-log/20260614-yinsh-ai-impl-plan/26-deep-mcts-run-kickoff.md— 더 깊이 들어가는 실험과 성능 병목 해결.docs/guides/yinsh-ai-training-explained.md— 파이프라인 전체가 어떻게 작동하는지에 대한 엔지니어 수준의 상세 설명.#1290/#1300— 더 깊은 탐색 실험의 시작.#1297/#1298— smoke test와 두 번째 배차원 해결.- AlphaZero (DeepMind) — 이 파이프라인이 본뜬 self-play + 탐색 + 학습 루프.
AI workflow note
이 캠페인은 손이 아니라 Claude Code 에이전트가 운영했습니다 — GitOps 설정을 편집하고, 시작/정지 pull request를 열고 병합했으며, 노트북 Wi-Fi가 클러스터를 직접 막기 때문에 loopback 네트워크 릴레이를 통해 여러 시간짜리 실험을 지켜봤습니다. 가장 결정적이었던 수는 긴 실험에 들어가기 전에 짧은 smoke test를 돌린 것입니다 — 그것이 절반 노는 GPU와 단일 배차원 병목을 드러냈고, “너무 느리다”는 막다른 길을 한 줄짜리 해법으로 바꿨습니다. 에이전트는 각 실험을 가설과 미리 정한 성공 기준이 있는 하나의 실험으로 다루고, 결과를 읽어 다음 단계를 결정합니다.
