【쇼기 AI】「쇼기 AI에서 배우는 딥 러닝」을 읽는다♪~강한 방책 네트워크를 목표로 한다


제일 하룻밤도 본서에서 벗어나지만 어젯밤의 연장으로 VGG 모델을 이용해 강한 방책 네트워크를 목표로 한다.

했던 일



(1) VGG 모델을 이용한다
(2) LesserKai vs Policy vs VGG_Policy의 총당전
(3) 추가 추구

(1) VGG 모델을 이용한다



거의 전회의 Cifar10의 모델로부터 상상할 수 있다고 생각합니다만, 모델은 이하와 같습니다.
from chainer import Chain
import chainer.functions as F
import chainer.links as L
from pydlshogi.common import *
ch=192
class PolicyNetwork(Chain):

    def __init__(self):
        super(PolicyNetwork, self).__init__()
        with self.init_scope():
            self.conv1_1 = L.Convolution2D(104, ch, 3, pad=1)
            self.conv1_2 = L.Convolution2D(ch, ch, 3, pad=1)
            self.conv2_1 = L.Convolution2D(ch, ch*2, 3, pad=1)
            self.conv2_2 = L.Convolution2D(ch*2, ch*2, 3, pad=1)
            self.conv3_1 = L.Convolution2D(ch*2, ch*4, 3, pad=1)
            self.conv3_2 = L.Convolution2D(ch*4, ch*4, 3, pad=1)
            self.conv3_3 = L.Convolution2D(ch*4, ch*4, 3, pad=1)
            self.conv3_4 = L.Convolution2D(ch*4, ch*4, 3, pad=1)
            self.l13=L.Convolution2D(in_channels = ch*4, out_channels = MOVE_DIRECTION_LABEL_NUM, ksize = 1, nobias = True)
            self.l13_bias=L.Bias(shape=(9*9*MOVE_DIRECTION_LABEL_NUM))
    def __call__(self, x):
        h = F.relu(self.conv1_1(x))
        h = F.relu(self.conv1_2(h))
        #h = F.max_pooling_2d(h, 2, 2)
        #h = F.dropout(h, ratio=0.25)
        h = F.relu(self.conv2_1(h))
        h = F.relu(self.conv2_2(h))
        #h = F.max_pooling_2d(h, 2, 2)
        #h = F.dropout(h, ratio=0.25)
        h = F.relu(self.conv3_1(h))
        h = F.relu(self.conv3_2(h))
        h = F.relu(self.conv3_3(h))
        h = F.relu(self.conv3_4(h))
        #h = F.max_pooling_2d(h, 2, 2)
        #h = F.dropout(h, ratio=0.25)
        h13 = self.l13(h)
        return self.l13_bias(F.reshape(h13, (-1, 9*9*MOVE_DIRECTION_LABEL_NUM)))

학습시는 Dropout을 살려두고, 추론시는 코멘트 아웃합니다.
또한 Maxpooling은 아무 매개 변수도 조정할 수 없기 때문에 제거했습니다.
즉, 순수하게는 VGGLike 모델과도 다릅니다.
그러나 만약 Maxpooling을 살리면, 이번 채널마다의 화상 사이즈가 9x9이므로, 4x4, 2x2가 되어 3회로 1x1이 되어 버립니다.
그리고 장기의 경우 그것으로 좋을까라는 문제도 있습니다.

중간층의 채널은 여기에서는 192로 하고 있습니다만, 이 이외에 32,128등을 실시했습니다. 그러나, 그들은 역시 접대 장기의 행동으로 지는 것처럼 치는 장기가 되어 버렸습니다.

(2) LesserKai vs Policy vs VGG_Policy의 총당전



이번은 방책 네트워크로서 어디까지 강하게 할 수 있을까 도전입니다.
그래서 LesserKai와 Policy와 대전해 보았다.
결과는 다음과 같습니다.

종합 포인트에서는 어떻게든 이번 모델이 제일이 되었습니다. 여기에서 사용한 파라미터는 epoch7이며, 아직 학습 도중의 것입니다.
그리고 실은 내용으로 Policy에는 4-0-0으로 완승했지만 LesserKai에는 1-0-3으로 지고 있습니다.
하지만 다시 LesserKai와 대전하면 완승했습니다.



이름
loss
일치율(방책)
일치율(가치)
비고


policy
1.682677
0.4226734
-
정책 네트워크 전용

policy_VGG192
1.9452
0.41795877
-
정책 네트워크 전용 epoch7


(3) 추가 추구



그리고 MCTS와의 대전을 해 보았습니다. MCTS가 충분히 사고할 수 있도록 가지고 시간 종료 후도 30초 사고할 수 있도록 해 대전했습니다.
그 결과, 일단 2-1-7로 져 버렸습니다만, 2번은 이기고 있습니다. 아직 학습 도중이므로 앞으로 강해질 것으로 보입니다.


다만, 이 노선도 파라미터가 76.565MB로 크게 더 이상 층을 깊게 하는 것은 한계가 가까운 것 같습니다. 또, 학습시의 계산 시간도 81m10s/epoch 걸려 있어, 1080에서는 이제 한계가 가까운 모양입니다.
그리고 이번 결과는 역시 모듈레이션이 있는 편이 보다 강할 가능성이 있고, WideResnet 등을 제대로 추구하는 것도 한 방향일 것이라고 생각하고 있습니다.

요약



・VGGLike인 모델로 학습시킨 모델은 방책 네트워크로 강해졌다

· 더욱 강한 장기 AI의 가능성이 있다

좋은 웹페이지 즐겨찾기