관리 메뉴

데이터 과학

CNN을 이용한 미니알파고 본문

인공지능/딥러닝 -파이썬 인공지능

CNN을 이용한 미니알파고

티에스윤 2026. 5. 27. 18:58

이번에는 합성곱 신경망을 활용한 알파고 프로그램을 제작해 보겠습니다. 

바둑 프로그램 전체를 제작하는 것은 환경적으로 어려움이 있으니 미니 알파고 프로그램을 제작해 보겠습니다. 

 

 

 

CNN → 다음 착수 확률을 예측하는 모델부터 시작하세요.

추천 개발 단계

1단계: 바둑판 표현

19×19은 어렵기 때문에 처음에는 9×9 바둑 추천합니다.

입력 데이터는 보통 이렇게 만듭니다.

 
board_state.shape = (채널수, 9, 9)
 

예:

채널 1: 내 돌 위치
채널 2: 상대 돌 위치
채널 3: 빈 칸
채널 4: 패 여부 / 착수 금지 위치
 

2단계: CNN 정책망 만들기

처음 목표는 “이 상황에서 어디에 둘까?”를 예측하는 것입니다.

 
import torch
import torch.nn as nn
import torch.nn.functional as F

class PolicyNet(nn.Module):
    def __init__(self, board_size=9):
        super().__init__()
        self.conv1 = nn.Conv2d(4, 64, kernel_size=3, padding=1)
        self.conv2 = nn.Conv2d(64, 128, kernel_size=3, padding=1)
        self.conv3 = nn.Conv2d(128, 128, kernel_size=3, padding=1)
        self.head = nn.Conv2d(128, 1, kernel_size=1)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        x = F.relu(self.conv3(x))
        x = self.head(x)
        x = x.view(x.size(0), -1)
        return F.log_softmax(x, dim=1)
 

출력은 9×9 = 81칸 중 어디에 둘지에 대한 확률입니다.


3단계: 학습 데이터 준비

가장 쉬운 방법은 기보 데이터를 사용하는 것입니다.

입력:

현재 바둑판 상태
 

정답:

실제 사람이 둔 위치
 

즉, CNN이 사람의 착수를 따라 하도록 학습합니다.


4단계: 합법수 처리

CNN이 이미 돌이 있는 곳에 두려고 할 수 있으므로, 착수 가능한 곳만 남기고 나머지는 확률을 제거해야 합니다.

 
policy[illegal_moves] = -float("inf")
move = torch.argmax(policy)
 

5단계: 몬테카를로 트리 탐색 MCTS 추가

CNN만 쓰면 “그럴듯한 수”는 두지만 깊은 계산은 약합니다.
그래서 다음 단계로는 CNN + MCTS 구조가 좋습니다.

구조는 이렇게 갑니다.

현재 바둑판
→ CNN이 좋은 후보 수 제안
→ MCTS가 몇 수 앞까지 탐색
→ 최종 착수 선택
 

프로그램 코드 입력중

'인공지능 > 딥러닝 -파이썬 인공지능' 카테고리의 다른 글

ReLU (Rectified Linear Unit) 함수  (0) 2025.10.26
하이퍼볼릭 탄젠트 함수  (0) 2025.10.22
RNN  (0) 2025.10.22
마르코프 모델과 벨만 방정식  (0) 2025.10.22
CNN, MNIST 코드 분석  (0) 2025.09.10