작정하고 쓰는 머신러닝 강의 비판 (2)

필자는 학부 때부터 경영학과를 무시했다. 왜? 수학 안 하니까. 실험도 안 하고. 그래놓고 영어 약자만 읊어대니까.

필자의 학부시절, 총장으로 계시던 정운찬 교수님이 학부 교육 과정에서 깊이를 찾을 수 없는 경영학과를 없애고, 행정학과처럼 대학원 과정만 남기려고 하셨다. 실제로 미국의 거의 대부분의 학교들에도 학부에 경영학과 과정이 없기도 하다. 당시 컨펌되지 않은 소문에 따르면 경영학과 모 교수님이 바닥에 드러누워 나를 밟고 지나가라는 농성(?)을 하신 덕분에 경영학과 정원을 줄이는 쪽으로 타협을 보셨다는 이야기가 있다. 필자는 그 때 경영학과를 없앴어야 한다고 생각하는 사람인데, 학부 교육 과정에서 수학, 통계학 같은 학문을 위한 “언어”를 안 배우는 학문이다보니, 경영학 학부 과정과 대학원 과정이 따로 놀 수 밖에 없고, 이게 결국 실업계 고교 출신이 특별 전형으로 카이스트 들어갔다가 적응 못해서 괴로워하는 것과 별 다를 바 없는 맥락이라고 생각한다. 실업계 고교 수업은 취업용이지 대학에서 학문을 이해하는 목적이 아니고, 경영학과 학부 수업도 취업용이지 그 이상의 학문을 이해하기 위한 준비 과정이 아니니까. 대학원이랑 따로 노는 취업용 학부 전공이 대학에 학부 과정으로 존재해야할 가치가 있나? 그마저도 요새는 뽀록이 들통나서 취업하기 힘든 판국인데.

(뭐, 경제학과에 팔이 안으로 굽는 것도 아니다. 학부 동기들 중에 고시 공부한다고 정작 계량경제학 듣고 졸업한 친구가 몇 명이나 될까? 그 친구들의 이해도라는게….)

요즘 비슷한 눈으로 공대 교육과정을 바라보고 있다. 지난 3월 데이터 사이언스 수업에 오셨던 경제학 출신분이 “공대는 엄청나게 수학 공부 많이 하는거 아니냐, 왜 이렇게 어렵지 않은(?) 수학으로 수업이 이뤄지는데 마치 수학이 무시무시한 것처럼 홍보를 했냐, 개발자들은 공대에서 이런거 공부 다 하고 졸업하지 않냐”는 질문을 했다. 옆에 있던 공대 출신분이 공대는 교수들도 대놓고 우리는 베껴서 쓰는 사람이다는 걸 인정하고, 수학 공부 깊게 안 하는채로 공식에 입력해서 값 찾기 바쁘다는 식으로 자기 전공을 좀 폄하하는 (겸손한) 발언을 하셨다.

그런데, 필자는 그걸 단순히 겸손(?)이라고 단정짓기 좀 어려운 경험들이 많다. 런던서 시뮬레이션만 줄곧 파다가 보스턴으로 학교를 옮겼던 그 시절, 필자 역시도 공학도들이 무시무시한 수학적 내공을 가지고 있을 것이라는 기대가 가득했다. 당시 보스턴에서 필자의 지도 교수는 Stanford의 Managerial Engineering에서 Financial simulation으로 박사 학위를 딴 분이었는데, 그 엄청난 기대는 필자의 논문에 코멘트를 받던 첫 날 산산조각이 나버렸다. 주가 움직임을 흔히들 하는대로 Normal distribution으로 놓은 다음에, 가끔씩 있는 시장 충격을 잡아내기 위해서 Poisson distribution을 추가해 놨는데, 필자더러 틀렸다고 이런 계산 하나도 할 줄 모르면서 박사 학위 왔냐고 “띠꺼운” 표정을 지으셨다. 너무 어이가 없어서 증명하는 교과서 PDF 파일을 열었더니, 벙찐 표정으로 그 수식을 멍하니 보더니, 그냥 R로 코드를 한참 치더라. 한참을 시뮬레이션 돌려서 필자가 결과값으로 그린 그래프와 같은 그래프가 나오니까, 쪽팔리는지 괜히 엄한 트집을 잡던 기억이 난다.

