반응형

원래 유전(진화) 알고리즘을 써서 AI를 만들어보고자 하였지만,

세대를 거듭한다고 해서 테스트 점수가 우상향하지 않는 것 같아서,

일단 지도학습을 통해 다시 시도해 보고 있다.

 

https://truemaxdh.github.io/2048-AI/

 

https://truemaxdh.github.io/2048-AI/

Training Evolution Algorithm Guided Training Verify Verify Results TestModel

truemaxdh.github.io

위 사이트 메뉴 중에서,

[Evolution Algorithm]은 일단 보류중이고,

[Guided Training]이 현재 활성화된 상태이다.

[Verify Results]는 나중에 구현할 계획이며,

[Test Model]은 [Guided Training]의 결과로 생성된 모델을 불러와서 테스트해 볼 수 있다.

 

지도학습 방법을 구현하면서,

먼저 시도했던 유전(진화) 알고리즘이 잘 안되던 이유도 몇가지 알게 되었고,

시행착오를 통해 배우게 된 것들도 있다.

  • 입력값, 출력값, 가중치의 초기값 설정 문제
    • 포화(saturation) 발생 방지를 위해, 적절한 범위의 값을 사용해야 함.
    • 타리크 라시드의 [신경망 첫걸음]이라는 책에 의하면, 가중치의 초기값은 다음 범위가 적절
      • 노드로 오는 연결노드의 갯수에 루트를 씌운 값의 역수
    • ReLU의 경우에는, x<0인 경우 f(x)=0이고, 이를 미분하면 기울기가 0이므로, 역전파에 의한 가중치 업데이트가 이루어지지 않아서 문제가 될 수 있다.
      • 이 문제의 해결을 위해 몇가지 방법이 있겠지만, 그중 한가지는 가중치의 초기값을 모두 양의 실수로 초기화하는 방법이 있다.
    • 입력값의 전처리도 중요하다. 이번 경우에는 입력값의 범위를 0.01 ~ 0.99로 조절하였다.
      • 입력 배열(4*4=16)의 수치를 0은0, 0보다 크면 2의 로그값으로 바꾸고,
      • 최대값을 구한 다음,
      • 각 요소를 최대값으로 나누어 주되, 0은 0.01로, 1은 0.99로 변환
    • 출력 노드는 Left, Up, Right, Down의 4개이며, 실제 움직인 방향의 출력값은 1로, 나머지 방향은 0으로 학습시킨다.

위의 원칙들을 적용해서 테스트중이다.

이렇게 해서 지도학습이 잘 진행된다면,

유전(진화) 알고리즘에도 위의 내용들을 적용해서 다시 시도해 보려 한다.

반응형

'머신러닝&인공지능' 카테고리의 다른 글

2048을 Play하는 AI 개발 - 2  (0) 2019.12.01
2048을 Play하는 AI 개발  (0) 2019.11.18
2048과 딥러닝  (0) 2016.08.13
ConvNetJS를 이용한 XOR 분류 테스트  (0) 2016.07.20
언어별 딥러닝 라이브러리  (0) 2016.07.15

+ Recent posts