heatz123/Reinforcement-Learning-Gomoku

MCTS 구현

Opened this issue · 3 comments

https://colab.research.google.com/drive/1ToDfYzIjs_5EpMRKWfvHUhohTsaE7Iw-?usp=sharing

Self-Play로 학습 가능하도록 뉴럴넷/tree search 구현중
어느 정도 완료되면 코드에 병합할 예정

Todos

  1. 기존 Rule과 모델이 요구하는 Rule을 통합할 Class 생성
  2. Dirichlet noise, temperature, c_puct 부여
  3. 코드 내의 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시킴