720만 손을 딥 러닝으로 학습한 오셀로 AI를 Chainer로 만들어 보았다

조금 전의 뉴스가 되어 버립니다만, AlphaGo가 세계 챔피언에게 3연승한 것은 대단하네요. 그것에 영감을 받아 이번에는 같은 보드 게임 오셀로의 AI를 만들어 보았습니다.

왜 오셀로로 만들었는지, 컴퓨터 리소스가 부족하다! ! 부터입니다. AlphaGo의 개발에서는 50GPU로 3주간이라고 하는 엄청난 일을 하고 있습니다만, 그런 개인에서는 절대 불가능합니다. 그래서 바둑판이 작고 규칙도 간단한 오셀로를 선택했습니다.

AlphaGo를 화제에 들었습니다만, AlphaGo와는 사용하고 있는 기술이 다릅니다. AlphaGo는 교사 있어 심층 학습과 심층 강화 학습과 몬테카를로 나무 탐색의 3가지를 조합하고 있습니다만, 이번은 교사 있어 심층 학습만을 사용하고 있습니다. 성능은 나오지 않지만, 반대로, 알고리즘이 매우 간단하기 때문에, 지금 들은 후반의 2개를 모르는 분이라도(나도 심층 강화 학습은 알겠습니다만 몬테카를로 나무 탐색은 잘 모릅니다), 심층 학습 의 지식만으로 이해할 수 버립니다! 다음의 설명에서는 심층 학습에 관한 어느 정도의 이해(제로로부터 만드는 딥 러닝을 읽은 적이 있을 정도=나)가 있다고 합니다.

개요



오셀로의 악보 데이터로는 프랑스 오셀로 협회 사이트의 데이터를 사용했습니다. WTHOR라는 수수께끼의 포맷을 사용하고 있었으므로 데이터의 가공이 상당히 힘들었습니다.

신경망은 입력 데이터에 악보 상태(0:없음,1:자신의 돌,2:상대의 돌)를 출력 데이터에 각 손을 칠 확률을 사용했습니다. 교사 데이터에는 자신이 친 손의 위치를 ​​사용했습니다. 말뿐이라고 이해하기 어렵다고 생각하므로, 그림을 나타냅니다.



신경망의 구조



AlphaGo와 마찬가지로 컨벌루션 레이어만 사용했으며, 전체 커플링 레이어는 사용하지 않았습니다. 출력이 2차원 데이터이므로 CNN 그대로가 좋다고 생각되기 때문입니다. 출력층에는 Softmax를 사용해, 다른 층에서는 Conv->BN->ReLU로 했습니다. Batch Normalization(BN)을 도입하면 학습이 안정되므로 추천입니다.

신경망 학습



손실 함수는 전통적으로 교차 엔트로피 오차를 사용했습니다.
최적화 알고리즘에는 Adam을 사용했습니다. SGD에 비해 학습이 빨리 진행되고 최종 결과도 양호합니다.

소스 코드



기다리지 않는 소스 코드는 github에게 주고 있습니다.
세세한 파라미터 등은 소스 코드를 봐 주세요.

학습 결과



AI의 성능은 ...
규칙은 대체로 이해한 것 같습니다만, 불행히도 그다지 강하지는 않았습니다.
원인은 아마 교사 있어 심층 학습만을 이용한 것일 것입니다.

그러나, 시간의 편의상 CPU만의 PC로 2시간 반 정도밖에 학습하고 있지 않기 때문에, 아직 강해질 가능성도 있습니다.

그렇다고 해서, GPU를 가지고 있는 사람 구한다!

GPU로 하루 정도 학습하면 강해질지도?

좋은 웹페이지 즐겨찾기