배경 지식 vs. 배움의 열정

지난주에 모비아카데미를 통해서 진행했던 10주짜리 데이터 사이언스 풀 코스 강의를 끝냈다. 강의 초반에는 학생 분들이 수식이 많이 나온다고 불평하셨는데, 정작 10주 강의 종료 후 강의 평가에는 “왜 수식을 넣었는지 이해가 된다, 그 수식들을 직관적으로 가르쳐 주려고 노력해서 고맙다, 열정적으로 가르쳐줘서 많이 배웠다” 등등의 평가들이 실려있더라. 모비아카데미 측 매니저도 풀코스 강좌 기준으로 강의 평가 점수가 굉장히 높다고 고무적이라고, 쉽고 가볍게 가르치지 않는 코스를 택한 것이 좋은 반응을 불러왔다고 그러는데, 평가 받는 입장에서는 너무 과한 칭찬에 머쓱해졌다.

사실 강의 중간에 수강생들의 불만은 제쳐놓고, 필자 역시도 어렵다는 불만에 대응해서 쉽게 전달할 수 없는 아쉬움 때문에 나름대로 자학을 많이 했다. 가까운 친구는 니가 혼자서 책만 읽어도 자학하는 놈이니까 원래 그런거라고, 너무 맘에 담아 두지 말고 앞으로 더 잘 할 생각만 하자더라. 흐름을 꿰뚫고 있는 표정의 수강생 중 한 분은 이걸 처음 배울 때 쉬웠냐? 가르쳐 주던 선생님들도 다들 어렵게 가르치지 않았냐? 어려운 걸 자꾸 쉽게 가르치려면 중요한 내용을 빼먹을 수 밖에 없다며 위로도 해주고 가셨다. 진심이 담긴 위로에 참 고마웠다.

분명히 자기가 원하는 걸 다 못 얻고 간 분도 많았을 것이고, 내용 자체가 어느정도 수학, 통계학 지식을 갖고 있는 사람들 위주로 돌아가다보니 벽을 느끼고 좌절했던 수강생도 있었을 것이다. 수학적인 전개 과정을 다 빼먹고 직관적으로만 설명하니 내용이 부족하다고 생각하는 분도 있었고, 더 쉽게 적용하는 코드를 보고 싶다고 하셨던 분도 있었고, 못 따라가겠다고 중간에 포기하신 분도 있었다. 물론 왜 오셨는지 아리송한 경제학 박사 분 몇 분은 고개만 끄떡끄떡하면서 뭔가 후배가 땀 흘리는 모습을 관조적으로만 봐 주셨는데, 그 분들은 과연 뭘 얻어가셨을까? 머신러닝이라는게 결국은 통계학을 좀 다른 방식으로 이용해 패턴을 찾아내는 테크닉에 불과하다는 사실을 깨닫고 “별 거 없구나”고 느끼고 가셨다면 솔직히 말해서 제대로 얻어가신거다. 정말 별 거 없는데, 통계학 잘하면 정말 쉽게 배울 수 있는데, 다른 분들은 얼마나 필자의 메세지를 받아갔을까?

 

1. 의식 수준

한 사이클이 돌고나니 느끼는 가장 핵심적인 문제는 배우겠다는 사람들의 지식 수준이 아니라, 의식 수준인 것 같다. 지금까지 한 3개월 남짓동안 데이터 사이언스를 배우고 싶다는 내용으로 수십통의 이메일을 받았는데, 이제는 메일의 내용만 봐도 이 사람은 수업을 들으러 오면 인생에 도움이 되겠다, 저 사람은 들으러 안 오는게 더 낫겠다는게 눈에 보인다. 메일 내용에 질문자의 의식 수준이 명확하게 드러나는게, 배움에 대한 진짜 열정이 있는 사람들은 필자의 블로그 글은 물론이고, 장시간 인터넷 검색을 해보고 나름대로의 방식으로 데이터 사이언스에 대한 그림을 그려놓은 상태라는게 눈에 보인다. 반면, 구글링으로 데이터 사이언스 강의 찾아서 필자의 웹페이지에 들어오자마자 바로 질문하는 분들은 평소에 생각하는 훈련을 한 번도 안 해보신 분, 책을 읽으면서 씨름하는 공부를 안 해보신 분, 남들한테 몇 줄 주워들은 걸로 인생을 살아오신 분이라는게 너무 눈에 들어온다. 필자의 수업을 듣고나면 내일 당장 알파고를 만들 수 있는게 아닌데, 저런 식으로 입에 떠먹여주기를 바라는 분들이 뭘 얻고 가시겠나?

