알고리즘 작동 방식
My Chess Bot이 수를 선택하는 방법
전체 파이프라인
체스판 (FEN / 보드 상태)
↓
18 × 8 × 8 텐서 인코딩
↓
CNN 가치 신경망 (2.3M 파라미터)
Conv(64) → Conv(128) → Conv(128) → FC
↓
포지션 점수 [−1, +1]
↓
Negamax 탐색 (2-ply)
↓
최선의 수 선택
1. 포지션 인코딩
체스판은 18 × 8 × 8 텐서로 변환됩니다. 각 채널은 기물 종류(6종 × 2색 = 12채널), 차례, 캐슬링 권리, 앙파상 정보 등을 담습니다.
2. 가치 신경망 (Value Network)
인코딩된 포지션은 합성곱 신경망(CNN)에 입력됩니다. 3개의 Conv 블록(채널 64 → 128 → 128)을 거친 뒤 완전연결 층을 통과하여, 현재 포지션의 유불리를 -1 ~ +1 값으로 출력합니다.
- +1에 가까울수록 백(White)에게 유리
- -1에 가까울수록 흑(Black)에게 유리
- 파라미터 수: 약 2.3M
3. Negamax 탐색
현재 둘 수 있는 모든 합법 수에 대해, 그 수를 둔 뒤의 포지션을 Negamax 알고리즘으로 2수(2-ply) 앞까지 탐색합니다. 각 포지션의 평가는 가치 신경망이 담당하며, 최종적으로 가장 유리한 결과로 이어지는 수를 선택합니다.
예시: 봇이 수를 고르는 과정
- 현재 보드 상태를
18 × 8 × 8 텐서로 변환
- 현재 위치에서 둘 수 있는 합법 수를 모두 생성 (예: 30개)
- 각 수를 뒀을 때의 포지션을 탐색 — 상대방 응수까지 고려 (2-ply)
- 각 리프 포지션을 가치 신경망이 평가 → 점수 반환
- Negamax 방식으로 각 수의 최종 점수 집계
- 가장 높은 점수의 수를 선택해 이동
4. 학습 방법
이 봇의 핵심은 "포지션을 보고 누가 얼마나 유리한지" 판단하는 가치 신경망입니다.
- Lichess 공개 게임에서 5,600만 개 이상의 포지션을 추출
- 각 포지션을 체스 엔진 Stockfish(depth=6)로 평가
- 그 평가값을 정답 레이블로 사용해 신경망을 학습
- 평가값은
tanh(centipawn / 400)으로 정규화
즉, 강력한 엔진의 형세 판단을 신경망이 모방하도록 학습한 방식입니다.
성능 지표
| 항목 | 내용 |
| 학습 포지션 수 | 약 56,450,000개 |
| 검증 손실 (MSE) | 약 0.042 (Stockfish depth=6 정규화 기준) |
| 평균 추론 시간 | 약 1초 이내 / 수 (CPU 기준) |
| 공식 Elo 벤치마크 | 현재 측정 준비 중 |
알려진 한계
- 탐색 깊이가 2수로 얕아 깊은 전술 콤비네이션을 놓칠 수 있습니다
- 가치망 규모가 작아 Stockfish 수준의 정확도에는 미치지 못합니다
- 오프닝 이론, 복잡한 엔드게임에서 비효율적인 수를 둘 수 있습니다
- 체크메이트 시퀀스 인식은 탐색 깊이에 의존합니다
→ 학습 데이터셋 자세히 보기