모델에게는 아직 기억력이 없습니다
모델은 매 수마다 그 순간의 판만 보고 답합니다. 몇 수 전에 어떤 돌이 잡혔는지, 어디서 패가 났는지, 처음에 정한 규칙이 무엇인지 기억하지 못합니다. 그래서 이미 돌이 있는 자리나 자충, 방금 따낸 패를 바로 되따는 수를 내놓기도 합니다.
지금은 웹의 규칙 엔진이 그 빈자리를 메웁니다. 모델이 고른 좌표가 규칙에 어긋나면 거절 목록에 넣어 다시 묻고, 그래도 합법수가 나오지 않으면 오류를 그대로 보여 줍니다. 임의의 수로 몰래 바꾸지 않습니다.
대국의 모든 수는 서버에 기록됩니다. 하지만 모델은 그 기록을 읽고 두지 않습니다. 공책에 적어 둔 것과 머릿속에 기억하는 것은 다릅니다.
그렇다고 기억력을 모델 하나에 맡길 생각은 없습니다. RAG와 LLM만으로는 이런 문제를 풀지 못한다는 연구도 심심치 않게 나옵니다. 그래서 여러 엔진에 역할을 나눠 기억력을 만들려고 합니다.
- 패 직후 되따기, 자충처럼 절대 안 되는 수는 규칙 엔진이 막습니다. 프롬프트에 적어 두어도 모델은 무시할 수 있습니다. 이 부분은 지금도 동작합니다.
- 축, 공배, 두 집이 날 수 있는 모양처럼 판과 수순으로 다시 계산할 수 있는 것은 분석 엔진이 매 수마다 새로 계산합니다. 기억해 두면 판이 바뀐 뒤에도 낡은 정보가 남습니다.
- 처음 정한 규칙, 진행 중인 계획, 앞서 저지른 실수처럼 판에 보이지 않는 것만 사건으로 기록합니다. 사건마다 생긴 수와 사라질 때를 정해 두고, 질문 직전에 지금 판과 관련 있는 것만 골라 프롬프트에 넣습니다.
- 학습 데이터에도 같은 메모를 붙입니다. 메모가 붙은 판을 본 적 없는 모델은 대국 중에 메모를 받아도 제대로 쓰지 못합니다.
이 구조를 완성하는 것이 MariaGO가 풀어야 할 숙제입니다.
MariaGO 바둑의 핵심
19×19 정규 바둑판 · 사람 흑 / AI 백 · 착수 시간 제한 없음 · 매 수 자동 저장 · 기보 앞뒤 보기 · 특정 수부터 이어두기 · 수동/쌍패스 계가를 지원합니다.
축과 호구를 더 안전하게 판단합니다
2026년 9월 28일, AI가 전술적으로 손해인 수를 그대로 선택하는 두 가지 경우를 보완했습니다. 모델이 제안한 좌표를 바둑판의 돌과 활로로 다시 확인한 뒤, 축에 걸린 돌의 헛도망이나 바로 잡힐 호구 진입이면 다른 합법수를 찾습니다.
축: 헛도망과 성급한 패스를 피합니다
단수인 돌이 한 칸 도망쳐도 상대의 연속 단수에 몰려 결국 잡히는지 수순을 따라가며 판독합니다. 축머리가 없어 빠져나올 수 없는 경우에는 그 도망 수를 후보에서 제외합니다. 둘 곳이 있는데도 축을 피하려고 패스하던 경우도 막아, 판 위의 다른 합법수를 선택하도록 수정했습니다.
호구: 들어갈 때와 메울 때를 구분합니다
상대 돌 세 방향에 둘러싸여 착수 직후 단수가 되는 호구에는 들어가지 않습니다. 자기 돌이 만든 호구도 특별한 이유 없이 메우는 수는 피합니다. 다만 그 수로 상대 돌을 잡을 수 있거나 주변 자기 돌의 활로가 부족한 경우에는 필요한 전술일 수 있으므로 정상 후보로 남깁니다.
현재 적용 범위
이 수정은 AI의 최종 수 선택 단계에 적용됩니다. 모든 축·사활을 완벽하게 푸는 범용 수읽기는 아니며, 실제 대국에서 발견되는 예외는 계속 기록해 보완합니다.
2026년 9월 개발 변경 기록
실제 대국에서 발견된 패스, 불법수, 전술 선택 문제와 사용자별 급수 기능을 순서대로 보완했습니다. 아래 내용은 모델 자체의 학습 성능과 별개로, 모델이 낸 답을 검증하고 대국을 운영하는 서버·웹 규칙에 적용된 변경입니다.
진행 중인 판에서 성급하게 패스하지 않도록 수정
빈 곳과 미해결 접전이 충분히 남아 있으면 모델이 패스를 답해도 바로 받아들이지 않고, 긴급한 합법 후보를 다시 평가합니다. 반대로 판이 실제로 정리되어 더 둘 만한 곳이 없는 종국 패스는 허용해 정상적인 쌍패스 종료와 구분합니다.
양단수와 끊김 위험을 후보 평가에 반영
대각선으로만 돌을 이어 상대가 중간을 끊으면 두 무리 중 하나가 단수에 걸리는 형태를 검사합니다. 상대의 다음 한 수로 양단수가 생기는 진출은 감점하고, 약한 돌을 연결하거나 먼저 살리는 수를 우선하도록 했습니다.
패와 채워 따냄을 현재 판 모양으로 구분
한 번 거절된 좌표를 이후 수까지 계속 금지하던 문제를 고쳤습니다. 금지 좌표는 현재 판과 차례에만 적용되며, 돌이 잡혀 판 모양이 달라지면 다시 합법 여부를 계산합니다. 따라서 즉시 되따서 같은 판을 만드는 패는 막되, 한 점을 채워 돌을 잡은 뒤 새로 생긴 자리에 두는 합법수는 허용합니다.
클라이언트 ID별 급수와 전체 전적 저장
로그인하지 않은 사용자도 브라우저의 클라이언트 ID를 기준으로 승·패·무와 전체 대국 수를 저장합니다. 같은 결과가 중복 반영되지 않도록 대국 결과 처리를 트랜잭션으로 묶었습니다.
| 현재 급수 | 승급·강등 기준 |
|---|---|
| 18급–11급 | 승점 +3에서 승급, -3에서 강등 |
| 10급–5급 | 승점 +5에서 승급, -5에서 강등 |
| 4급–1급 | 승점 +10에서 승급, -10에서 강등 |
| 단 | 승점 +15에서 승단, -15에서 강단 |
승급하거나 강등하면 해당 구간의 승점은 0으로 초기화하며, 18급 아래로는 내려가지 않습니다. 무승부는 승점을 바꾸지 않고 전적에만 기록합니다.
평가용 휴리스틱의 중앙 알까기 개선
기존 평가 상대는 따낼 돌이 없으면 중앙과 가까운 후보를 무작위로 골라 돌을 흩뿌리는 경향이 있었습니다. 이를 귀의 3·4선 포석, 따냄, 단수 탈출, 연결, 상대 약한 돌 압박과 자진 단수 회피를 함께 점수화하는 방식으로 교체했습니다. MIX R5와 진행한 초기 3판에서는 모두 R5가 이겼지만, 80수 기준 R5의 평균 포획은 최근 기존 대국 100판의 5.98개에서 3.0개로 줄었습니다.
평가 결과를 읽을 때
휴리스틱 대국은 현재 80수에서 중단해 임시 계가하므로 공식 승률이나 급수로 해석할 수 없습니다. 흑백 교대 완국과 사활 판정이 포함된 장기 평가를 별도로 진행해야 정확한 기력 차이를 알 수 있습니다.
휴리스틱, R5, Gemma 4를 나눠 두고 기록했습니다
2026년 10월 9일에 세 종류의 대국을 남겼습니다. 같은 계가 함수가 수를 고른 판과, 모델이 스스로 둔 판을 구분했습니다. 집수는 사석을 빼지 않은 면적과 KataGo 판정을 같이 적습니다. 면적만 보면 죽은 돌이 집으로 들어가 차이가 왜곡됩니다.
휴리스틱 대 R5, 수 제한 없는 5국
흑은 모니터 휴리스틱, 백은 R5입니다. 다섯 판 모두 양쪽이 패스해서 끝났고, 휴리스틱이 1승 4패입니다. 백 점수에는 덤 6.5가 들어 있습니다.
| 1국 | R5 승 · 흑 61 · 백 95.5 · 336수 |
|---|---|
| 2국 | R5 승 · 흑 60 · 백 68.5 · 344수 |
| 3국 | R5 승 · 흑 53 · 백 73.5 · 318수 |
| 4국 | 휴리스틱 승 · 흑 129 · 백 65.5 · 356수 |
| 5국 | R5 승 · 흑 76 · 백 97.5 · 350수 |
R5의 불법수는 다섯 번이고 전부 패였습니다. 1국에 한 번, 4국에 한 번, 5국에 세 번입니다. 2국과 3국에는 불법수가 없습니다.
Gemma 4 대 R5는 모델끼리의 대국이 아니었습니다
다섯 판 중 정상으로 끝난 것은 2국과 3국입니다. KataGo는 흑이 88.7집, 75.2집 앞선 것으로 봤습니다. 그러나 보드에 올라간 수는 Gemma 4가 803수 중 1번, R5가 796수 중 13번뿐이었습니다. 나머지는 양쪽 서버의 계가 함수가 다시 고른 수입니다. 1국과 5국은 Gemma 4가, 4국은 R5가 패를 세 번 연속 두어 중간에 끊겼습니다. 정상 종료가 두 판뿐이라 이 기보로는 학습하지 않았습니다.
휴리스틱이 둔 수를 Gemma 4에게 가르친 뒤
계가 함수가 실제로 둔 1,476수를 정답으로 Gemma 4를 학습했습니다. 평가에서는 그 함수를 끄고, 모니터 휴리스틱이 흑, Gemma 4가 백으로 수 제한 없이 3국을 두었습니다. 세 판 모두 양쪽 패스였습니다. KataGo 기준으로 흑이 76.2집, 74.0집, 69.7집 앞섰습니다. 면적 계가는 세 판 모두 361 대 6.5였지만, 이는 백 돌을 사석으로 넣은 값입니다.
고른 AI는 그 접속에만 적용됩니다
대국 화면에서 Gemma 4, 로컬 AI, R5 중 하나를 고릅니다. 로컬 AI는 휴리스틱이며 모델 서버를 쓰지 않습니다. 선택은 그 브라우저에 저장되고, 그 접속의 착수 요청만 해당 엔진으로 갑니다. 서버 전체를 한 모델로 바꾸지 않습니다.
휴리스틱도 대국을 장부에 남깁니다
휴리스틱은 신경망이 아닙니다. 상대가 둔 따냄, 단수 구원, 축을 가산점으로 쌓습니다. 위의 3국을 그 장부에 넣었습니다. 가산점은 항목마다 이미 40에서 막혀 있어, 이번 기록만으로 휴리스틱이 고르는 수가 바뀌지는 않았습니다. 휴리스틱이 직접 둔 좋은 수는 R5 쪽 장부로 넘어가, 따냄이 5,326에서 5,784로 늘었습니다. 이어서 Gemma 4를 같은 휴리스틱 수로 다시 학습하고, 끝나면 수 제한 없는 5국을 둡니다. 그 5국도 한 판이 끝날 때마다 같은 장부에 더합니다.
19×19 좌표를 AI에게 어떻게 가르쳤나
학습 자료의 출발점은 상급자와 프로가 둔 SGF 기보입니다. 한 판을 통째로 외우게 하는 대신 각 수 직전의 판과 실제 다음 수를 짝으로 만듭니다. 승자의 기보를 우선하고, 단수처럼 전술 판단이 필요한 국면을 더 자주 포함하며, 같은 판이 반복되지 않게 중복을 제거합니다.
초기 실험에서는 모델이 판의 오른쪽 아래 좌표만 반복하는 문제가 있었습니다. 학습용 판은 숫자가 붙어 있는 모양이었지만 실제 대국 서버의 공백과 정렬 방식이 달랐고, 두 자리 열 번호가 시작되는 10열 이후를 모델이 잘못 읽었습니다. 이는 “기보가 부족해서”가 아니라 학습과 실행의 입력 형식이 어긋난 문제였습니다.
지금은 행과 열을 00부터 18까지 두 자리로 맞춘 정렬 격자를 학습과 실전에 똑같이 사용합니다. 본 학습 전에 임의의 돌 위치를 모델이 찾아내는 좌표 시험을 수행하고, 좌상·우상·좌하·우하 네 사분면의 정확도를 따로 봅니다. 전체 평균이 좋아도 한쪽 귀에서만 무너지면 실제 대국에서는 방향 편향이 되기 때문입니다.
| 입력 | 00–18 행·열이 정렬된 19×19 판과 현재 대국 조건 |
|---|---|
| 정답 | 실제 기보에서 선택된 다음 착수 좌표 또는 패스 |
| 학습 | 기반 모델에 LoRA 방식으로 바둑 수 선택 패턴을 추가 학습 |
| 검증 | 좌표 인식, 합법수, 방향 편향, 조기 패스와 자기 집 메우기를 관찰 |
그래서 MariaGO의 AI는 완성된 정답 기계가 아닙니다. 기보의 선택을 학습했지만 낯선 국면에서는 나쁜 수나 불법 좌표를 낼 수 있습니다. 이 실패를 대국 로그로 남겨 다음 데이터 구성과 규칙 검증을 고치는 것이 프로젝트의 중요한 부분입니다.
시간 제한 없이 안전하게 착수합니다
작은 스마트폰 화면에서 잘못 누른 한 수가 확정되지 않도록 두 단계 착수를 사용합니다. 빈 교차점을 한 번 누르면 금색 예비 수가 표시됩니다. 같은 점을 다시 누르거나 화면의 ‘착수’ 버튼을 눌러야 서버에 저장되고 AI의 차례로 넘어갑니다. 다른 점을 누르면 예비 수만 바뀝니다.
사람의 차례에는 초읽기나 제한 시간이 없습니다. 화면을 오래 열어 두어도 시간 때문에 자동 패스하지 않습니다. 다만 AI가 수를 계산하는 동안에는 중복 요청을 막기 위해 입력이 잠시 대기하며, 네트워크 상태에 따라 응답 시간이 달라질 수 있습니다.
급히 둘 필요가 없습니다. 수를 선택하고 표시된 위치를 확인한 다음 확정하세요. 자충과 패처럼 규칙상 둘 수 없는 수는 확정 단계에서 안내합니다.
기보는 단순한 기록보다 넓게 쓰입니다
대국을 시작하면 여섯 자리 대국 코드와 접근 키가 만들어집니다. 착수할 때마다 판, 다음 차례, 잡은 돌, 패 좌표와 전체 수순이 서버 데이터베이스에 저장됩니다. 같은 브라우저에서는 별도 검색 없이 가장 최근 진행 중인 판을 불러오며, 기보 화면에서 이전 대국 목록을 시간과 수순 수로 확인할 수 있습니다.
대국 중 앞 화살표와 뒤 화살표를 이용하면 현재 수를 바꾸지 않고 과거 국면을 복기할 수 있습니다. 마지막 수로 돌아가면 원래 대국을 계속합니다. 과거 수를 보고 있는 상태에서 ‘이어두기’를 선택하면 그 뒤 수순을 버리고 해당 국면부터 새로운 변화도를 시작합니다. 실전의 복기와 가상 변화를 한 화면에서 연결한 기능입니다.
저장 정보는 브라우저의 임시 식별자와 접근 키로 보호합니다. 대국 코드만 안다고 다른 사용자의 판을 열 수 없고, 다른 기기에서 이어 두려면 접근 키가 포함된 링크가 필요합니다. 브라우저 저장 데이터를 지우면 기기가 기존 식별자를 잊을 수 있으므로 중요한 진행 판의 링크는 따로 보관하는 편이 안전합니다.
자동 계가가 계산하는 것과 놓치는 것
MariaGO는 양쪽이 연속으로 패스하거나 사용자가 ‘계가’를 누르면 한국식 계목에 가까운 참고 점수를 계산합니다. 빈 영역을 탐색해 경계가 흑돌로만 둘러싸였으면 흑집, 백돌로만 둘러싸였으면 백집으로 봅니다. 여기에 대국 중 잡은 상대 돌을 더하고 백에는 덤 6.5집을 더해 차이를 표시합니다.
어려운 부분은 빈 점을 세는 계산이 아니라 판 위의 죽은 돌을 알아내는 일입니다. 사람은 두 눈이 없는 돌무리나 잡힐 수밖에 없는 돌을 죽었다고 합의한 뒤 들어내지만, 현재 자동 계가는 사활을 완전히 판정하지 않습니다. 죽은 돌이 판 위에 남아 있으면 그 주변 영역의 경계가 섞여 집으로 인정되지 않거나 실제 결과와 다른 값이 나올 수 있습니다.
따라서 중간 계가는 형세를 대략 살피는 도구이고, 종국 결과도 공식 심판 판정으로 보아서는 안 됩니다. 특히 아직 큰 끝내기가 남았거나 서로의 돌이 한 영역 안에 섞여 있으면 계산되지 않은 중립점이 많아집니다. 이 경우 수치보다 판을 직접 확인하는 것이 우선입니다.
계가 결과를 읽는 법
흑 점수 = 둘러싼 흑집 + 잡은 백돌. 백 점수 = 둘러싼 백집 + 잡은 흑돌 + 덤 6.5집입니다. 사활 자동판정은 아직 지원하지 않으므로 죽은 돌이 남은 종국에서는 참고값으로만 사용하세요.
대국을 시작하기 전에
- 현재 웹 대국은 19×19 판이며 사람은 흑, AI는 백을 맡습니다.
- 빈 점을 한 번 누른 뒤 예비 수를 확인하고 다시 눌러 확정합니다.
- 사람의 착수에는 시간 제한이 없고, 수순은 착수할 때마다 저장됩니다.
- 같은 브라우저로 재접속하면 최근 진행 판을 자동으로 이어 갈 수 있습니다.
- 자동 계가는 사활을 완전히 판정하지 않는 참고 기능입니다.