메일을 보고 예측했던 수강생의 스타일은 수업을 진행해보면 확연하게 증명이 된다. 필자가 수업 내용을 다시 정리한 동영상을 수강생들에게 제공하는데, 열심히 듣는 학생들은 동영상을 서너차례 봤다는 느낌이 드는 질문을 하고, 질문 내용도 구글링 1분으로 찾을 수 있는 내용이 아니라 필자가 수업 시간에 간과하고 간 부분이나, 강의 노트에 있었으면 더 좋았을 법한 내용들이 많다. 그런 분들을 보면 가르치는 입장에서 되려 부끄럽고, 나는 학창 시절에 왜 저렇게 열정적이지 못 했을까? 나는 왜 매번 집에와서 혼자 문제만 끙끙대면서 풀다가 다 풀었다고 자위하면서 보냈을까? 좀 더 선생님을 괴롭혔(?)으면 더 좋았겠다는  반성도 많이 한다. 반대로 노력해서 지식을 얻고 자기 것으로 소화하는 경험이 적은 사람들, 남들에게 줏어들은 몇 개의 단어로 직장 경력만 10년, 20년이 쌓인 분들은 수업이 어렵다고 불평만 하다가 어느 시점부터 교실에 안 나타나더라. 외람되지만 그 분들은 코드 10줄만 알면 데이터 사이언스 마스터 할 수 있다고 과장 광고를 하는 분들에게 수업을 들으시기 바란다.

제대로 가르치는 선생이 있을까는 회의감에 학창 시절 내내 과외를 한번도 안 받았다는 (자기 잘난 맛에 사는) 친구가 그러더라. 과외를 안 받고 대학가서 천만 다행이었다고. 교재를 읽고 연습문제와 기출문제를 풀어보면서 경제학을 배우고, 신문 읽으면서 내가 배운 지식이 이렇게 적용되는구나는 방식으로 이해를 깊게하는게 상식인데, 과외로 서울대 온 애들은 기말고사 준비라는게, 기출문제 풀이는 커녕 어디서 솔루션을 구해서 달달 외우기 바쁘더란다. (학부시절 필자의 “허접” 솔루션은 그래서 참 인기가 많았다 ㅎㅎㅎ)

 

2. 지식 수준

지식 수준은 정말로 문제가 되지 않는 걸까? 지금와서는 한 발 물러섰지만, 필자도 고교와 대학 학부, 석사가 “문과”인지라, 처음에는 문과생도 충분히 이해할 수 있다고 홍보했다. 가르치는 내용 중 수학과 통계의 거의 대부분은 고교 수학 수준이고, 선형대수학의 기초적인 내용 정도만 다루고 있어서 대학 시절 수학 수업 하나 들었으면, 수학 좀 쓰는 통계 수업 하나 들었으면 충분히 따라올 수 있을 거라고 봤다.

예를들어, 데이터를 두 개 이상의 그룹으로 분리하는 Support Vector Machine (SVM)은 위상 수학에서 말하는 Separating Hyperplane을 찾는 방법인데, 이게 “위상 수학”이라는 단어가 나와서 어렵게 느껴지는거지, 사실은 데이터 위에 그냥 선 하나 긋는 작업에 불과하다. 참고로 미시 경제학 수업에서 (믿을 수 없겠지만) 똑같은 수학으로 두 재화간 교환시 균형 가격과 소비량을 구한다. (General equilibrium에서 Edgeworth box 참조) 그리고 미시 경제학은 “문과”인 “경제학과”에서 “학부 2학년” 때 배우는 내용이다. 그리고 필자의 데이터 사이언스 수업 시간에는 SVM을 수식으로 도출하는 부분은 아예 빼고, 직관적으로 왜 SVM이 Maximum Margin 모델로 불리는지, Maximum Margin 모델은 왜 데이터 셋을 가장 “잘” 나눠주는 선을 찾아주는지만 설명하고 넘어간다. (그래서 불만이신 분도 있을 것이다.)

물론 그래도 어렵다고, 힘들다고 하시는 분들도 있더라.

그래서인지 모비아카데미에서 필수적인 수학, 통계 수업을 번외 수업으로 제공하자고 제안이 왔다. 솔직히 말하면, 이걸로 몇 십억 버는 것도 아니고, 내가 왜 이런 기초적인 내용까지 가르쳐야하나는 생각도 들었고, 데이터 사이언스라면 몰라도 기초 수학이랑 통계를 돈 받고 가르친다는게 양심의 가책으로 느껴지기도 했다.

다른 한편으로 생각하면, 수학이랑 통계가 필요없다고 우기는 피상적인 강의들이 시장에 널리 퍼져있다가 이제 좀 데이터 사이언스가 만만한 내용이 아니다, 그래프만 그리는 내용이 아니다, 코드 몇 줄만 치면 되는 내용이 아니다라는 사실이 알려진 것 같아서 다행이다 싶었다. 어차피 어려운 내용이 아니니까 필자가 이런 수학을 알고 나면 데이터 사이언스가 쉬워집니다고 기초적인 가이던스를 잡아놓고 나면 다른 분들이 복사해가겠지. 내가 안 가르쳐도 다른데서 저렴한 가격에 배워오겠지. 결국 몇 번만 고생하면 시장 수준이 올라가고 피상적인 강의들이 시장에서 구축(crowd out)될 거라는 생각에 고민끝에 모비아카데미 측 제안을 수용했다.

학부 1,2 학년 때 배운 선형대수학 몇 줄이 생각 안 난다는 이유로 실력있는 분들이 데이터 사이언스 공부를 포기하거나 피상적인 공부만 하고 끝나는 게 참 안타깝더라.

그런데 정말이지 초고급 데이터 사이언스를 할 생각이 있는게 아니면 학부 선형대수학만으로도 차고 넘친다고 생각한다. (반박하실 수 있는 분은 꼭 메일 보내주시기 바랍니다.)

 

3. 지식 수준 (X) + 의식 수준 (X)

요즘 시계열 데이터를 필터링하면서 Fast Fourier Transform (FFT) 이라는 간단한 수학을 쓰고 있는데, 처음 FFT를 만났던게 2011년이고 그 땐 시험 답안지에 써 넣을 수 있는 기본적인 내용만 외웠었다. (솔직하게 고백한다 ㅠㅠ) 그리고 보스턴에서 다시 FFT를 만났던게 2013년인데, 그 때서야 겨우 필터링이라는게 주기(cycle)을 잡아내는 통계학의 테크닉이라는 걸 알아냈고, 그리고 2014년에 논문에 공저자로 참여해주신 스탠포드 공대 출신 교수님 덕분에 FFT가  10^n인 값을 2^n으로 바꾸는, 말 그대로 주기를 바꾸는 방법으로 활용할 수 있다는 것을 알게 되었다.

작년 쯔음에는 사기 클릭(Fraud Click)을 잡아내는 알고리즘을 만드는데 FFT를 적용해서 클릭의 주기를 살펴보다가 필터링, 주기 찾기, 주기 변환이 사실은 하나의 작업을 어떻게 활용하느냐에 따라 다르다는 것도 알게 되었고, FFT와 같이 배운 Kalman filter라는게 무슨 종류의 필터링인지, 왜 FFT와 같이 배웠는지를 몇 년만에 이해하게 되었다. (말해놓고도 부끄럽다ㅠㅠ) 요즘은 시계열을 Frequency 값으로 바꾸고 여러가지 아이디어를 테스트 중인데, 다시 FFT 쓰면서 내가 정말 여태까지 FFT에 대해서 수박 겉핥기 식으로 밖에 몰랐구나 싶어서 이불킥을 몇 번씩이나 뻥뻥하느라 잠을 설치는 일이 많다.

(경험상 그 스탠포드 공대 출신 교수님도 FFT의 용례에 대해서 10^n, 2^n 이상으로는 모르셨던 것 같다. R 기본 패키지는 허수 (complex number) 계산을 못하는데, 그거에 맞춰서 짰던 R 코드를 보고 틀렸다고 구박하시던게…. 지금쯤은 더 배우셨을라나? 이래서 학위가 끝났다고, 교수자리 차고 앉았다고 연구 그만하면 바보가 되는거다.)

Filtering 이라는 단어가 나왔으니 말인데, 추천 알고리즘이라고 해서 Collaborative filtering과 contents-based filtering 이라는 알고리즘을 필자의 데이터 사이언스 수업에 가르치고 있다. (FFT와는 다른 내용이니 오해 ㄴㄴ) 물론 깊은 내용을 가르칠 수 있는 수업이 아니라서 아이디어, 예제, 코드, 응용 방법 정도만 가르치고 끝나는데, 정작 그 3시간의 강의를 위해서 필자는 논문도 10개쯤 읽었고, 다른 분들은 이 주제를 어떻게 가르치나 싶어서 MOOC 강의도 몇 개나 들어봤다. 이렇게 공부를 해도 아직까지 부족한 게 많다 싶어서 강의를 앞두고 강의 노트 수정을 여러번 하는 일이 흔하다.

가르치는 포지션에 있는 사람도 이렇게 배움의 길은 멀고 험하다고 생각하는데, 정작 왜 한 줄로 하는거 안 보여주냐, 수학 왜 쓰냐, 현기증 난단 말이에요 그러면 뭐라 할 말이 없다.