미안하지만, 그 이후로 공학도를 만나면서 “어쩌면(?)”이라고 생각했던 대부분의 경우에 “역시나(!)~”로 생각이 바뀌었고, 이런 생각의 흐름은 MIT의 머신러닝 수업을 찾아갔을 때도, 데이터 사이언스 강의 중에 공대 출신 박사들을 만났을 때도, 심지어는 공대 출신 교수들이 공짜로 풀어놓은 머신러닝 강의에서도 자주 볼 수 있었다.

 

1. 공대 교수들의 머신러닝 강의

요즘 머신러닝 공부하겠다는 사람들에게 가장 많이 알려진 무료 강의는 Coursera의 Andrew Ng 전 스탠포드 교수 강의, 홍콩과기대의 김성훈 교수 강의일 것이다. 두 분의 강의가 잘 정리되어 있고, 또 무료로 풀어놓았다는 점에서 참 존경스럽지만, 불행하게도 그 두 강의의 퀄리티 때문에 필자가 이렇게 직접 강의를 열게 되었다. 도대체 뭐가 문제였냐고?

 

데이터를 쳐다보는 관점

(Source: Research Gate)

경제학, 통계학 출신들에게 데이터는 일반적으로 High Noise 데이터들이다. 수업 시간에 분산을 최소화할 수 있는 각종 계산법을 배우다보면 수학에 지쳐 쓰러질 쯤에 학기가 끝나는게 일반적이다. 그런데, 지금까지 관찰한바에 따르면 공학도들에게 데이터는 Low Noise 인 것 같다. 얼굴 인식, 동물 이미지 인식, 언어 처리 등은 대부분 Noise가 거의 없다. 얼굴에서 눈, 코, 입, 턱 같은 큰 특징이 없는 장애인은 인구 중 극소수에 불과하고, 언어 처리도 형태소 처리할 수 있다고 “뻥치는” 몇몇 “전문가(?)”들을 제외하면 대부분은 사전에 있는 명사들만 쳐다보면 된다.

그렇다보니, 공대 교수들 강의에는 데이터가 이상(?)할 때, Noise가 많을 때 어떻게 대응한다는 (수학적) 설명이 거의 전무하다. 있어야 할 데이터가 없어서 생기는 문제를 Omitted variable case라고 하고, 필자는 이걸 수학&통계학 시간에 안장점(saddle point) 같은 극단적인 경우가 될 수도 있음을 지적한다. 이런 문제를 해결하기 위해서 도구 변수 (Instrumental variable)을 쓰는 경우도 소개하고, 본 수업 때는 그런 변수를 직접 활용하는 예제와 수학적인 논증도 덧붙인다. 변수가 잘못 측정되었을 때는? 마찬가지다. 계수들이 잘못 계산될 것이고, 이는 딥러닝이라고 불리는 Neural net을 쓴다고 해결되는 것이 아니라, 모델이 복잡해지다보니 그 오차가 더 악화되어 버린다.

High Noise 데이터를 별로 다뤄본 적이 없는 학자들이라 그런지, Andrew Ng의 수업 중에 빅데이터가 그냥 대용량 데이터고, 데이터가 많아져서 예전에 안 쓰던 Neural network를 쓸 수 있는 것처럼 설명을 해 놓는다. 좀 미안한데, 진짜 심하게 비웃었다.

필자의 수업에 와보면 알겠지만, Neural net은 non-linear 패턴을 찾는데 특화된 응용 통계학 알고리즘 중 하나이고, 데이터가 사이즈가 크고 적고가 중요한 게 아니라, 그 데이터가 non-linear 패턴을 가지는지 아닌지, 좀 더 정확하게는 random data인지 아닌지가 핵심이다. 무조건 데이터가 많아져서 Neural net을 쓸 수 있다는 식의 이야기를 해 놓은 수업을 보고, 저 분은 그냥 공대 출신이지, 제대로 통계학을 공부하고 그걸 데이터와 싸워가면서 내공을 기르신 분은 아니구나는 생각을 했다.

 

모델링을 쳐다보는 관점

