머신러닝 초보자에게 바치는 5가지 “하지 마라” 시리즈

데이터 사이언스, 머신러닝, 빅데이터, 교재

데이터 사이언스 강의를 시작했다, 그 강의 중에 머신러닝도 많이 들어가있다고 소개를 했더니, 어떤 책을 사서 공부해야되냐고 묻는 사람, 그거할려면 개발 지식 필요하냐고 묻는 사람, 통계학 지식이 필요하냐고 묻는 사람 등등 다양한 종류의 질문을 받았다. 필자는 이렇게 대답하고 싶다. “일단 예제 하나 돌려보세요.”

언젠가 어느 개발자가 “친구가 R 공부하려고 하는데, 어떻게 시작하면 될까요?”라고 묻길래, 비슷한 대답을 해 준 적이 있다. 그냥 아무 예제나 닥치고 실행해보라고. 적어도 코딩을 “공부”한다는 측면에서는 다른 대안이 더 있는지 잘 모르겠다. 코딩은 언어고, 언어는 어린 아이가 배우듯이 남들이 하는 표현을 따라하면서 늘 수 밖에 없다.

 

머신러닝 공부 ≠ 코딩 공부

그럼에도 불구하고 코딩으로 시작하시는 분들께

런던에 석사 학위가서 필자가 배운 코딩 언어는 Matlab이었다. 많은 개발자들이 Matlab이 어떻게 코딩 언어냐고 하는데, 당신들이 머신러닝의 Guru라고 생각하는 Andrew Ng 아저씨의 강의를 가보면 Matlab의 공짜버젼인 Octave를 쓰고 있다. 더군다나 실제로 대면 강연에서 보면 Matlab이 좋다는 이야기를 여러번하더라. (사실 연구하는 사람들 대다수가 아직도 Matlab을 쓰고 있다. 그리고 “우리”끼리는 이걸 “코딩”이라고 부른다 ㅋㅋ)

어쨌든 교수님들이 계량경제학 숙제 답안지를 Matlab으로 올려주시는 바람에 필자는 본의아니게 처음 2년동안 Matlab만 열심히 배웠다. 그러다 3년차에 교수님과 Eurozone Banking System Network 만드는 프로젝트를 진행하는데 교수님이 R을 쓰시는거다. 어쩔 수 없이 R을 또 새로 배웠다.

그 기간 내내 필자가 Matlab이나 R 교과서를 산 적이 있을까? 런던의 살인 물가에 1파운드 덜 비싼 식사 먹으러 10분씩 더 걸어다녔던 필자가 몇 백파운드짜리 교과서를 샀을리가…

그냥 숙제에 나오는 작업들을 하나하나 진행해보면서 모르는 부분은 구글을 뒤지고, Stack에서 답을 찾고, 아니면 같이 숙제하던 친구들에게 물어보면서 배웠다. 친구들도 구글에서 답 찾아서 같이 공유하고, 그러다가 답안지에 코드가 나오면 그걸보고 또 배우고 그랬다. 학계에서는 코드 공유해주는 사람들이 많지 않아서, 실력자들이 만들어 놓은 코드를 보는 기회는 흔치 않은데, 한 줄 한 줄 엄청 신경쓰면서 공부했던 걸로 기억한다.

책 파시는 분들이 필자에게 엄청 욕할 것 같기는 한데, 적어도 코딩만큼은 아마 책 쓰신 분들도 필자와 똑같은 방식으로 배우지 않았을까 싶다.

그래서 R을 새로 배우건, 머신러닝을 새로 배우건, 뭔가 이쪽 관련 지식을 새로 배우는 분들께 이렇게 시작하지 마라는 간략한 조언글을 써본다.

 

1. 이론부터 시작하지 마라

교과서부터 시작하지 말자는 이야기와 매우 비슷하다. 머신러닝으로 구글 검색을 넣어보면 딥러닝이 어떻고, 신경망 모델이 어떻고 등등 개론 수준의 이론이 넘쳐난다. 다 필요없다. (어차피 읽어봐도 모르니까 지금 이 글을 찾아본 거 아닌가? ㅋㅋㅋ)

일단 예제부터 시작하자. 아마 바로 다음 질문이 이런 종류일 것이다.

R 어떻게 시작해요? 구글에서 다운받으면 된다. 데이터는 어떻게 불러와요? 구글 검색하면 된다. 그러지 말고 예제 좀 보여달라고? 필자가 블로그에 오늘까지 4개나 올려놨다. 여기, 여기, 여기, 그리고 여기.

무슨 선형대수부터 시작해야된다, 회귀분석도 배워야된다, 교과서 어느책이 좋다더라, 이러다보면 PhD 따야된다는 이야기까지 나올꺼다. 이 글을 읽는 사람들의 99.99%는 박사학위 중에 머신러닝을 공부하는 사람이 아니라, 다들 인공지능이라고 그러니까 그냥 궁금해서 보시는 분들 아닌가? 아카데믹들이 머리 쥐어짜면서 하는 공부에 굳이 동참하실 필요는 없다.

