MCTS 구현
Opened this issue · 3 comments
https://colab.research.google.com/drive/1ToDfYzIjs_5EpMRKWfvHUhohTsaE7Iw-?usp=sharing
Self-Play로 학습 가능하도록 뉴럴넷/tree search 구현중
어느 정도 완료되면 코드에 병합할 예정
Todos
- 기존 Rule과 모델이 요구하는 Rule을 통합할 Class 생성
- Dirichlet noise, temperature, c_puct 부여
- 코드 내의 canonical board state와 string representation of board state 구분
지금까지 구현한 점
MCTS: Neural net이 주어지고, Game Rule을 모두 알고 있다면, search를 num_MCTS번 할 시 policy(pi)를 구할 수 있다.
MCTS에는 내부적으로 N, P, W, Q, V, E가 있다.
N: 방문수
P: 방문 확률 (Neural net output)
W: sum of values of child
Q: value (W / N)
E: isGameEnded. 1이면 플레이어 win, -1이면 플레이어 lose, 1e-4이면 draw, 0이면 게임 진행중
모든 type은 np.array (E 제외)
pi = N(s,a) / sum over a of N(s,a) (10수 전까지)
또는
pi = N(s,a)의 최대값 index만 1이고 나머진 0인 one-hot vector
구현할 점
- Board size를 내가 제어할 수 있도록 수정 ---> BOARD_SIZE라는 변수로 통일, 함수화할 것은 함수화.
- 논문에 Neural Net에 플레이어 색도 인풋으로 들어가던데, 이걸 어떻게 처리했는지. (아마 constant를 15*15 판으로 확장한 듯하긴 한데, 정확히 알아보기.)
- Neural Net 학습까지 시키는 로직 짜기.
- 모델이 쓰는 Rule과 기존 Github에 있는 Rule을 연결하기.
- 어떤 요소가 np.array이고 어떤 요소가 list인지 확실히 하기. array이면 type도 확실히 구분하기.
- Model을 eval과 train시에 각각 다른 output을 출력하도록 하기.
-
Board size를 내가 제어할 수 있도록 수정 ---> BOARD_SIZE라는 변수로 통일, 함수화할 것은 함수화.
논문에 Neural Net에 플레이어 색도 인풋으로 들어가던데, 이걸 어떻게 처리했는지. (아마 constant를 15*15 판으로 확장한 듯하긴 한데, 정확히 알아보기.)
-> Done -
Neural Net 학습까지 시키는 로직 짜기.
-> Done -
모델이 쓰는 Rule과 기존 Github에 있는 Rule을 연결하기.
-> 나중에. -
어떤 요소가 np.array이고 어떤 요소가 list인지 확실히 하기. array이면 type도 확실히 구분하기.
-> Done
MCTS 내부 변수는 모두 np.array (dtype=np.float32)
Rule이 return/받는 값은 모두 python scalar or np array. (모델 관점의 Rule) -
Model을 eval과 train시에 각각 다른 output을 출력하도록 하기.
-> Done
Model의 출력값을 eval/train 나눌 필요 없이, eval과 train의 루프에서 다르게 처리하면 됨.
eval에서는 train된 output을 detach하고 스칼라/np array로 변환하면 되고, train에서는 loss를 따로 계산해서 backward시킴