흔히들 쓰는 Classification 모델들을 생각해보자. 멋 모르는 사람들이야 무조건 “딥러닝, 딥러닝” 하면서 Neural net이 All-Kill Solution인 줄 알겠지만, 사실 그 막대한 계산 비용을 지불하면서 Neural net을 쓸 수 있는 업무가 많지 않다. 대부분은 단순한 Logit과 SVM을 활용하고 있을 것이다. 자, 그런데 Logit과 SVM을 위의 두 교수들로부터 배운 분들 중에서 이 모델들이 어떤 문제를 갖는지, 그 문제를 어떻게 해결하는지에 대해서 배운 분 있으신가?

당장 Logit을 공부하다보면 over-fitting보다 더 무서운 over-confidence라는 문제와 직면하게 된다. 이걸 머신러닝 수업 때 Logit을 Log 기반 kernel 함수로만 배운 사람들은 문제 해결의 실마리를 찾기가 힘들다. 필자처럼 통계 수업 때 Logit vs. Probit의 컨셉으로 배운 사람들은 Probit이 Logit과 다른 점이 Sigmoid 함수를 이용하는게 아니라 정규 분포 함수의 확률 공간을 활용해서 결과값을 0~1로 바꾸는 작업이라는 걸 알고 있고, Logit으로 확률이 왜곡되는 문제가 생기면, 당연히 확률 값들이 한쪽으로 쏠림이 없도록 식의 형태를 살짝 바꿔주면 되겠다고 생각할 수 있다. 일전에 포스팅 했던 어느 논문에서 Beta prior를 썼던데, 이것도 확률 분포에 대한 지식을 활용한 방식이라는 점에서, 확률론(그래서 통계학)을 모르면 머신러닝은 책 속의 지식에만 불과하다는 것을 단적으로 보여준다.

SVM도 무작정 Linear kernel보다 Non-linear kernel이 좋다, Non-linear kernel 중에 정규분포를 기반으로 한 경우가 제일 많이 쓰인다, 이 때 parameter tuning을 잘 해줘야된다, 이게 regularization이다는 컨셉에서 끝날게 아니다. 당장 High noise 데이터들을 생각해보자. Outlier가 몇 개만 있어도 SVM 모델은 엉망이 된다. 그걸 더 맞춰보겠다고 non-linear kernel을 쓰면 당장은 해결되는 듯이 보이겠지만, 정작 over-fitting을 심하게 시킨 결과여서, 새로운 데이터에는 못 쓰는 모델이 될 것이다. SVM을 배울 때 Outlier가 어떤 영향을 주는지 체계적으로 배웠으면, 애시당초 Outlier가 있는 데이터로 SVM을 직접 돌려봤으면 수업이 훨씬 더 실제 업무에 더 와닿게 되지 않을까?

Neural Net은 또 어떤가? Activation function을 Sigmoid를 쓰면 Logistic regression 여러개의 결합으로 표현되고, 이게 바로 잘 모르는 non-linearity 함수를 최대한 근사치로 만들어내기 위한 작업 중 하나라는 말을 해 주던가? 애시당초 그런 관점에서 접근하질 않을 것이다. Andrew Ng 교수의 수업을 보면 “You have just created your first deep learning model. Congratulations!” 이런 이야기만 한다. 본인이 얼마나 깊은 내공으로 Neural net 모델을 이해하고 있는지는 모르지만, 적어도 그 수업은 정말 Baby용이라는 느낌 밖에 안 들더라. 필자의 수업 시간에 Neural net은 결국 Non-linear계열의 regression을 Ensemble 형태로 쓴 거라는 걸 보여주면 사람들이 충격먹은게 눈에 보인다.

필자가 암기식으로 모델을 외우는게 아니라, 평소에 직접 모델링을 하는 사람이니 모델을 볼 때마다 어떤 방식으로 그 모델이 구성된건지 곰곰히 따져보면서 그런 아이디어를 냈던 사람의 마음 속으로 들어가본다. 이렇게 보면 Neural net 돌릴 때 dropout 이라는게 왜 필요한지, activation function은 왜 바꿔쓰는지가 논리적으로 명쾌하게 이해된다. 이걸 Blackbox고, 남들이 하는대로 따라가는게 market convention이라고 주장하는 발표들을 봤었는데, 솔까말 “저는 아무것도 모르고 Copy & Paste만 하는 바보입니다”고 인증하는 거 같더라.

