머신러닝을 공부하고 개발하겠다고 생각한 내가 너무 한심하게 느껴진다. 코드를 이해하고 구현할 수 있을 만큼 얕은 이론 공부를 하고 여러 github 와 kaggle 자료들을 copy & paste 를 하면서 그게 내 실력이라 믿었다. 사실은 아직도 좋은 자료를 보고 내 것으로 체화하고 직접 구현해보는 것이 프로그래밍 실력을 늘리는 것에는 변함없이 좋은 길이라고 생각한다. 하지만 머신러닝 분야가 단순한 코더를 필요로 하는 것이 아닐 것이다. 내가 지금껏 구현했던 튜토리얼과 논문은 타인의 수학적인 백그라운드를 통해 도출된 결과를 단순히 코드로 옮기는 것에 지나치지 않았다. 수학이나 통계를 공부하지 않은 내가 만약 실무에 투입되고 어떤 머신러닝 혹은 딥러닝 프로젝트를 시작하여 모델링을 한다면 스택오버플로우나 케글에 기웃거리며 가져다 쓰는 정도 밖에 하지 못할 것이다. 혹자는 가져다 쓰는 것도 실력이라고 할 지 모르겠다. 물론 동의한다. 하지만 어떤 모델을 가져다 쓸 때 나 스스로 그것을 최선이라고 판단할 근거가 있을까? 그것이 정말로 필요한지? 파라미터는 어때야 하는지? 등 전반적인 모델에 근거를 댈 수 있어야 할 것이다.

방학을 하기전에 교수님과 상담하면서 내가 정말 머신러닝쪽에 관심이 있지만 앞으로 어떻게 해야할지 모르겠다고 말한적이 있다. 교수님께서는 텐서플로우같은 프레임워크들을 많이 돌려보고 프로젝트를 해보거나 공모전에 나가는게 좋을것 같다고 말씀하셨다. 공모전까지는 나가보지 않았지만 이것저것 구현해보면서 항상 뭔가 찜찜한 기분이 들었다. 그러면서 나는 머신러닝을 하는사람이 아니라 단순히 코딩을 하는 사람이라는 느낌을 지울수가 없었다. 심지어 그 구현도 수학이라는 벽에 부딪히면서 좌절할 때가 많았다. 또, 라이브러리를 사용할 때는 원리도 이해못하고 그냥 사용하는 경우가 허다했다. 언제부터 그러한 원리가 그저 블랙박스같은 것이고 구체적인것은 알 필요 없다고 생각했는지 모르겠다.

나는 코더가 되지 않을것이다. 그건 멋도 없고 가치도 없다. 확실히 수학이나 통계적인 백그라운드를 학부과정중에 다 채울 수 있을지는 모르겠다. 다만 졸업시즌 전까지는 다른 개발자들보다 이론적으로 더 educated된 개발자가 되고싶다. 그 시작을 아래 책에서 부터 시작할 것이다. 무료로 배포된 책이라 링크를 그냥 올리겠다.

images

PDF 링크 : https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf