반응형
원래 유전(진화) 알고리즘을 써서 AI를 만들어보고자 하였지만,
세대를 거듭한다고 해서 테스트 점수가 우상향하지 않는 것 같아서,
일단 지도학습을 통해 다시 시도해 보고 있다.
https://truemaxdh.github.io/2048-AI/
위 사이트 메뉴 중에서,
[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 |