필자의 수업 시간에 Regularization을 설명하면서 over-fitting을 해결하기 위해 non-linearity를 일부 포기하는 작업이라는 점을 설명한다. 왜 일률적인 regularization parameter를 쓰지 않고, multivariable case가 나오는지에 대해서 필자가 MIT에서 머신러닝 수업을 듣던 시절에 마음에 드는 설명을 못 들었던 걸 생각하면, 확실히 공학도들이 수학과 통계학을 활용하는 방식이 직관과 추론이기보다는 A를 입력하면 B가 나온다는 통로식, 암기식인 것 같다.

 

2. 공대 출신 강사들의 머신러닝 강의

한국에서 머신러닝 공부한다는 사람들에게 제일 많이 알려져 있는 기관은 패X트캠X스 일 것이다. 어찌나 홍보비용을 많이 들이고 있는지 온라인에서 가는 곳마다 그 회사의 머신러닝 강좌 광고를 볼 수 있다. 그 중 몇몇은 참신한 기획이고, 또 들으면 좋겠다는 생각이 드는 수업도 보인다. 실제로 필자의 예전 블로그 글에서 추천한 적도 있다. 그런데, 좋은 선생님의 숫자는 제한적이고, 그렇게 광고비를 태우면서 학생을 모아봐야 선생님께 줄 돈은 부족하다보니, 좋은 선생님과 좋은 수업을 유지하기가 쉽지 않은 것 같더라. 결국 필자가 여러가지로 강하게 비난할만큼 수강료가 올라가거나, 아니면 학생들을 많이 모으기 위해서 수업의 수준을 낮추는 경우를 여러번 본다. 이 중 몇 개 강의를 본의 아니게 훔쳐 본 일이 있는데, 정말 보고 있기 너무너무 불편했다.

(필자가 빌린 강의실 바로 옆인데, 유리벽 너머로 강의 내용이 다 보이더라. 본의아니게 도강한 부분은 이 글을 빌어 사과드린다.)

 

강의 진행 방식

(Source: 인스티즈)

필자가 공대생은 아니지만 그래도 공학 수업이 어떻게 진행되는지는 안다. 여느 다른 과 전공 수업과 다른 점이 있다면 “실험”이라는 과목이 있다는 점이고, 그 이외에는 교수들이 수업 시간에 4차원 외계어로 떠들고, 학생들은 받아쓰다가 퍼지고 쓰러지는 점에서 별 다를 바 없는 수업이었다고 생각한다. 그런데 도대체 어떤 방식으로 교육이 되었길래 공대 출신 강사들의 머신러닝 수업을 가보면 왜 그렇게 코딩만 쳐다보는지 잘 이해가 안 된다. 정작 코드가 돌아가는 논리는 거의 커버하지 않고, 처음부터 코드 화면을 띄워놓고 코드만 Line-by-Line으로 설명하고 있다. 그러다 정작 수학적으로 따져야되는 부분이 나오면 스르륵~ 넘어간다.

더 웃긴건, 그 코드라는게 대부분 인터넷에서 쉽게 찾을 수 있는 코드라는 거다. 필자도 양심이 있어서 인터넷에서 긁어온 코드는 긁어왔다고 밝히고, 수업 내용을 이해할 수 있는 예제로 쓰지 실제로 적용할 수 있는 사례로는 잘 쓰질 않는다. 대부분은 필자의 수업 목적에 맞지 않기 때문에, 결국에는 수업에 맞춰서 다시 재작성한 경우가 많았는데, 필자가 “도강(?)”했던 수업들은 하나같이 인터넷에 떠돌아다니는 코드들만 열심히 주입식 교육을 하고 있었다. 본래 코드라는 걸 남과 잘 공유하질 않는 건 알지만, 돈 받고 설명해주는 강의라면 당연히 자기 코드를 공유해야하는거 아닌가? 왜 자기 코드는 공유 안 하고, 남의 코드만 공유하는거지?

