통계학자가 본 머신러닝

요즘 자주 듣는 표현 중에 필자의 귀를 매우 거스르는 표현들이 몇 가지 있다

  • 빅데이터를 배운다
  • 딥러닝을 배운다

빅데이터는 용량만 큰 데이터가 아니라 유저들의 행동을 초 단위로 추적한 데이터라고 이미 여러번 포스팅을 했다. 딥러닝도 머신러닝의 Neural net 모델 중 layer의 숫자가 좀 많은 모델들을 부르는 이름이라는 것도 같은 맥락에서 여러번 언급을 했었다. 말을 바꾸면 빅데이터와 딥러닝은 특정한 데이터나 모델인데 이걸 마치 “기술”인 것처럼, 특히 각각이 개별적인 기술인 것처럼 이해하고 있기 때문에 쓰는 표현이다. 정확한 표현이 되려면

  • (데이터 사이언스 수업에서) 빅데이터를 활용하는 방법을 배운다
  • (데이터 사이언스 수업에서) 딥러닝을 활용하는 방법을 배운다

가 맞을 것이다. 이런 표현의 차이는 “시장의 오해 vs. 필자의 철학”라는 프레임과도 맞닿아 있다. 필자가 제시하는 표현은, 빅데이터라는 것이 기존의 데이터와 다른 형태이기 때문에 기존에 쓰던 통계학과 다른 통계학 테크닉들 or 다른 철학의 통계학이 필요하다는 맥락이 들어간 표현이고, 딥러닝이라고 불리는 신경망 모델 응용법도 마찬가지 맥락에서 데이터 사이언스 모델 중 하나라는 측면에서 접근하는 철학을 담고 있다. (이래서 수업 이름이 “빅데이터 강의”, “머신러닝 강의”, “딥러닝 강의”가 아니라 “데이터 사이언스” 강의인 것이다.)

 

빅데이터를 배웠다? or 빅데이터를 활용하는 법을 배웠다?

좀 더 속 마음을 털어놓으면, “빅데이터를 배웠다”면서 기존의 통계학은 아무 쓸모짝에도 없는 테크닉인 것처럼 표현하는 사람들, “딥러닝”을 배웠다면서 “딥러닝 >> 4차원의 벽 >> 머신러닝 >> 3.5차원의 벽? >> 통계학” 이라고 생각하는 사람들에 대한 불편함이 깔려있기 때문에 글 머리의 단순한 표현들이 거북한 것 같다.

심지어 며칠전엔 명문대 통계학과 4학년이라는 분이 보낸 메일에도 “빅데이터를 배웠더니 그게 데이터 마이닝이더라”는 표현이 들어있었는데, “빅데이터”라는 명사를 “빅데이터를 활용하는 법”이라는 동사형 명사로 활용하고 있는 모습에서 유저의 행동 데이터라는 개념 이해대신 데이터 마이닝 수업에서 들을만한 테크닉을 빅데이터라고 인식한다는 느낌을 받았다. 그런 모델들은 “빅”이 아니라 “스몰”데이터에서도 쓸 수 있을텐데? (써봐야 아무 도움도 안 되겠지만ㅋ) 왜 “데이터 마이닝 = 빅데이터”라고 이해하는걸까? 당장 Non-linear 패턴이 없는 랜덤 데이터라면 데이터 마이닝 테크닉들이 아무런 도움도 안 된다는 사실을 모른채, 무작정 회귀분석은 구식이고 “빅데이터”는 진보한 모델이라는 식의 단순한 이해를 이름있는 학교의 통계학과 졸업반이 갖고 있다니…

비슷한 사건을 어느 “딥러닝 개발자”라는 분한테서도 겪었는데, “언제 딥러닝을 써야하는지 아는 것도 중요하다”면서 정작 “언제”에 대해서 애매모호한 결론 밖에 없는 경우도 있었다. 이게 Logistic regression + Ensemble = Neural net 이라는 개념 이해, Activation function이 사실은 Kernel이라는 이해가 결합된 필자의 입장에서 보면 “언제”라는 표현에 대한 답은 굉장이 명확하다. 데이터가 랜덤이 아니고, 강한 패턴이 반복되고 있고, 그 패턴을 찾아내는게 드는 계산 비용이 중요하지 않을 때에 국한된다. 이미지 인식, 자연어 처리가 대표적인 영역이고, 그 이외에 모든 High noise 데이터를 다룰 때 Neural net 기반한 모델들은 큰 장점이 없다.

