Wintersalmon | Blog

이기되, 더 빨리 이기기 — AI에게 '빠른 승리'의 가치를 가르치기

7 min read

AI는 빠른 승리와 느린 승리를 구분하지 못했습니다

제 LLM 기반 개발 워크플로의 일상 실험 대상인 보드게임 AI들은 자기 자신과 두며 배우고, 국면을 −1(패배)에서 +1(승리)로 점수 매깁니다. 이번 글은 그 점수의 미묘한 결함을 고친 이야기입니다: AI는 한 수 앞의 승리와 백 수 앞의 승리에 똑같이 +1을 매겼습니다. 거의 확실한 마무리와 먼 승리를 말 그대로 구분하지 못했고 — 그 무지가 조용히 AI를 느리고 비싸게 만들고 있었습니다. 더 빨리 이기는 것을 선호하도록 가르치자 둘 다 해결되었고, 약 150 Elo 더 강한 챔피언이 나왔습니다. 이 글은 게임 AI를 학습시켜 본 적 없는 엔지니어를 위한 것입니다.

TL;DR

  • AI는 value network로 국면을 점수 매깁니다. 우리 것은 승리 국면을 승리까지의 거리와 무관하게 모두 +1로 라벨링했습니다 — 즉 승리 거리에 눈이 먼(win-distance-blind) 상태였습니다.
  • 그래서 sim에 굶주린(sim-hungry) AI가 되었습니다: 잘 두려면 수당 약 400번의 look-ahead가 필요했습니다. 값싼 search(몇 번의 look-ahead)는 눈먼 value를 드러냈고 AI는 무너졌습니다 — 측정값 −338 Elo.
  • 해결책(설정 플래그 하나): 학습 라벨을 끝까지의 거리로 할인합니다 — value = 결과 · γ^(끝까지 남은 수), γ = 0.997. 5수 뒤 승리는 약 0.99, 130수 뒤 승리는 약 0.68로 라벨링됩니다.
  • 놀라운 점: 저는 이것이 기존 챔피언과 비기는 데 그칠 거라 예측했습니다. 틀렸습니다 — 결정적으로 더 강해졌습니다(gen-240, 약 +150 Elo). 더 진실한 value가 값싼 search를 더 좋게 만들기 때문입니다. 또한 배포된 봇을 적은 look-ahead에서 +263 Elo로 이겼습니다 — 옛 봇이 약했던 바로 그 지점에서.

왜 밋밋한 +1이 AI를 느리게 만드나

매 수 전에 AI는 search를 돌립니다: 진행을 상상하고, 리프 국면을 value network로 점수 매기고, 가장 잘 버티는 수를 둡니다. value network는 search의 나침반입니다 — 잘못 가리키면 search가 헤맵니다. (이 시리즈 앞부분의 놓친 외통수가 바로 이것이었습니다: 이기고 있다고 너무 확신한 나머지 마무리할 긴박함을 느끼지 못한 value head.)

이제 그 나침반이 모든 승리 국면을 똑같이 이겼다고 말한다고 상상해 보세요. search는 빠른 마무리로 끌리는 힘을 느낄 수 없으니, 무차별로 빠른 수순을 우연히 찾아낼 때까지 많은 look-ahead가 필요합니다. 그것이 sim-hungry의 정의입니다: 세게 생각하게 해줄 때만 강한 것. 값싼 search로 실전 속도를 높이려 했을 때 sim-hungry 망은 무너졌습니다(−338 Elo) — 눈먼 value가 기댈 곳이 없었으니까요. 근본 원인은 학습 부족이 아니라, value가 무엇을 예측하도록 학습시켰느냐였습니다.

해결책: 승리를 ‘얼마나 먼지’로 라벨링하기

이 메커니즘은 이미 코드에 있었고, 꺼져 있었습니다. 학습 라벨을 재구성합니다: 어떤 승리든 +1 대신 결과 · γ^(끝까지 남은 수)를 씁니다. γ = 0.997이면 130수 뒤 승리는 0.68, 5수 뒤 승리는 0.99로 라벨링됩니다. 이제 value network는 loss를 낮추려면 거리를 표현할 수밖에 없습니다.

쉬운 비유 하나: 나중의 돈은 지금의 돈보다 가치가 낮으므로, 은행은 미래 현금을 할인합니다. 우리는 미래의 승리를 같은 방식으로 할인했습니다 — 지금 현금화할 수 있는 승리가 백 수 뒤의 같은 승리보다 가치가 큽니다. 강화학습에서 이 계수는 말 그대로 *할인율(discount)*이라 부릅니다.

하나의 까다로운 제약이 있었고, 건너뛰면 물리는 종류입니다. AI가 지금껏 기록한 모든 게임은 밋밋한 ±1 라벨을 썼습니다. 그것을 새 할인 라벨과 섞으면 같은 국면에 대해 value에게 모순된 두 가지를 가르치는 셈 — 순전한 오염입니다. 그래서 새 계보가 필요했습니다: 옛 게임 기록을 디스크에서 옆으로 치워 학습 window가 오직 할인 게임만 담게 하고(docs/task-log/20260705-yinsh-worker-latency/04-value-discount-result.md, §2), 새 network가 강한 옛 챔피언의 플레이를 증류(distill)하면서 새 거리를 배우게 했습니다.

틀린 예측 — 그리고 진짜 교훈

