늦깎이연구소 | 바둑 AI 개발기 #2
이상한 일이 일어났다
AI를 학습시키기 시작했다.
스스로 바둑을 두고, 결과를 보고, 배우는 방식.
AlphaGo Zero가 썼던 그 방법 — 셀프플레이.
그런데 이상했다.
Iteration 1 | Policy Loss: 3.41
Iteration 2 | Policy Loss: 3.48
Iteration 3 | Policy Loss: 3.57
Policy Loss가 올라갔다.
Loss는 “틀린 정도”다.
학습하면 내려가야 한다.
그런데 올라갔다.
왜?
초보들끼리 두면 늘지 않는다
생각해보면 당연하다.
아무것도 모르는 AI 두 명이 대국한다.
둘 다 무작위로 둔다.
승패가 갈린다.
그리고 AI는 생각한다:
“이 방식이 이겼으니까, 이게 정답인가 보다!”
하지만 사실은?
그냥 상대가 더 못 뒀을 뿐이다.
잘못된 성공의 문제
흑: 무작위로 A에 둠
백: 무작위로 B에 둠 (실수)
흑: 우연히 백을 잡음
흑: "A가 좋은 수구나!"
AI는 이 경험을 학습한다.
하지만 A는 좋은 수가 아니다.
상대가 실수했을 뿐이다.
이걸 반복하면?
잘못된 패턴을 강화하게 된다.
초보들끼리 백 판을 두면?
실력이 느는 게 아니라,
나쁜 습관이 굳어진다.
해결책: 프로에게 배우자
그래서 방법을 바꿨다.
프로 기사들의 기보(棋譜)를 구했다.
9×9 바둑 대회 기록 517개.
무려 23,612개의 국면.
그리고 AI에게 물었다:
“이 상황에서 프로는 어디에 뒀을까?”
AI가 예측하고, 정답과 비교한다.
틀리면 학습한다.
# 기보 학습의 핵심
policy_loss = cross_entropy(AI의_예측, 프로의_선택)
이게 지도 학습(Supervised Learning) 이다.
결과: 4.6% → 26.2%
첫 에폭:
Epoch 1 | Accuracy: 4.6%
4.6%.
100수 중 5수도 못 맞힌다.
완전 무작위보다 살짝 나은 수준.
하지만 학습이 진행되면서:
Epoch 5 | Accuracy: 18.3%
Epoch 10 | Accuracy: 26.2%
26.2%.
4수 중 1수는 프로와 같은 수를 둔다.
아직 멀었지만, 확실히 성장했다.
데이터 증강: 한 판을 여덟 판으로
바둑판은 대칭이다.
원본 90° 회전 좌우 반전
┌─────┐ ┌─────┐ ┌─────┐
│ ● │ │ ● │ │ ● │
│ ○ │ │ ○ │ │ ○ │
└─────┘ └─────┘ └─────┘
같은 수, 다른 방향.
AI에게는 전부 다른 학습 데이터다.
- 4가지 회전 (0°, 90°, 180°, 270°)
- 2가지 반전 (원본, 좌우 대칭)
한 게임 → 8배 데이터.
원래: 23,612 국면
증강 후: 170,000 국면
데이터가 부족할 때 쓰는 기법이다.
이걸 데이터 증강(Data Augmentation) 이라고 한다.
규칙 vs 전략
AI는 바둑 규칙을 어떻게 아는 걸까?
정답: 두 가지가 다르다.
1. 규칙 (Rules) — 코딩됨
def is_valid_move(self, point):
# 빈 칸인가?
# 자충수인가?
# 패(Ko)인가?
불법 수는 코드로 차단된다.
AI가 배우는 게 아니다.
2. 전략 (Strategy) — 학습됨
“이미 집이 된 곳에 두면 손해”
이건 규칙이 아니다.
전략이다.
AI는 이걸 배워야 한다.
프로 기보에서, 혹은 경험에서.
그래서 규칙은 지키는데 멍청한 수를 두는 AI가 나온다.
“합법적이지만 나쁜 수”를 아직 모르기 때문이다.
Loss의 의미
학습 과정에서 두 가지 Loss가 나온다.
Policy Loss — “어디에 둘까”
AI: "E5에 두겠습니다" (확률 30%)
프로: "E5" ✓
예측이 맞으면 Loss가 낮아진다.
Value Loss — “누가 이길까”
AI: "현재 흑이 유리합니다" (0.3)
실제 결과: 흑 승 (1.0)
승패 예측이 맞으면 Loss가 낮아진다.
두 가지를 동시에 학습한다.
어디에 둘지 + 이기고 있는지.
왜 정확도가 26%에서 멈출까?
26%는 낮은 숫자처럼 보인다.
하지만 생각해보자.
9×9 바둑에서 가능한 착점은 81개.
무작위로 찍으면 정확도 1.2%.
26%는 무작위보다 20배 이상 잘하는 것.
그래도 프로의 26%밖에 못 맞힌다.
나머지 74%는?
프로도 여러 좋은 수 중 하나를 선택한 것.
AI가 “C5″를 예측했는데 프로가 “D6″을 뒀다면?
둘 다 좋은 수일 수 있다.
하지만 정확도 계산에선 “틀린 것”이 된다.
기보 학습 → 셀프플레이
지금 AI는 밤새 학습 중이다.
[Iteration 1] Policy Loss: 3.72
[Iteration 2] ...
이번엔 다르다.
무작위로 시작하는 게 아니라,
프로 기보로 미리 학습한 AI가 셀프플레이한다.
초보끼리 두면 안 늘지만,
어느 정도 기본기를 익힌 다음 두면?
서로 실력을 끌어올릴 수 있다.
이게 AlphaGo Zero의 방식이다:
- (선택) 기보 학습으로 기초 실력 습득
- 셀프플레이로 스스로 더 강해지기
- 인간을 넘어서기
우리 AI는 아직 1-2단계 사이에 있다.
내가 배운 것
1. 잘못된 피드백은 해롭다
초보끼리 두면 잘못된 성공을 학습한다.
삶에서도 마찬가지다.
“이게 됐으니까 맞는 거야”가 항상 맞진 않다.
2. 좋은 스승이 필요하다
AI도 프로 기보가 필요했다.
우리도 좋은 멘토, 좋은 자료가 필요하다.
혼자 삽질하는 건 한계가 있다.
3. 데이터는 늘릴 수 있다
같은 경험도 다르게 보면 새로운 배움이 된다.
회전, 반전 — 관점을 바꾸면 학습량이 8배.
4. 규칙을 아는 것 ≠ 잘하는 것
바둑 규칙을 알면 바둑을 잘 두나?
코딩 문법을 알면 코딩을 잘 하나?
규칙과 전략은 다른 차원의 문제다.
다음 글에서는
- 밤새 학습한 AI의 실력 변화
- 셀프플레이가 실제로 도움이 됐는지
- AI와 직접 대국한 경험
마치며
AI를 학습시키면서 깨달았다.
배움에는 순서가 있다.
- 아무것도 모르는 상태
- 전문가의 방식을 모방
- 스스로 실험하며 발전
- 자신만의 스타일 형성
AI도 이 과정을 거친다.
인간도 마찬가지다.
처음부터 “창의적으로” 하려고 하면 실패한다.
먼저 배우고, 그 다음에 넘어서야 한다.
모방 → 이해 → 창조.
그게 학습의 정석이다.
다음 편: “밤새 학습한 AI — 50번의 셀프플레이 후 일어난 일”
학습 데이터: 517개 프로 기보 (CWI.nl 아카이브)
데이터 증강: 8배 (회전 + 반전)
최종 정확도: 26.2% (무작위 대비 20배 향상)