이런 사건들이 모두 통계학을 수박 겉핡기 식으로만 배운채로 응용 통계학의 한 분야인 데이터 마이닝 (or 머신러닝)을 접했기 때문일 것이다.

필자는 그나마 통계학이 전공이었던 사람이 아니라, 통계학을 밥벌이로 삼고 있는 사람들이 얼마나 불쾌할지 제대로 가늠하질 못했는데, 얼마전에 필자의 “빡침”과는 비교도 안 되는 진정한 “빡침”을 담은 댓글을 하나 봤다. (링크의 첫번째 댓글 참조)

 

진퉁 통계학자의 눈에 비친 머신러닝

(Source: AmSantac.co)

Ensemble 모델은 서로 다른 (Heterogeneous) 모델들을 결합하면 결과적으로 더 나은 정확도를 얻을 수 있다는 아이디어에서 출발한다. 그런데, 모델의 결과값이 서로 다르다는 이야기는 Error에 해당하는 분산 값도 매우 크게 다르다는 것을 의미한다. 위의 코멘트는 통계학의 모든 테크닉들이 분산을 최소화하는데 초점을 맞추고 있는데, Ensemble 모델의 이면에는 서로 다른 모델들을 결합하다가 Error가 더더욱 괴상망측한 형태로 바뀌는 것을 방치하고 있지 않냐는 질문이다. 모델의 분산(or 모델의 퀄리티)은 결국 Error의 분포에 달려있는데, 그 분포가 엉망진창이라면 과연 그 모델을 쓸 수 있을까? 전통적인 통계학에서는 그런 모델을 쓰질 않는다. “틀렸”으니까.

Analytic solution을 찾는 전공들 (수학, 경제학 등)은 여러가지 시뮬레이션으로 결과값을 “예측”하는 것만으로도 이미 신성모독이라고 생각한다. 저널에 논문이 실리지도 않는다. (필자가 전공을 바꾼 이유 중 하나다.) 그런데 시뮬레이션도 받아들일만큼 열려있는 통계학자 입장에서도 데이터 마이닝에서 다루는 대부분의 테크닉들에 대해서 심한 거부감을 느끼는 것 같다. “bastardization”, “notable oversimplication”, “ill-conceived ideas” 같은 표현을 학자가 다른 사람의 연구에 쓴다는 것은 대단히 크게 잘못되었다는 판단이 깔려있다는 뜻이다. 왜냐고? 공대라서 “다른” 방법을 쓰는게 아니라, 아예 “틀렸”다고 생각한다니깐ㅋ

꼴에 수학적으로 좀 훈련받았다고 필자도 공감하는 부분이 많은데, 필드에 있는 사람도 아니고 학계에 있는 학자들마저도 “그냥 정확도 올라가면 좋은거 아냐?”라고 타협하는 말들을 가끔하는 걸 보면서 마음 속 어딘가에 무거운 감정이 항상 깔려 있었다. 저 분들이 수학 모르고 막 가져다 쓰는 공학 박사들도 아닌데…

학생들을 어떻게 가르치길래, 얼마나 확률론 기초 없이, 얼마나 “기술”적으로만 가르치길래, 이름있는 학교 통계학과 졸업반이 “데이터 마이닝을 배우고 나니 회귀분석을 왜 배웠는지 모르겠다”, “회귀분석은 그냥 기초적인 지식에 불과한거 같다”는 식으로 폄하하는 말을 하게될까… 수업하신 교수 분이 정말 그렇게 가르치셨다면, 공대 아니라 통계학과 교수님이라면, 진지하게 반성해주셨으면 좋겠다. 당신이 가르친 학생들이 다음 세대 한국의 “인공지능”, “IoT”, “빅데이터”같은 키워드로 대표되는 4차산업을 이끌어갈 핵심 인재들이다.

 

딥러닝은 언제 써야하나?

(Source: Online Stat Book)

