늦깎이연구소 | 바둑 AI 개발기 #2
시작은 단순한 호기심이었다
카타고(KataGo).
알파고 이후, 개인도 만들 수 있는 오픈소스 바둑 AI의 이름이다.
나는 개발자가 아니다.
하지만 궁금했다.
“AI는 어떻게 ‘생각’하는 걸까?”
그래서 직접 만들어보기로 했다.
9×9 미니 바둑판으로 시작하는 AI.
Claude라는 AI의 도움을 받아서.
291줄의 코드, 그 안에 담긴 철학
프로젝트의 심장부는 mcts.py라는 파일이다.
MCTS — 몬테카를로 트리 탐색.
처음엔 이름부터 어려웠다.
하지만 천천히 읽어보니, 이건 단순한 알고리즘이 아니었다.
이건 ‘선택’에 대한 철학이었다.
MCTS가 하는 일, 한 문장으로
“많이 가본 길의 경험”과 “덜 가본 길의 가능성”을
균형 있게 저울질하며,
수백 번 미래를 시뮬레이션해서
지금 최선의 선택을 찾는다.”
바둑에서 AI는 한 수를 두기 전에
200번의 “만약에…”를 시뮬레이션한다.
- 만약 여기에 두면?
- 상대는 어떻게 대응할까?
- 그 다음은?
- 결국 누가 이길까?
이 과정을 200번.
그리고 가장 “자주 좋았던 길”을 선택한다.
핵심 공식: 탐험 vs 활용
코드에서 가장 중요한 부분은 이 한 줄이다:
점수 = 활용(exploitation) + 탐험(exploration)
| 요소 | 의미 | 높으면 |
|---|---|---|
| 활용 | 지금까지 좋았던 길 | 검증된 선택 |
| 탐험 | 덜 가본 길 | 새로운 가능성 |
AI는 이 두 가지를 동시에 고려한다.
“여기는 10번 가봤는데 7번 좋았어” → 활용 점수 높음
“여기는 한 번도 안 가봤어” → 탐험 점수 높음
가장 인상 깊었던 코드
exploration = c_puct * prior * sqrt(parent_visits) / (1 + visit_count)
복잡해 보이지만, 핵심은 이거다:
(1 + visit_count)
방문 횟수가 분모에 있다.
즉, 많이 가본 길일수록 탐험 점수가 낮아진다.
다시 말하면:
“덜 가본 길에 가산점을 준다.”
이게 AI가 같은 수만 반복하지 않는 이유다.
이게 AI가 새로운 전략을 발견하는 이유다.
삶에 대입하면
이 공식을 삶에 대입하면 어떻게 될까?
- 활용: 익숙한 일, 해봤던 방식, 검증된 루틴
- 탐험: 새로운 시도, 안 가본 길, 불확실한 선택
AI는 이 둘을 수학적으로 균형 맞춘다.
우리는?
대부분 활용에만 머문다.
“이게 되니까”, “이게 편하니까”.
하지만 AI는 말한다:
“덜 가본 길에도 점수를 줘야 해.
그래야 더 나은 길을 발견할 수 있어.”
왜 일부러 노이즈를 넣을까?
코드에는 “디리클레 노이즈”라는 게 있다.
dirichlet_alpha: float = 0.3 # 노이즈 강도
dirichlet_epsilon: float = 0.25 # 노이즈 비율
AI가 이미 “이게 최선”이라고 판단해도,
일부러 25%의 무작위성을 섞는다.
왜?
최선이라고 믿는 길만 가면,
진짜 최선을 영원히 못 찾을 수도 있으니까.
이걸 “국소 최적해(local optimum)”에 갇힌다고 한다.
삶에서도 마찬가지다.
“내가 아는 최선”이 “진짜 최선”이 아닐 수 있다.
가끔은 일부러 다른 길을 가봐야 한다.
MCTS의 4단계 — 생각의 구조
AI가 한 수를 두기까지의 과정:
| 단계 | 이름 | AI의 생각 |
|---|---|---|
| 1 | Selection (선택) | “일단 제일 괜찮아 보이는 방향으로 가보자” |
| 2 | Expansion (확장) | “여기서 또 어떤 선택지가 있지?” |
| 3 | Evaluation (평가) | “이 방향, 결국 어떻게 될 것 같아?” |
| 4 | Backpropagation (역전파) | “결과를 보니까, 아까 그 선택이 좋았네/별로였네” |
이 4단계를 200번 반복한다.
그리고 “가장 자주 좋았던 길”을 선택한다.
내가 배운 것
나는 코드를 다 이해하지 못한다.
하지만 이건 알게 됐다:
- AI는 “확신”하지 않는다.
수백 번 시뮬레이션하고, 확률로 판단한다. - AI는 “고집”하지 않는다.
좋아 보여도 일부러 다른 길을 가본다. - AI는 “기억”한다.
결과를 되돌아가며 기록하고, 다음 선택에 반영한다.
어쩌면 우리보다 더 겸손한 의사결정 방식일지도 모른다.
다음 글에서는
- UCB 공식을 더 깊이 파헤쳐본다
- “온도(temperature)”가 선택에 미치는 영향
- 실제로 AI와 바둑을 둬본 경험
마치며
“카타고를 만드는 사람”은 많지 않다.
하지만 “카타고를 만들며 배우는 사람”은 더 드물다.
나는 전문가가 아니다.
나는 그저 늦깎이 학습자다.
하지만 이 과정을 기록하면,
나 같은 사람에게 도움이 될 거라 믿는다.
“모르는 상태에서 시작해서 이해해가는 과정”
그게 늦깎이연구소가 하고 싶은 일이다.
다음 편: “AI는 왜 ‘덜 가본 길’에 점수를 더 줄까 — UCB 공식 깊이 읽기”
프로젝트 코드: 9×9 바둑 AI (Python + C++)
핵심 파일: mcts.py (291줄)
참고 논문: AlphaGo Zero, KataGo (David Wu)
