알고리즘을 학습할때 – Genetic Algorithm

사실 뭔가를 배울때 동기부여는 시작시 쉽게 지치지 않게 하기 위한 가장 좋은 방법이라 생각한다. 예를들면 전투에서도 지휘관이 전투직전에 병사들이게 독려를 하는것도 마찬가지 이유가 되겠다.


실 ML알고리즘을 학습할때 그 많은 수식과 복잡함에 혀를 내두를 때가 많다. 어떨때는 10년전에 보던 정석책을 뒤적일때도 있고,
논문에 나온 내용보다 훨씬 많은 내용을 가진 수학책을 봐야할때도 부지기수다. 그래서 이런것을 공부하는데 인내심은 필수적이다.
그리고 그 인내심의 발로는 동기부여다.

요즘 Genetic Algorithm을 좀 보고있다. 예전에는 어렴풋이 그냥 최적해를 찾기 위해 이래저래 잡다한 짓을 하는 알고리즘 이겠거니 알고 있었다.

사실 이 알고리즘은 웹 서비스에 적용한 예제를 찾기 힘들다. 그저 regression 함수를 만들기 위한 중간 단계로 사용하는정도… 그정도로 사용하는거 같다.

하지만 웹에서 벗어나면 좀더 재밋는 구현 꺼리를 찾아볼 수 있는데 일년에 한번씩 하는 로보코드(robocode) 선발대회가 좋은 예가 되겠다.

로보코드에 GA가 쓰인적이 있는지 없는지 모르겠지만, 최적해를 구하기 위해 지능적으로 작동하는 로봇을 만들어 보는것도 꽤 괜찮은 방법같다.

최적해는 무엇이냐?

바로 덜 맞는거.. (물론 여기서 더 나아가 더 많이 맞추기 위한 알고리즘도 있겠지만 이것도 역시 같은 맥락이 되겠다.)


것도 로봇이 게임중에 몸으로 때워서 알아내는 정보겠지만 싸우면 싸울수록 좀더 복잡한 역학 알고리즘으로 진화가 될 듯 하다. 물론
기본적인 움직임을 기반으로 하되, 여태 나온 모든 로봇의 역학 알고리즘을 차용해서 복합적으로 움직이게끔 만드는게 가장 성능이
나을듯 하다.  이런 최적의 복합 알고리즘을 찾는것이 Genetic Algorithm의 몫이 될 것이다.
같은 GA로 구현이 된 로봇이더라도 initial population이 잘 되어있는지 아닌지에 따라서 승패가 또 달라질 것이기 때문에 점점 더 재미있어질거 같다는 생각이 든다.

몇가지 책을 찾아보니 이 알고리즘을 구현하는데 parse tree 방법으로 각 노드를 replaceable 하게 만드는게 가장 구현 방법중 가장 괜찮은 방법이라 하고 있다.
알고리즘보다는 구현이 상당히 재미있을거란 느낌이 든다.

이렇듯 뭔가를 배울때 실용적인 측면의 동기를 부여하는건 배움에 상당한 힘이 된다.

1년전쯤에 어떤 면접관이 면접 자리에서 나에게 이렇게 이야기 하더라.

“당신 너무 공부하는것에 매달려 있는거 아니냐?”

위 말은 나를 너무 모르고 하는 말이다.

물론 짧은 기간을 봤을땐 공부하는것에 매달리는듯 보이지만 결국 귀결되는 지향점은 현실 문제 해결이다.
그게 동기가 되지 않고서는 꾸준히 노력하기 힘들다.

사실 최근에는 배운것들을 점점 실무에 이용하면서 나 자신도 감탄하고 있다.
그 감탄은 다시금 동기가되고 그러면서도 또 다시 공부하고 배우게 된다.

CC BY-NC 4.0 알고리즘을 학습할때 – Genetic Algorithm by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.