사람과 학습 모델이 한 판을 완성합니다
대국을 열면 사람은 흑돌을, AI는 백돌을 잡습니다. 사용자가 교차점을 선택해 착수를 확정하면 현재 19×19 판이 AI 서버로 전달됩니다. 모델이 다음 좌표를 내놓더라도 곧바로 돌을 놓지는 않습니다. 웹의 바둑 규칙 엔진이 빈 점인지, 자충인지, 직전 패 모양을 반복하는지 먼저 검사합니다.
이 구조가 필요한 이유는 언어·시각 모델의 답이 항상 합법수라는 보장이 없기 때문입니다. 모델이 이미 돌이 있는 곳을 고르면 해당 좌표를 거절 목록에 넣어 다시 요청합니다. 재요청도 합법수를 만들지 못하면 사용자가 상황을 알 수 있도록 오류를 표시하고, 몰래 임의의 수로 바꾸지 않습니다.
MariaGO 바둑의 핵심
19×19 정규 바둑판 · 사람 흑 / AI 백 · 착수 시간 제한 없음 · 매 수 자동 저장 · 기보 앞뒤 보기 · 특정 수부터 이어두기 · 수동/쌍패스 계가를 지원합니다.
처음 둘 때 꼭 알아둘 네 가지
1. 돌은 선이 만나는 점에 놓습니다
바둑돌은 칸 안이 아니라 가로선과 세로선의 교차점에 둡니다. 한 번 놓은 돌은 스스로 움직이지 않습니다. 흑과 백이 번갈아 한 수씩 두며, 둘 곳이 없거나 두지 않으려면 패스를 선택할 수 있습니다.
2. 활로가 모두 막히면 잡힙니다
돌에 가로와 세로로 붙은 빈 점을 활로라고 합니다. 대각선은 활로가 아닙니다. 연결된 같은 색 돌은 활로를 공유하며, 상대가 마지막 활로를 메우면 그 돌무리는 판에서 제거됩니다. 잡은 돌의 수는 MariaGO 화면의 사석 수에 반영됩니다.
3. 자기 돌이 바로 잡히는 곳에는 둘 수 없습니다
착수 직후 자기 돌무리의 활로가 하나도 없고 상대 돌도 잡지 못한다면 자충입니다. MariaGO는 확정 전에 이 수를 거절합니다. 반대로 그 수로 상대 돌을 잡아 새 활로가 생기면 합법수입니다.
4. 같은 판을 즉시 반복하는 패는 금지됩니다
돌 하나를 잡고 곧바로 되잡아 직전과 완전히 같은 판을 만드는 상황을 패라고 합니다. 다른 곳에 한 수를 둔 뒤에는 다시 패를 다툴 수 있습니다. 현재 엔진은 직전 패 좌표를 기억해 즉시 되따는 수를 막습니다.
19×19 좌표를 AI에게 어떻게 가르쳤나
학습 자료의 출발점은 상급자와 프로가 둔 SGF 기보입니다. 한 판을 통째로 외우게 하는 대신 각 수 직전의 판과 실제 다음 수를 짝으로 만듭니다. 승자의 기보를 우선하고, 단수처럼 전술 판단이 필요한 국면을 더 자주 포함하며, 같은 판이 반복되지 않게 중복을 제거합니다.
초기 실험에서는 모델이 판의 오른쪽 아래 좌표만 반복하는 문제가 있었습니다. 학습용 판은 숫자가 붙어 있는 모양이었지만 실제 대국 서버의 공백과 정렬 방식이 달랐고, 두 자리 열 번호가 시작되는 10열 이후를 모델이 잘못 읽었습니다. 이는 “기보가 부족해서”가 아니라 학습과 실행의 입력 형식이 어긋난 문제였습니다.
지금은 행과 열을 00부터 18까지 두 자리로 맞춘 정렬 격자를 학습과 실전에 똑같이 사용합니다. 본 학습 전에 임의의 돌 위치를 모델이 찾아내는 좌표 시험을 수행하고, 좌상·우상·좌하·우하 네 사분면의 정확도를 따로 봅니다. 전체 평균이 좋아도 한쪽 귀에서만 무너지면 실제 대국에서는 방향 편향이 되기 때문입니다.
| 입력 | 00–18 행·열이 정렬된 19×19 판과 현재 대국 조건 |
|---|---|
| 정답 | 실제 기보에서 선택된 다음 착수 좌표 또는 패스 |
| 학습 | 기반 모델에 LoRA 방식으로 바둑 수 선택 패턴을 추가 학습 |
| 검증 | 좌표 인식, 합법수, 방향 편향, 조기 패스와 자기 집 메우기를 관찰 |
그래서 MariaGO의 AI는 완성된 정답 기계가 아닙니다. 기보의 선택을 학습했지만 낯선 국면에서는 나쁜 수나 불법 좌표를 낼 수 있습니다. 이 실패를 대국 로그로 남겨 다음 데이터 구성과 규칙 검증을 고치는 것이 프로젝트의 중요한 부분입니다.
시간 제한 없이 안전하게 착수합니다
작은 스마트폰 화면에서 잘못 누른 한 수가 확정되지 않도록 두 단계 착수를 사용합니다. 빈 교차점을 한 번 누르면 금색 예비 수가 표시됩니다. 같은 점을 다시 누르거나 화면의 ‘착수’ 버튼을 눌러야 서버에 저장되고 AI의 차례로 넘어갑니다. 다른 점을 누르면 예비 수만 바뀝니다.
사람의 차례에는 초읽기나 제한 시간이 없습니다. 화면을 오래 열어 두어도 시간 때문에 자동 패스하지 않습니다. 다만 AI가 수를 계산하는 동안에는 중복 요청을 막기 위해 입력이 잠시 대기하며, 네트워크 상태에 따라 응답 시간이 달라질 수 있습니다.
급히 둘 필요가 없습니다. 수를 선택하고 표시된 위치를 확인한 다음 확정하세요. 자충과 패처럼 규칙상 둘 수 없는 수는 확정 단계에서 안내합니다.
기보는 단순한 기록보다 넓게 쓰입니다
착수할 때마다 판, 다음 차례, 잡은 돌, 패 좌표와 전체 수순이 서버에 저장됩니다. 같은 브라우저로 돌아오면 가장 최근 진행 중인 판을 불러오며, 기보 화면에서 이전 대국 목록을 시간과 수순 수로 확인할 수 있습니다.
대국 중 앞 화살표와 뒤 화살표를 이용하면 현재 수를 바꾸지 않고 과거 국면을 복기할 수 있습니다. 마지막 수로 돌아가면 원래 대국을 계속합니다. 과거 수를 보고 있는 상태에서 ‘이어두기’를 선택하면 그 뒤 수순을 버리고 해당 국면부터 새로운 변화도를 시작합니다. 실전의 복기와 가상 변화를 한 화면에서 연결한 기능입니다.
대국 코드나 공유 링크로 다른 기기에서 이어 두는 기능은 없습니다. 진행 중인 판과 기보 목록은 이 브라우저에 저장된 식별자를 기준으로만 불러옵니다. 브라우저가 달라지거나 시크릿(프라이빗) 모드를 쓰면 기보를 읽어 오지 못할 수 있습니다. 브라우저 데이터를 지운 경우에도 이전 대국을 다시 열지 못합니다.
자동 계가가 계산하는 것과 놓치는 것
MariaGO는 양쪽이 연속으로 패스하거나 사용자가 ‘계가’를 누르면 한국식 계목에 가까운 참고 점수를 계산합니다. 빈 영역을 탐색해 경계가 흑돌로만 둘러싸였으면 흑집, 백돌로만 둘러싸였으면 백집으로 봅니다. 여기에 대국 중 잡은 상대 돌을 더하고 백에는 덤 6.5집을 더해 차이를 표시합니다.
어려운 부분은 빈 점을 세는 계산이 아니라 판 위의 죽은 돌을 알아내는 일입니다. 사람은 두 눈이 없는 돌무리나 잡힐 수밖에 없는 돌을 죽었다고 합의한 뒤 들어내지만, 현재 자동 계가는 사활을 완전히 판정하지 않습니다. 죽은 돌이 판 위에 남아 있으면 그 주변 영역의 경계가 섞여 집으로 인정되지 않거나 실제 결과와 다른 값이 나올 수 있습니다.
따라서 중간 계가는 형세를 대략 살피는 도구이고, 종국 결과도 공식 심판 판정으로 보아서는 안 됩니다. 특히 아직 큰 끝내기가 남았거나 서로의 돌이 한 영역 안에 섞여 있으면 계산되지 않은 중립점이 많아집니다. 이 경우 수치보다 판을 직접 확인하는 것이 우선입니다.
계가 결과를 읽는 법
흑 점수 = 둘러싼 흑집 + 잡은 백돌. 백 점수 = 둘러싼 백집 + 잡은 흑돌 + 덤 6.5집입니다. 사활 자동판정은 아직 지원하지 않으므로 죽은 돌이 남은 종국에서는 참고값으로만 사용하세요.
대국을 시작하기 전에
- 현재 웹 대국은 19×19 판이며 사람은 흑, AI는 백을 맡습니다.
- 빈 점을 한 번 누른 뒤 예비 수를 확인하고 다시 눌러 확정합니다.
- 사람의 착수에는 시간 제한이 없고, 수순은 착수할 때마다 저장됩니다.
- 같은 브라우저로 재접속하면 최근 진행 판을 이어 갈 수 있습니다. 브라우저가 바뀌거나 시크릿 모드에서는 기보를 불러오지 못할 수 있습니다.
- 자동 계가는 사활을 완전히 판정하지 않는 참고 기능입니다.