몇 달전에 데이터 숫자가 적으면 딥러닝을 쓸 수 없다는 어느 블로거의 글에 반박하는 공대 출신임이 분명한 짝퉁 데이터 사이언티스트의 반박을 봤다. 데이터가 적어도 딥러닝의 결과물이 얼마든지 좋아질 수 있지 않냐고 Python 코드까지 붙여놨던데, 저 위에서 말한 어느 “딥러닝 개발자”와 별반 다르지 않은 수학 & 통계학 실력을 가진 사람이지 않을까 싶다.

데이터의 숫자가 적고 많고는 둘째 문제고, 데이터 안에 비선형의 강한 패턴이 반복될 때만 신경망 모델이 유의미하다는 것을 이해하고 나면 절대로 저런 블로그 글을 쓸 수도 없고, 또 “언제 딥러닝을 써야하느냐”면서 애매모호한 글을 쓰지도 않을 것이다. 제대로 통계학과 확률론을 이해했다면, 필자가 수업 시간에 반복적으로 이야기하듯이, 우선 데이터가 랜덤인지 아닌지 눈으로 확인하기 위해서 Q-Q plot 하나라도 그려놓고 “데이터 작업”을 시작할 것이다.

링크의 글을 보면, 회사에서 “딥러닝으로 풀 수 있지 않냐?”라고 묻는 사람들은 정말 아예 아무 것도 모르는 사람이고, 그 글을 쓴 사람은 최소한 뭔가 굳이 복잡한 모델링이 필요없다는 것 정도는 감을 잡으신 분이라고 보인다. 물론 통계학을 제대로 공부 안 했기 때문에 정확히 뭐가 어떻게 필요없는지는 잘 모른다. 엔지니어의 한계다. 수학적인 모델들이 어떻게 구성되었는지를 이해하기도 전에 코드 돌려서 결과값 보기 바빴던 전공 출신이니까. 괜히 Keyword in Data Science is NOT data BUT science라는 표현이 돌아다니는게 아니다.

“틀렸”다는 통계학자의 주장은 다 이유가 있다.

 

나가며

필자가 계속 수학 &  통계학 베이스 강조하는 글을 쓰다보니, 여기저기서 유사한 철학을 가지신 분들의 응원(?) 메일을 받는다. 그 분들의 분노를 담은 표현 중 강도가 좀 센(?) 문장을 몇 개 소개해보고 싶다.

“어따쓰냐는거만큼 무식한 소리가 없다. 니가 그 가치를 못 알아볼만큼 어리석은 눈을 가졌다는 뜻이니까.”

“수학적인 사고를 두려워하는 인간의 삶의 질은 중세시대 인간이랑 다를바가 없다.”

왜 이런 식의 무서운(?) 표현들을 소개하냐고? 몇 달전에 딥러닝이라는거 써 봤더니 별로 뾰족히 “인공지능”스러운거 없더라면서 필자더러 모델을 뜯어고쳐달라는 식의 뚱딴지 같은 메일을 보내는 싸가지“초짜”들이 좀 있었다. 내 밥벌이로도 바빠 죽겠는데 왜 내가 니 밥벌이를 위해서 시간을 써야하냐고 더 싸가지 없는 불편한 글을 쓰려다가, 아예 답을 하질 않았었다. 모델에 대한 기본적인 이해는 없고, 그냥 코드만 copy & paste해서 돌려봤는데 자기 입맛대로 결론이 안 나오고, 그렇다고 이걸 직접 수정해볼려는 의도는 전혀 없는, 말 그대로 “양아치”스러운 개발자라는 느낌을 받았었기 때문이다.

그 분들은 “어리석은 눈”을 가지고 사는 “중세시대 인간”인 것 같아서, 그냥 눈도 다르고 시대도 다른 분께 괜히 불편 가득한 싸가지 없는 답을 쓰길 싫었다고 변명하겠다.

필자도 학부 시절에 한심한 메일을 썼다가 교수님들께 무시당하거나 모욕(?)에 가까운 폭언을 들은 적도 몇 번 있는데, 그 시절로 돌아가면 타이핑하는 필자의 손가락을 부러뜨려서라도 말리고 싶다. 이젠 그런 메일을 받는 사람들의 기분을 알아버렸으니까. 멍청한 질문에 “미시 누구한테 들었냐?”, “학점이 뭐였냐?”고 되물으시던 전XX 교수님, 이젠 이해합니다ㅋㅋ 그리고 죄송합니다ㅠㅠ

X