Silinu's AI Study

[AI 오목] 3.3 강화 학습(Actor Critic) + 오목 본문

Project/AI Gomoku

[AI 오목] 3.3 강화 학습(Actor Critic) + 오목

Silinu 2023. 11. 24. 01:25

환경 : Window, Python 3.9, Jupyter notebook(Anaconda 설치된 상태), GPU 환경

 

현재 진행 중인 학습의 생각 정리를 해보자.

 

1. 시도 방식

목적: 각 오목 상황에 맞게 착수 둘 곳을 self-learning 방식으로 학습하자.

사용 모델: Actor Critic 방식

모델 사용 이유: AlphaGo와 비슷한 방식으로 Policy Network와 Value Network를 학습해보자.

차이점:

  • 몬테카를로 트리 탐색을 사용하지 않음.
  • 오목과 바둑의 룰이 다르므로 불필요하게 생각되는 space는 제거함.
  • reward가 다름.

 

2. 문제점 및 시도

1. Epoch 10000번을 실행했을 때, 이미 돌이 착수 된 곳에 둬서 episode가 끝나는 경우가 9996번 정도이다.

2. Action 값이 NaN 값으로 출력 되어 학습이 불가능해진다.

여기서 생각할 수 있는 가설은 다음과 같다.

  1. 아직 학습이 덜 된 것인가?
    • Epoch를 15000번까지 진행했을 때도 이미 돌이 착수 된 곳에 둔 곳이 14994번 정도이다. 학습이 덜 되었다고 하기에는 나아질 기미가 보이지 않는다.
  2. 모델이 너무 Deep 하게 혹은 얕게 학습되는 것은 아닌가?
    • 모델을 너무 Deep하게 했을 때 Episode값이 10000번도 채 되지 않았는데도 Action 값으로 NaN 값이 발생했다. 그리고 너무 얕게 하면 이미 돌이 착수 된 곳에 두는 횟수가 더 늘어난다.
  3. 이미 돌이 착수 된 곳에 둘 수 없게 하는 방법이 없는가?
    • 그러기 위해서 아래와 같이 실행했다.
      1. Policy Network로 Action 확률 값을 예측한다.(아직 Softmax에 들어가기 전이므로 0과 1사이의 값이 아님)
      2. 예측된 확률 값을 Clamp하여 min값에 제한을 건다.
      3. 돌이 있는 위치를 min 값으로 바꾼 후 softmax에 넣어준다.
    • 위와 같은 방법으로 진행했을 때도 이미 돌이 착수 된 곳에 계속 둬서 끝난다.
  4. 왜 위와 같이 진행했음에도 이미 돌이 착수 된 곳에 자꾸 두는가?
    • 생각해볼 수 있는 가설은 다음과 같다.
      1. 모든 값이 min 값일 것이다.
      2. 현재 진행하는 방식이 잘못되었을 것이다.
    • 현재 위 첫 번째 가설을 확인 후 진행 방식을 어떻게 바꿀 지 고민해야 한다.