안녕하세요. 호랑인 입니다.




지난 3일 동안 제 AI가 일을 하지 않아 밤낮으로 이 문제에 매달렸었습니다. 본래 즐기려던 목적에서 조금 벗어난 것 같기도 하지만, 나름의 오기가 생겨서 계속 달라 붙어있었던 것 같습니다.


결론적으로 말씀드리자면, 유전 알고리즘을 사용하는 것을 포기하고 하드코딩으로 가는 것이 합당하다 생각이 됩니다. 아래에는 현재의 상황과 방금 전 주장의 근거를 조금 설명드리겠습니다.




1. 어떤 상태인가요?


문제는 간단합니다. AI는 야찌를 열심히 둡니다. 하지만 야찌를 학습하지 않습니다. Generation이 계속 진행되지만, BestScore, WorstScore, AverageScore의 값이 고정(정확히는 의미없는 난수)되어, 발전하지 않습니다.


사실 BextScore가 오르지 않는 것은 충분히 이해할 수 있는 상황입니다. Gene pool이 충분히 크지 않아 일어나는 일들 중 하나이기도 하기 때문입니다. WorstScore도 마찬가지입니다. 갑자기 주사위 운이 매우 안 좋으면 잘 하다가도 점수가 나오지 않을 수도 있습니다. 하지만 AverageScore가 오르지 않는 것은 그저 이 AI가 발전하고 있지 않다는 말, 그 이상도 그 이하도 아님을 깨닫고 문제점 확인에 착수했습니다.




2. 뭐가 문제인가요?


우선, 제 코드 상에 오타가 몇개 발견되었습니다. 실제로 제가 제일 마지막에 학습 데이터를 저장하는 코드 한 줄을 안 넣었어서, 저는 이 오류를 고치면서 이제 모든 것이 해결될 것이라 자신했습니다. 하지만 아니더군요.


문제는 야찌 게임의 높은 차원에 있다고 결론지었습니다. 사실 완전히 예상치 못한 상황은 아니었습니다만 (제발 빗나갔으면 했지만요) 본래 야찌란 게임은 1) 확률에 의존하는 게임이고 2) 수학적인 풀이에 직접적인 논리연산이 버젓이 들어나는 경우이기 때문에, 이걸 아무 assist없이 깡으로 유전알고리즘에 넣은 것은 사실 조금 욕심을 부렸다 할 수 있습니다.


하지만 저는 그래도 이게 되기를 마음 한 구석에서 바라고 있었습니다. 저나 다른 친구들보다는 못하더라도, 적어도 성적이 조금씩 높아지는 것만으로 만족하려 했기 때문입니다.


결론은 "안된다." 로 지어졌네요.




3. 왜 안되는 건가요?


앞서 말씀드린데로 입니다.


짧게 말씀드리자면, 게으른 제가 수학적으로 계산해야 하는 부분까지 통째로 유전 알고리즘에 꼴아박았기 때문입니다.


왜 통째로 박으면 안되냐 하면, 차원이 높아지기 때문입니다. 예를 들어, 두 input이 들어오면, 그 둘의 합을 출력하는 프로그램을 만들어야 한다 해 봅시다. 그런데, 이를 유전 알고리즘으로 짜면, 제가 전에 했던 것처럼 hidden layer니, neuron이니, 변수들이 많아집니다. 다른 말로 문제의 차원이 높아진다고 합니다.


차원이 높아지면 왜 안되냐...는 다음 포스트에 적어보도록 하겠습니다.




4. 이제 어떻게 하실 건가요?


우선, 조금 쉬려고 합니다. 며칠 좀 빡새게 돌렸고, 학생이기 때문에 이거 준비도 해야하고요. 그리고 동생들 졸업식도 다녀야 합니다. 그렇다고 해서 몇 주일 단위로 쉴것 같진 않습니다. 우선 당장 내일부터 코딩을 시작하긴 할 것입니다.


프로젝트의 경우는 우선 하드 코딩을 사용해서 다시 코딩할 것입니다. 하지만 방금 전까지 만든 코드가 무용지물이 되는 건 아닙니다. 크게 보면 나중에 다른 프로젝트를 할 때 쓸 수 있고, 작게 보면 이 프로젝트에도 아직은 쓸 곳이 있습니다. 이게 무슨 뜻인지는 나아아아아아중에 말씀드리도록 하겠습니다. 큰 사실 방금전까지 이걸 한건 큰 그림의 일부라 생각하시면 될 것 같습니다.




이 정도로 현재까자의 결과와, 그리고 앞으로의 계획을 말씀드렸습니다. 감사합니다.

+ Recent posts