(물론 남들 코드 복사하고 있다보면 이게 도대체 무슨 뜻인지 궁금해지는 시점이 올 것이다 ㅋㅋ 기초 수준을 통과했다는 뜻이다!)

 

2. 머신러닝을 다 배울려고 하지 마라

머신러닝은 교과서 한 줄, 한 페이지짜리 내용이 아니다. 통계학에서 쓰는 방법론들 몇 백가지를 조합해서 나온 완전히 새로운 학문이다. 이거 다 배울려고하면 아무것도 못 배운다. 고등학교 3년치 수학을 공부해야 고1 때 배우는 집합 예제 풀 수 있는거 아니지 않나? 집합 배우고, 집합 예제 풀고, 함수 배우고, 함수 예제 풀면 된다.

제일 불쌍한 친구들이 computer vision (사진, 얼굴 같은거 인식하는 분야), natural language processing (자연어 처리, 지난 글에서 언급했듯이 난이도 Hell이다), 그리고 speech 분석같은 고난이도 전문 영역부터 붙잡고 시작하는 초심자들이다.

“미안한데, 그거말야, 세부전공으로 박사하고 있는 친구들도 힘들어하는거야. 좀 기분 나쁘겠지만, 니네는 수학이랑 통계학 백그라운드가 박사 학위 있는 친구들만큼 안 될테니 그냥 베껴서 쓰는거 밖에 못할꺼야. 모델을 제대로 이해해야 니네 사업에 맞춰서 고쳐서 쓸텐데, 그게 그렇게 간단한 일은 아닐듯”

 

3. 알고리즘에 집착하지 마라 수학 수식에 집착하지마라 (2018년 3월 추가)

위에 1번에서 했던 “하지 마라”와 일맥 상통한다. 일단 쫄지말고 써 봐라. 어차피 일반 대중에게 공개된 알고리즘들 중에 대단하고 복잡한 알고리즘 없다. 이걸 다 이해하고 쓸꺼야라고 스스로를 옥죄일 필요없이, 한 두번 써보고, 데이터 넣고 돌려보면서 Trial-and-error 해보면 어떤 알고리즘인지 감 잡을 수 있다.

그리고 그런 경험이 쌓여야지 알고리즘을 어떻게 수정해야하는지 알게 되는 것 같다. (물론 당신이 한번보면 모든 걸 다 아는 천재라면 예외겠지만…)

* 2018년 3월 추가: 이 부분은 한국 실정에 맞지 않는 것 같아 일부 수정합니다. 개발자들이 무조건 코드만 돌려보면 다 알 수 있는 것처럼 착각하는 경우가 많은데, 그래도 기본은 알아야 지금 무슨 작업을 하고 있는지 감을 잡을 수 있습니다. 강의 중에 수학적인 디테일보다는 모델이 어떻게 만들어졌는지에 대한 직관을 공유하고, 그 직관과 주어진 데이터를 접목하면서 어떤 방식으로 모델이 변형되는지 설명하는 것도 같은 맥락이라고 할 수 있습니다. 책 속에서 수식만 공부하다보면 정작 데이터를 활용할 때는 죽은 지식이 되어버립니다.

 

4. Scratch부터 다 만들려고 하지 마라 (In other words, 베껴라)

나중에 모든 프로세스가 손에, 눈에, 그리고 입에까지 익을 때쯤되면 Scratch부터 만들 수 있을지도 모른다. 그 전에는 그냥 베껴라. 그게 속 편해서가 아니라, 잘 만들어 놓은거 보고 베껴야지 빨리 는다. 교수님이 주신 R 코드들, 필자의 하드, 외장하드, 클라우드 서비스에 겹겹이 잘 보관되어 있다.

코딩하는 사람들에게 가장 지옥같은 경험은 “디.버.깅.”이다. 아마 디버깅을 해주는 머신러닝 엔진이 알파고 급으로 성장하면 아예 개발자들이 필요없어질지도 모른다. 당신이 처음 만드는 그 코드는 보나마나 수십 (아니 수백, 수천)번의 디버깅을 필요로하는 코드일 것이다. 그 시간을 아껴서, 머신러닝을 더 배우는 편을 추천한다.

개발자의 코딩이건, 수학자의 코딩이건, 통계학자의 코딩이건, 어느 누구의 코딩이건 상관없이 코딩을 처음 배울 때는 Copy & Paste부터 시작한다. 수업 때 코드를 100% 제공해주는 것도 같은 이유다.

나중에 실력이 쌓이고 난 다음에는 당연히 자기 코드가 있어야겠지만…

 

5. 코딩 언어를 바꾸지 마라

