알고리즘 작동 방식

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 값으로 출력합니다.

3. Negamax 탐색

현재 둘 수 있는 모든 합법 수에 대해, 그 수를 둔 뒤의 포지션을 Negamax 알고리즘으로 2수(2-ply) 앞까지 탐색합니다. 각 포지션의 평가는 가치 신경망이 담당하며, 최종적으로 가장 유리한 결과로 이어지는 수를 선택합니다.

예시: 봇이 수를 고르는 과정

  1. 현재 보드 상태를 18 × 8 × 8 텐서로 변환
  2. 현재 위치에서 둘 수 있는 합법 수를 모두 생성 (예: 30개)
  3. 각 수를 뒀을 때의 포지션을 탐색 — 상대방 응수까지 고려 (2-ply)
  4. 각 리프 포지션을 가치 신경망이 평가 → 점수 반환
  5. Negamax 방식으로 각 수의 최종 점수 집계
  6. 가장 높은 점수의 수를 선택해 이동

4. 학습 방법 (Regression + Adam)

이 봇의 핵심은 "포지션을 보고 누가 얼마나 유리한지" 판단하는 가치 신경망입니다. 학습 목표값(레이블)을 연속 스칼라로 설정한 회귀(Regression) 문제로 접근했습니다.

5. 최적화 설정

항목설정값역할
옵티마이저Adam (lr=3×10⁻⁴, weight_decay=1×10⁻⁴)1·2차 모멘트로 파라미터 업데이트
미니배치 크기2,048OOM 방지 + 안정적 기울기 추정
그래디언트 클리핑max_norm=1.0폭발적 기울기 억제 (전체 스텝의 68.2% 발동)
LR 스케줄러ReduceLROnPlateau (factor=0.5, patience=3)검증 손실 정체 시 학습률 절반 감소, 총 5회 적용
총 에폭50

성능 지표

항목내용
학습 포지션 수약 60,660,000개
초기 검증 손실 (epoch 1)0.0747
최종 검증 손실 (epoch 50)0.0437
평균 추론 시간약 1초 이내 / 수 (CPU 기준)
공식 Elo 벤치마크현재 측정 준비 중

알려진 한계

→ 학습 데이터셋 자세히 보기