얼마전에 본 강화학습 관련 강의 설명 페이지를 보면, 마치 딥러닝이 새로운 기술이고, 강화학습에 딥러닝을 추가하는게 어마무시하게 어려운 것처럼 설명을 해 놨더라. 필자의 눈에는 Gradient descent라는 기초적인 머신러닝 테크닉이 Bellman equation을 푸는데 활용되는 케이스에 불과하다. Bellman에서 내 목적함수가 classification 모델이면, Logit을 쓸 수도, SVM을 쓸 수도 있고, 데이터의 non-linear 패턴과 감당할 수 있는 계산비용의 수준에 따라서 Neural Net을 쓸 수도 있다. 모델링을 이렇게 차곡차곡 쌓아올리는 관점에서 봤으면 필요한 classification 모델을 바꿔 끼워넣는 수준인데, 이걸 마치 새로운 신기술이 나왔고, 이게 무시무시하게 어려운 것처럼 설명을 해 놨더라. 코드에만 집중하고 모델이 구성되는 논리를 모르면 뭔가 새로운 것처럼 보이겠지. 근데 더 어이가 없는건, 정작 거기에 쓰는 예제 코드들은 인터넷에서 쉽게 찾을 수 있는 Cartpole 예제더라. 그래놓고 “실전 적용”이라니? 8주 수업이면 최소한 2-3개는 자기 스타일로 만들면서 보여주던가….

 

강의 매니저들의 이해도

저런 IT학원을 한번도 운영해본 적이 없어서 잘은 모르지만, 아마도 강의 매니저라고 불리는 사람들은 선생님을 섭외하고, 학생들을 모아서, 학생 한 명당 얼마씩의 인센티브를 받을 것이다. 때문에 강의 홍보 문구들은 굉장히 자극적이다. 뭘 8주 동안 들으면 뚝딱 해결되는 것처럼 열심히 홍보하고, 그 홍보 문구에 속아서 수업을 들어가는 사람들은 교육에 100% 지원금이 나오는 대기업 직원들이나 세상물정 잘 모르는 20대 초중반의 대학생인 경우가 많은 걸 이미 여러번 봤다.

인센티브 시스템 속에서 나름대로 열심히 일하고 있는 강의 매니저들에게까지 악담을 퍼붓고 싶지는 않다. 실제로 어느 패X트캠X스 매니저는 필자의 블로그를 얼마나 열심히 보고 있는지 뭔가 하나 쓸만한 그림을 블로그에 담으면 자기네 수업 홍보 페이지에 집어넣고, 포스팅 몇 줄 글을 paraphrase해서 강의 홍보 페이지에 넣는걸 봤다. 강화학습의 핵심은 Bellman equation을 어떻게 구성하고, 거기에 state variable이 어떤 논리로 들어가도록 하는지, policy set을 어떻게 구성하는지라는 말을 언젠가 한 적이 있었는데, 저 위의 홍보 페이지에 가보면 Bellman equation을 푸는게 핵심이라는 말을 떡~하니 써 놨다. 비전공자가 저런 문구를 읊기 위해서는 어딘가에서 그 말을 들었어야할텐데, 한국어로 된 블로그 중에 Bellman equation과 강화학습의 관계에 대해서 제대로 언급한 글들을 찾기 힘드니 높은 확률로 필자의 블로그를 참조했을 것이다.

그런 노력과 열정에는 정말 박수를 치고 싶지만, 비전문가인 그들과 상담해서 수업을 듣기로 결심하는 과정, 비전문가의 한계를 극복하기 위해 조잡한 수준의 블로그 (ex. 필자의 블로그ㅠㅠ)에서 정보를 얻고 있는 현 세태에 안타까움을 느낄 뿐이다. 당장 이세돌을 이긴 알파고는 바둑 대국 데이터들을 다 모아서 최적 승리 패턴을 찾은 모델이었고, 나중에 커제 9단과 경기했던 알파고는 알파고 제로라고 해서 강화학습 기반으로 데이터 베이스 없이 순수하게 시뮬레이션 데이터를 활용한 모델이었다. 이걸 제대로 모르니 “이세돌을 이긴 알파고는 강화학습으로 만들었습니다.”라고 홍보 문구에 써 놨던데, 그런 사소한 디테일이 틀린 부분은 둘째고, 강화학습 모델이 state variable이 2개 이상인 Bellman을 풀어야 할 때 굉장히 많은 computational cost가 들고, 이렇게 state variable이 많아질수록 모델링 스킬이 중요하다고 홍보하기는 힘들겠지. 그 전에 그 정도로 복잡한 모델링을 해 본 선생을 찾기는 더더욱 힘들것이고. 그러니까 자기 스타일로 만들면서 “실전 적용”할 수 있는 강의는 더더욱 어렵겠지…

 