물론 수업에 오신 분들은 배움에 대한 의지가 넘치는 분들이라서 그런 경우가 적다. 진짜 문제인 분들은 필자에게 밥 한 끼 사줄테니 데이터 사이언스의 요점을 1시간만에 요약해서 전달해달라는 사람들이다. 좋게 이야기하면, 1시간 만에 전달할 수 있는 내용이 아니고, 나쁘게 말하면 “모욕적인” 사람들이다. 필자한테 모욕하는게 아니라, 데이터 사이언스에게 모욕한다고 하는거니 오해는 하지 말아주셨으면 한다.

학부 시절이나 사회 초년병 시절에는 왜 기업들이 교수 몇 명을 불러놓고 몇 천만원, 몇 억원짜리 프로젝트를 진행하는지, 그런데 정작 그 교수 몇 명은 열심히 일하는 것 같지도 않은데 저렇게 큰 돈을 받아가는지 궁금했었다. 요즘은 너무너무 이해가 된다. 그 기업들은 지식 수준만 부족한 것이 아니라, 배우고 머리를 쥐어 짜내겠다는 의지가 없는 것이다. 그나마 큰 기업들은 돈으로 해결하겠다고 교수들 주머니에 큰 돈을 쥐어주는데, 필자에게 1시간 만에 다 가르쳐 달라는 사람들은 도대체….

 

나가며

어느 스타트업 COO가 한 때 필자에게 “머신러닝 적용할려면 데이터가 얼마나 많이 필요한거냐?”고 물은 적이 있었다. 이 질문에 참 다양한 방식의 대답을 할 수 있겠지만, 좀 “과학적” or “통계적”으로 대답을 한번 만들어보자. 우선 머신러닝이라고 표현한 그 단어는 아마도 신경망 모델 (or Neural Network)이었던 것 같다. 그 시절 그 COO의 용례를 보면 “머신러닝 = 딥러닝 = 인공지능 = 알파고”였으니까.

Neural Network (NN)은 다른 글에서 썼던대로 여러개의 Logistic regression이 중첩된 모델이다. 예를들어, Hidden layer가 4×2만큼 들어가 있다면, Logistic regression을 stage 1에서 4번하고, 그 결과값을 이용해서 stage 2에서 2번, 마지막으로 stage 3에서 1번해서 결과값을 찾아주는 알고리즘이다. 통계학에서 보통 regression을 위한 최소 데이터 수치를 30개로 잡고, 자유도(degrees of freedom)가 120이 넘어가면 t-statistic이랑 z-statistic이 (거의) 같다고 결론 내린다는 점을 감안하면, 입력 변수 10개 + Hidden layer 4 x 2 + 최종 결과값 1개인 모델에는, stage 1에서 logistic regression에 130개의 데이터 포인트가 입력되어야 (130 – 10 = 120) 최소 요구조건이 달성되는 것처럼 보인다. 

그렇게 stage 2에 들어갈 데이터 1개를 만들어낸다면 stage 2에는 124개(124 – 4 = 120)가 입력이 되어야하니 130 x 124개 데이터가 필요하고, stage 3에는 122개 (122 – 2 = 120)가 필요하니 130 x 124 x 122개의 데이터가 있으면 통계적으로 유의미할 수 있는 최소한의 데이터 숫자라고 할 수 있을까?

물론 stage 1에서 오차를 최소화하지 않으면 stage 2에서는 측정 오차(measurement error)가 있는 데이터로 작업했으니 Attenuated bias가 생길 것이고, 그 오차는 stage 3에서 더 커질 수 밖에 없다. 오차는 어떻게 줄이냐고? 입력 데이터 숫자가 무한대로 늘어나면 오차는 0에 수렴한다. (표본 분산 = s^2 / n 을 떠올려보자.) 이래서 데이터가 많으면 많을 수록 좋은거다. 물론 처음 만든 모델이 좋은 모델이 아니라면 high bias 문제를 영원히 극복하지 못하겠지만.

(참고로 실제 NN 계산은 stage 1의 130개 데이터로 stage 2의 1개 데이터를 만드는 게 아니라, 1개 데이터에서 나온 stage 3의 결과값으로 stage 2와 stage 1의 가중치를 수정하는 작업이 반복되는 방식이다. 위의 접근법은 오차 최소화를 이해하기 위한 설명의 한 방법으로 이해해주면 좋겠다.)

알만한 사람이 그런 질문하면 어떻게 하란말이냐는 욕 한번 듣고 나시더니 그 스타트업 COO 분 다음달에 수업 오신단다.

X