여기가 제가 틀린 부분이고, 그 정정이 핵심 전부입니다. 새 network는 옛 챔피언의 수를 copy하도록 배우니, 잘해야 옛 챔피언과 비길 수 있다고 — “증류 천장(distillation ceiling)“이라고 저는 주장했습니다. 초기 몇 generation은 그 이야기에 완벽히 들어맞으며 비등한 지점에 머물렀습니다. 그러다 한 generation이 +68 Elo로 승급했고, 저는 틀렸습니다.

교훈: value network는 단순한 점수판이 아니라 search의 증폭기입니다. search는 모든 리프에서 value에 기대므로, 더 진실한 value는 같은 search를 더 잘 두게 만듭니다 — search가 값싸서 value에 가장 크게 기댈 때 특히요. 그래서 AI는 옛 챔피언을 단지 copy한 게 아니라, 그를 능가하며 search했습니다. 통계적으로 게이트를 통과한 깔끔한 두 번의 승급(gen-219 → gen-236 → gen-240) 뒤, 챔피언은 시작점 대비 약 +150 Elo가 되었습니다.

정말로 값싼 사고에 관한 것이었다는 증거는 검증에 있습니다(신규 게임, 04-...-result.md §5). 현재 배포된 봇을 상대로, 새 챔피언은 100 look-ahead에서 +263 Elo, 400에서 +191로 이겼습니다 — 사고가 값싸질수록 그 격차가 커졌습니다. 옛 봇은 look-ahead가 필요하고, 새 봇은 아닙니다. 그 벌어지는 격차가 우리가 좇던 sim-efficiency이며, 순수한 실력으로 드러난 것입니다.

옛 챔피언 새 챔피언 (gen-240)
먼 승리의 value +1 (밋밋) 거리로 할인
배포 봇 대비 우위 @ 100 look-ahead +263 Elo
배포 봇 대비 우위 @ 400 look-ahead +191 Elo
직전 챔피언 대비 실력 기준선 약 +150 Elo

이것이 바꾸는 것

새 챔피언은 실전 테스트를 위해 staging에 ai-fp-gen240으로 올라가 있습니다. 봇 하나 이상으로, 이것은 빠진 조각입니다: 값싼 search에서 강한 network야말로 시스템 전체가 실력을 잃지 않으면서 수당 사고를 줄이게 해주는 것 — Gumbel search 글이 깔아둔 그 보상입니다. 플래그 하나, 새 계보 하나, 그리고 마침내 빠른 승리가 느린 승리를 이긴다는 걸 아는 점수판.

핵심 용어

  • Value network — 국면을 −1(패배)에서 +1(승리)로 점수 매기는 AI의 부분; search가 방향을 잡는 나침반.
  • Search / look-ahead (MCTS) — 수를 두기 전 여러 진행을 상상해 가장 잘 버티는 수를 두는 것; look-ahead가 많을수록 강하지만 느립니다.
  • Sim-hungry — look-ahead가 많을 때만 잘 두고 적게 주면 무너지는 AI.
  • 할인율 (γ) — 1보다 살짝 작은 수로 미래의 것의 가치를 줄입니다; 여기서는 더 먼 승리의 가치를 줄입니다.
  • Elo — 실력 점수; +150 Elo는 대략 맞대결 70% 승률.
  • Distillation(증류) — 강한 network의 수를 copy하도록 새 network를 학습시키는 것.
  • Gate — 도전자가 실제로 더 많이 이겨야만 챔피언으로 인정하는 엄격한 통계 검정.

참고 자료

  • docs/task-log/20260705-yinsh-worker-latency/04-value-discount-result.md — 캠페인 결과: 두 번의 승급, 저-고 look-ahead 검증, 그리고 제가 틀린 “증류 천장”.
  • docs/task-log/20260614-yinsh-ai-impl-plan/32-shortest-path-value-discount.md — value-discount 설계(만들어졌지만 꺼져 있던 플래그).
  • [[2026-06-30-yinsh-missed-mate]] — 이 문제를 가리킨 앞선 value head 실패(놓친 외통수).
  • [[2026-07-04-thinking-smarter-not-harder]] — 값싼 search(Gumbel); 값싼 search에서 강한 망이야말로 배포를 안전하게 만듭니다.
  • AlphaZero (DeepMind) — 이것이 따라 하는 self-play + search + value 루프.

AI 작업 노트

Claude Code 에이전트가 이 전 과정을 돌렸습니다: 플래그를 켜고, 새-계보 데이터 이동을 준비하고, 약 14시간 GPU 캠페인을 띄우고 지켜보고, 결과를 검증했습니다 — 교훈적인 실수 하나와 함께. 에이전트(저)는 진행 중에 “비김 천장”을 주장하며 자신 있게 말했고, 학습은 한 generation 뒤 그것을 반증했습니다. 그 정직한 정정(“value network는 search의 증폭기다”)이 이제 헤드라인입니다. 워크플로 교훈은 AI 교훈과 같습니다: 어떤 것이 한계에 갇혀 있는지에 대한 자신만만한 모델은, 측정이 동의하기 전까지는 정확히 아무 가치도 없습니다.


Hungjoon

I'm Hungjoon, a software engineer based in South Korea. This is my long-form notebook — homelab, Kubernetes, AI infra, and whatever else keeps me up at night.