나가며

머신러닝 강의들에 대한 필자의 불편함을 담은 글 하나가 SNS 어느 곳에 바이럴 링크가 걸렸는지, 하룻밤 사이에 수천명이 필자의 블로그를 왔다 갔다. 항상 그렇듯이 딱 링크된 글만 보고 가는 사람이 대부분이기는 했지만, 그래도 이것저것 다 읽어보신 Pycon 준비자 분 중 하나가 Python 사용자 증가와 더불어 생긴 부작용*들에 대해서 Pycon에서 발표를 해 줄 수 있냐는 메일을 보내셨다.

* 코드 Copy & Paste 하는 개발자들이 이 시장의 주류인 것처럼 행세하는 문화

미안하지만, Pycon은 지식의 깊이가 아주 얕은 개발자들이 코드 몇 줄 돌아가는거에 열광하는 자리로 기억한다. Python 이용자들 중에 내공이 탄탄한 분들이 분명히 있겠지만, Python이라는 언어자체가 Script형으로 쉽게 짤 수 있는 개발자용 언어이다보니, Pycon에 참가하는 사람들 대부분은 Java나 C++같은 언어 기반의 객체지향형 개발 코딩 지식도 부족하고, 피상적인 지식 수준에 머물러 있는 사람들이라고 하면 좀 심한 팩폭인가? 그들이 필자의 뼈 있는 말을 듣고 싶지는 않을 것이라고 생각해서 부담스러운 요청을 거절했다. 당장 필자의 수업에 왔던 수학 제로 베이스 개발자들이 충격먹고 가질 않는가… 그들 중 과연 몇 명이 Andrew Ng 교수와 김성훈 교수의 무료 온라인 수업이 “통계학적, 모델링적 이해가 부족하다”는 말을 이해할 수 있을 것이며, 최소한 관심이라도 갖고 들을까? “빨리 코드 돌려서 멋있게 이미지 인식하는거 보여주세요”, “코드 공유해주세요”, “그런 수학은 현기증난단 말이에요” 라고 할 사람들 아닌가?

좀 위험한 발언일 수도 있지만, 지금의 과장된 붐에 혜택을 입은 Python은 길어봐야 3-4년 내에 Julia로 대체될 것이라고 생각한다. 당장 Python은 개발자용 언어에 데이터 처리를 얹으려다 Array 시작 순서를 바꾸고, Data Frame을 추가하고, 계산 형태를 바꾸면서 점점 무거워지고 있는데, 저렇게 무거워지고 과거 버젼과 호환 안 되는 상황이 계속 벌어지면, 코딩 마스터들은 으레 그랬듯이 좀 더 가볍고 효율적인 언어로 빠르게 이동한다. 100% 장담할 수는 없지만, 결국 Julia로의 이전은 시간의 문제가 될 것이고, 당장 Python 코드 몇 줄 카피해서 머신러닝, 딥러닝을 배웠다고 환희에 찬 개발자들은 “헛 배웠다”는 생각을 하는 날이 곧 오리라고 본다. (어쩌면 R도 Julia에 딸려갈지 모른다)

이런 이야기를 Pycon에 가서 하면 몰매 맞겠지? ㅋㅋㅋ

문득 떠오른건데, 실리콘 밸리의 데이터 사이언스 팀들에 공대생들이 참 드물었던 것 같다. 필자만 그런 면접을 본 건가… 모르긴 몰라도 한국이 IT 인프라가 깔린 나라 중에서 데이터 사이언스 교육에 수학 & 통계학을 제일 강조 안(?) 못(!) 하는 나라일 것이다.


글 아이디어를 주신 이성재님, 배권한님께 감사드립니다.

 

이전 글 1: 작정하고 쓰는 머신러닝 강의 비판 1

이전 글 2: 작정하고 쓰는 머신러닝 강의 수강생 비판

You may also like...

댓글 남기기

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