글자 크기

바둑 AI를 만들며 배운 것: “덜 가본 길에 가산점을 주는” 알고리즘

늦깎이연구소 | 바둑 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번 반복한다.
그리고 “가장 자주 좋았던 길”을 선택한다.

내가 배운 것

나는 코드를 다 이해하지 못한다.
하지만 이건 알게 됐다:

  1. AI는 “확신”하지 않는다.
    수백 번 시뮬레이션하고, 확률로 판단한다.
  2. AI는 “고집”하지 않는다.
    좋아 보여도 일부러 다른 길을 가본다.
  3. AI는 “기억”한다.
    결과를 되돌아가며 기록하고, 다음 선택에 반영한다.

어쩌면 우리보다 더 겸손한 의사결정 방식일지도 모른다.

다음 글에서는

  • UCB 공식을 더 깊이 파헤쳐본다
  • “온도(temperature)”가 선택에 미치는 영향
  • 실제로 AI와 바둑을 둬본 경험

마치며

“카타고를 만드는 사람”은 많지 않다.
하지만 “카타고를 만들며 배우는 사람”은 더 드물다.

나는 전문가가 아니다.
나는 그저 늦깎이 학습자다.

하지만 이 과정을 기록하면,
나 같은 사람에게 도움이 될 거라 믿는다.

“모르는 상태에서 시작해서 이해해가는 과정”

그게 늦깎이연구소가 하고 싶은 일이다.

다음 편: “AI는 왜 ‘덜 가본 길’에 점수를 더 줄까 — UCB 공식 깊이 읽기”


프로젝트 코드: 9×9 바둑 AI (Python + C++)
핵심 파일: mcts.py (291줄)
참고 논문: AlphaGo Zero, KataGo (David Wu)

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다