Matlab에서 R로 전환하던 때가 떠오른다. 정말 교수님이 엄청나게 중요한 프로젝트를 던지시면서 같이 하자고 기회를 주셨으니 망정이지, 그게 아니면 R 다시 배우기 정말 싫었을 것이다. 그리고 보스턴에 가서 다른 교수님 TA를 해주는데 Matlab으로 솔루션 만들어서 학생들한테 줘라고 하시는데, R이랑 Matlab이랑 헷갈려서 또 한참 힘들었다. 두 언어가 닮은 점이 참 많은데도 그런데, 괜히 여러개 플랫폼 쓰면서 고생하지 말았으면해서 짚고 넘어간다.

요즘 제일 유명한 플랫폼이 R과 Python인데, 아직 시작 안 했다면 아래 링크에서 시작하자.

R: http://machinelearningmastery.com/r-machine-learning-mini-course/

Python: http://machinelearningmastery.com/python-machine-learning-mini-course/

(조만간에 한글로 바꿔서 올려야겠다.)

물론 데이터 사이언티스트로 살아남을려면 둘 다 공부해야한다. 배울 때 둘을 같이 배우면 헷갈려서 문제인거지, 무조건 하나만 해야된다는 뜻은 아니다.

기초 수준을 벗어나서는?

혹시나 노파심에 한 마디 사족을 달면, 위에 5가지 “하지마라” 시리즈는 나중에 “짬”이 차면 “해라”로 바뀔 내용들이다. 이론을 모르는 코딩은 남들이 만들어 놓은 지식의 복사판에 불과하니까. 괜히 데이터 사이언스 석사 프로그램이 있는 것도 아니고, 실리콘 밸리에서 제대로 된 데이터 사이언티스트들은 뇌과학, 산업공학, 경제학 같은 응용 수학 & 응용 통계학 활용하는 학문으로 박사 학위를 갖고 있는게 아니다.

아마 혼자서 공부할 수 있는 수준의 내용은 Coursera, Udemy 같은 온라인 플랫폼에서 쉽게 찾을 수 있을 것이고, 영어가 아니라 한국어로도 많은 블로그 글들을 찾을 수 있을 것이다. 굳이 아쉬운 점이 있다면 그런 강의들이 좀 수준이 낮다는 점, 그런 블로그들이 굉장히 피상적인 지식만 나열해놨다는 점인 것 같다. 어느 개발자가 딥러닝(이라고 불리는 Neural net 모델)을 왜 써야하냐는 식으로 글을 써 놨던데, 통계학을 하나도 모르는 전형적인 “엔지니어”(공돌이)다 보니, 데이터가 랜덤일 때, 패턴이 있을 때 통계학 접근법이 다르다는 걸 이해 못하고, 당연히 두루뭉실하게 “Neural net이 별로 안 좋을 때도 있다~” 는 식으로 글을 써놓은 걸 봤다.

아마 저런 글을 보고 뭔가 제대로 못 짚어주는 것 같다, 두루뭉실한 것 같다는 걸 느끼는 시점이 되면, 남들의 코드를 Copy&Paste하는데서 멈추어 있는 자신에 대한 불만이 슬그머니 차오를 것이다. 뭔가 코드를 뜯어 고치고 싶은데, 그래서 내가 원하는 결과물을 얻어낼 수 있도록 재설정 해보고 싶은데, 뭘 어떻게 고쳐야 될지 막막한 순간, 그 순간이 오면 드디어 기초 수준을 넘어선 것이다.

중급 이상 수준의 공부를 위해서는 저 위의 “하지 마라”를 모두 “해라”로 바꿔야 한다. R, Python 두 언어를 다 활용할 수 있어야하고, Scratch부터 다 만들어낼 수 있어야하고, 수학 수식이 담고 있는 의미를 이해해야하고, 머신러닝의 다양한 모델들을 깊이있게 알아야한다. 말을 바꾸면, 이론 공부를 제대로 해야한다는 뜻이다.

필자가 수학 모델링이 가장 중요하다는 걸 강조하고, 통계학에 대한 깊이있는 지식이 중요하다는 강의를 하는 이유는 저 시점에 딱 멈춰버린채 “엔지니어” 수준에서 끝나서는 안 되는, 정말 데이터 사이언스를 활용해야하는 사람마저도 멈춰있는 걸 매일같이 보고 있기 때문이다. 혼자 힘으로 깊이 있게 공부하는게 힘들면 필자의 수업을 들으러와도 좋다 ㅋㅋㅋ

 


(2018년 8월 추가, 메일에 대한 답변)

제목: 글이 이상하네요

내용: 머신러닝 초보자에게 바치는 5가지 “하지 마라” 시리즈에서 분명히 딥러닝 초보자는 수학 수식에 집착하지마라라고 하셨는데, 다른 글에서는 엄청나게 강조하고 있으니까요?

 

답변: (집착하지 마라고 했던 이유는) 초보자한테니까요. 마지막 문단 “기초 수준을 벗어나서는?” 참고 바랍니다.

You may also like...

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다