온라인 데이터 사이언스 강의를 시작하면서

0
978

오프라인에서 강의를 시작한지 꼭 1년이 지났다. 운영상의 문제도 많이 있었지만, 역시 가장 큰 도전은 “잘못된 인식”과의 고단한 싸움이었다. 수십차례 봤던 개발자 면접에서 이걸 “코딩”으로 인식하고 “갖다 쓰면 된다”는 관점에서 벗어나서, “응용통계학”이고, 기본적인 수학과 통계학 지식이 갖춰져야한다는 사항을 인지하고 있는 경우는 매우매우 드물었다. 수업에 찾아왔던 개발자들 대부분도 이게 무슨 머신러닝 수업이냐, 수학 수업이지라고 불만을 터뜨리는 경우도 많았다. 블로그나 Github에서 코드 몇 개 주워왔다고 “인공지능” 전문가라고 우기는 전, 현직 개발자들도 많이 만났고, 그런 수준의 내용을 학원들도 여러개 만들어져서 여전히 어린 대학생들의 코묻은 돈을 뺏어가고 있다.

다행인 것은 인식이 바뀌고 있음을 조금씩 느낄 수 있다는 것이다. 요즘 구인 웹사이트를 들어가보면 Data Scientist를 뽑는다면서 수학, 통계학 지식을 갖추고 있는 석사 이상의 지원자를 원한다는걸 명시하고 있는 것도 보고, 무식하게 무조건 딥러닝이 제일 좋은거 아니냐는 질문을 하는 사람들을 최소한 비지니스 미팅 자리에서는 만나지 않게됐다. 블로그 수준의 코드만 화면에 띄워놓는 몇몇 학원들에 투자하려던 VC들은 학원들이 이름만 Data Science라고 달아놨지, 실제로는 저급한보통의 코딩 학원에 지나지 않는다는 사실을 인지하고 투자 결정을 재고했다는 소식도 들었고, 제대로 Data Science 교육을 위해서 수학적인 개념을 코드로 쳐내려가면서 설명할 수 있는 선생에 대한 수요가 대기업은 물론 학교에서도 생겨나고 있다는 소식도 듣는다.

몇 줄 코드만 카피해서는 별로 얻을게 없다는 걸 강조하면서 잘못된 인식을 퍼뜨리는 “학원”들에 대한 불만을 가득담은 블로그를 운영했더니, “인공지능 회의론자”라는 별명까지 달아주던데, 당신들이 “코드 = Data Science”라는 그릇된 인식을 퍼뜨리고 있는 “사기꾼”들이라고 생각하지는 않으신가?

 

아카데믹 코딩 vs. 개발용 코딩

“코더”들에게는 보통 “지식=코드”이고, 지식이라는 것이 쉽게 Copy & Paste될 수 있는 것이라고들 생각하기 때문에, 잘 정리된 블로그나 Github 보면 되지 그걸 왜 돈 주고 수업을 듣냐고 생각하고, 어지간한 수업에 돈을 쓰는 경우가 드물다. 그 분들은, 아니 거의 대부분의 공학전공자들은 Pabii.co의 데이터 사이언스 수업도 보통의 코딩 학원처럼 코드 한 줄 따라해보라면서 조교들이 돌아다니는 “시간만 때우는” 강의일 것이라는 편견을 갖고 있다. 개발용 코딩만 해 봤지, 아카데믹 코딩(“수학을 코드로 바꾸는 코딩”)을 경험해보지 못했기 때문이다. (어느 컴공과 출신 VC는 이런건 한번 듣고 코드 따라가면 다 이해되는거 아니냐고 그랬는데, 재수강하고 싶다고 메일 보내는 수강생들 중에 수학, 통계학 공부를 많이한 석사 이상 고학력자들 비중이 높다면 믿어줄까?)

(필자의 박사 논문에 있는 Stochastic process 중 일부)

(그 Stochastic process를 “손으로” 풀고 난 다음 코드로 정리한 부분 중 일부)

데이터 사이언스 메인 강좌 8번을 진행하고 있으면, 보통 3번째 수업에서 SVM에 들어가는 Duality, Kernel 이라는 수학적인 개념에 충격을 먹은 표정으로 바뀌고, 4번째 수업에서 PCA를 설명하다가 Eigen-vector, Vector-space에 대한 기초적인 위상수학 아이디어가 나오고 나면 충격먹었던 표정이 충격^2으로 바뀐다. (충격은 1보다 큰 값이라고 가정하자.) 그들이 배우고 싶어했던 Ensemble과 Neural Net은 5, 6회차 수업에 나오는데, 그 때가 되면 이미 수업에 나타나질 않거나, 앞의 내용을 이해못했기 때문에 Ensemble이 Tree model의 어떤 구조를 활용하고 있는지, Neural Net은 Regression 모델들의 Tree형 결합이라는데서 발생하는 문제점들을 해결하는 방식을 전혀 못 알아먹은채로 수업을 떠나게 된다.

“수학 개념 풀어내는 방식이나, 머신러닝 쓰는 직관 같은게, 한국에서는 절대로 못 들을 수업인 것 같아요.”

“왜 수학을 공부하는지, 수학이 어떻게 쓰이는지 이제서야 알게 되었습니다.”

가르치는 입장에서 내 수업을 못 알아먹고 돌아서는 학생을 보면 가슴이 아프다. 차라리 그 분들이 처음부터 수업에 안 왔으면 좋겠다. 그렇다고 더 쉽게, 수학을 포기하고, 코딩학원 수준으로 가르치면서 (사실상) 사기꾼이 될 수는 없지 않나? “한국에서는 절대로 못 들을 수업”이라는 칭찬해주는 고학력자들의 말 한마디에 힘을 얻고, “왜 수학을 공부하는지, 수학이 어떻게 쓰이는지 이제서야 알게 되었습니다.”라는 학생들의 웃음꽃을 보면서 위안을 받을 수 밖에.

“제가 Python을 좀 할 줄 알아서, 문과라도 이 수업을 들을 수 있을 거라고 생각합니다.”

“이 수업에서 TensorFlow 쓰는 법만 배우고 나면 저도 포트폴리오 늘어난 개발자가 될 수 있을 것 같아서요.”

“제가 Python을 좀 할 줄 알아서, 문과라도 이 수업을 들을 수 있을 거라고 생각합니다.” 라는 분들, 이과 출신이어도 수학없이 코드만 친 분들은 보통 4번째 수업 이후로 포기한다. TensorFlow 코드 샘플만 몇 개 얻어가는 수업이라고 착각했던 개발자 분들은 자기가 할 줄 아는 코딩은 그냥 다른 개발자들이 쳐 놓은 코드를 Copy & Paste하면서 사소한 부분을 수정하는 “개발용 코딩”이었다는 사실을 얼마나 인지하셨을까?

개발자들이 코딩은 자기들만의 전유물인 줄 알던데, 연구실에 있는 박사들이 다 비웃는다. 아카데믹 코딩 위주인 우리와 플랫폼이 달라서, 업무가 달라서 자주 맞딱뜨리는 일은 없었겠지만, 당신들이 코딩을 몇 십년 했다고해서 아카데믹 코딩을 바로 베껴서 쓸 수는 없다. 마치 GRE 시험*이나 법조문에 나오는 초고급 영어 단어로 구성된 문장을 구사하고 있는 영어권 학자 & 변호사들에게, “너 영어로 대화 되잖어. 저 학자&변호사들하고 대화해봐~”라고 부탁하는 것과 뭐가 다를까?

*영미권 박사 입학에 필수적인 고급 영어 시험, 필수 암기 단어 6만여개의 수준이 매우 높아 “쥐랄이”라는 별명을 갖고 있다.

길거리 슬랭 잔뜩 들어간 영어만 배운 사람들이 영어권 변호사들과 다른 영어를 쓰는 것처럼, 코딩도 마찬가지다. 개발용 코딩과 아카데믹 코딩은 다루는 주제가 완전히 다르다. 사실 아카데믹 코딩은 수학을 코드로 바꾼 거거든. 한국인 법 학자와 영어권 법 학자가 대화하는데 영어권에서 오래살다와서 보통 대화가 능수능란한 사람이 한국인 법 학자를 대신할 수 있을까? 사용하는 언어가 같거나 비슷하다는 것이 지식의 내용이 비슷하다는 것과는 다른 의미라는 사실을 왜 개발자들은 그렇게들 모를까?

Auto-encoder를 들면서 Neural net 모델이 정보 처리하는 방식을 설명해줬더니, 자기가 어느 AI 업무한다는 기관에서 오퍼까지 받은 개발자다, 수학 못하는거 아니고, Auto-encoder는 Neural net이 정보 처리하는 방식과 상관 없다고 주장하던 어느 개발자 생각나네. “수학 잘하시면 수학 하셔야지, 왜 인공지능하려고 하세요?” ㅋㅋㅋㅋ 진짜로 오퍼를 받았다면 개발자로 오퍼를 받은거지, Data Scientist로 오퍼를 받은건 아니지 않나? 이게 수학 & 통계학인것도 못 알아볼 정도로 까막눈이면서….. (채만식의 “치숙” 생각난다.)

“무슨 말인지 하나도 모르겠네!! 이거 완전 수학이야! 수학! X발~~”

몇 년전에 Andrew Ng의 Coursera 머신러닝 수업을 듣던 K대 컴공과 출신 개발자가 “무슨 말인지 하나도 모르겠네!! 이거 완전 수학이야! 수학! X발~~”이라고 고함치던 것도 스쳐 지나간다. 최소한 그 개발자 분은 이게 수학이라는걸 이해하고 좌절하는 단계까지는 도달한 “우수한” 개발자였다는 생각이 든다. (이런 개념찬 개발자들 좀 뽑고 싶다.)

 

통계학적 머신러닝 vs. 개발자들의 머신러닝

어지간한 개발자들은 필자의 블로그 글 몇 개만 보고 알아서 “걸러진다”. 자기가 할 수 있는 일은 겨우 코드 베끼고, 나와있는 라이브러리 활용하고, 그 라이브러리 활용할 때 코드 몇 줄 바꾸는 수준을 넘을 수 없다는 “자괴감”을 느끼기는 하겠지만.

그런데, 무조건 TensorFlow만 쓸 줄 알면 아카데믹 코딩하는 사람들과 맞먹을 수 있는 레벨에 되는 줄 아는 (개념없는) 개발자들이 은근히 많다. 평소에 배운 지식의 수준이 코드 몇 개 Copy & Paste 해보면 이해할 수 있었기 때문에, TensorFlow라는 라이브러리도 그런 지식의 일부라고 생각하는 것이다. 아래는 이미지 인식을 위해서 필자가 TensorFlow 라이브러리를 이용하는데 쓸 데이터에 약간 손을 댄 작업의 일부다.

참고로 이미지 인식은 그 사진 전체를 한번에 입력하는게 아니라, 작은 창을 sliding 방식으로 움직여가면서 그림의 일부분씩을 스캔한 다음, 그 스캔 데이터를 데이터 벡터로 바꾸고, 그 벡터들이 서로 연결되도록 구성해서 여러개 slide의 상, 하, 좌, 우를 구분할 수 있다.

이미지가 완벽하게 동일한 프레임 안에 삽입된채로 입력되는 것이 아니기 때문에, slide가 모든 그림에 다 적용될 수도 없고, 당연히 그림의 상, 하, 좌, 우 어느 쪽을 버리고 Feature extraction 작업을 해야한다. (그냥 동일한 프레임에 강제로 우겨넣는 데이터 정리작업을 해줘야되는 알고리즘을 어떻게 회사 업무에 쓰나?) 그 중 그림 크기와 Slide 크기가 최대공약수로 안 맞아떨어지는 경우에 앞, 뒤로 빈 공간을 입력하는 Padding작업을 위의 코드가 하고 있다.

여기까지만 보면 저 코드만 복사하고 나머지는 TensorFlow에 그대로 “흘려”넣으면 되는거 아니냐고 생각할 것이다.

보통 이미지에서 Feature extraction을 한다는 이야기는 사진마다 같은 형태의 직선, 곡선들이 반복적으로 나타난다는 이야기다. 인간의 얼굴로 치면, 1000명의 사진을 입력하면 얼굴 윤곽, 눈, 코, 입의 위치는 다 비슷하고, 아주 미세한 차이로 사람 A와 사람 B를 구분하게 된다. 이 때, 똑같이 사람 A라는 걸 맞추려는데 사진의 크기가 다르다면?

자, Padding이 들어갔던 사진 프레임과, 안 들어간 프레임은 당연히 이미지 처리할 때 모델이 데이터 처리하는 방식이 달라야하지 않을까?

 

위의 작업을 TensorFlow가 알아서 척척척 다 해줄까? TensorFlow라는 것도, 여러개의 Neural net을 만드는 작업을 단순화한 명령어 라이브러리다. 당연히 저런 세세한 상황에 다 맞춰줄 수 있는 라이브러리를 만들어주지는 않는다. 자동화라는 작업들이 보통 조건 A가 생기면 조건 B가 실행되도록 만들어놨다는 점을 상기해보시라. TensorFlow를 쓸 수 있다고 주장하려면, TensorFlow의 명령어 예제 코드를 Copy & Paste해서 쓸 수 있는게 아니라, 회사 데이터를 입력 가능한 형태로 전처리하거나, TensorFlow의 알고리즘을 회사 데이터에 맞춰서 변형시켜야 한다.

두 작업 모두 Neural net이 어떤 매커니즘으로 돌아가는지, TensorFlow라는 라이브러리는 그걸 어떤 방식으로 단순화 해 놨는지 이해하고 있어야 가능한 작업이다.

못 하겠다면? 그냥 우리 회사 데이터를 남들이 TensorFlow 썼다는 방식으로 바꾸고, 그런 코드를 열심히 찾아서 복사하면 된다. 코드 못 찾으면 “우리회사 스타일 비지니스에는 머신러닝을 적용할 수 없다”고 우기는 개발자가 되면 된다.

 

온라인 강의를 시작하면서

솔직히 지난 1년간 했던 강의 내용을 온라인이라는 플랫폼에서 효과적으로 전달할 수 있을 것이라고 기대하지 않는다. 복습용으로 풀어놨던 동영상을 열심히 보신 수강생 분들 대다수가, 오프라인으로 들어도 따라가기 버거운 수업을 그냥 온라인으로만 듣고 따라가기는 훨씬 더 어려울 것 같다는 부정적인 반응을 보였다. 동영상 강의 플랫폼을 만들면서 만났던 관계자 분들도 다들 그러시더라. 이렇게 만든 강좌는 대부분 복습용으로만 활용하시더라고, 이거 자체로 지식을 배우기는 굉장히 힘들꺼라고, 특히 수학 개념 들어가고 코드 돌아가는거 계속 나오는 수업이면 더더욱 힘들지 않겠냐고, 괜히 큰 돈 들이지 말고 지금처럼 단순한 플랫폼 위에서 복습용 동영상만 제공하는게 더 나을거라는 충고를 해 주는 분도 있었다.

아마도 코딩으로 Data Science를 가르치고 있는 강남의 대다수 IT학원들이 온라인 강의를 열지 않는 것도 그런 이유 때문일지도 모른다. 영어권처럼 수강생이 전세계에 퍼져있는 것도 아니고, 저가의 온라인 강의 하나 듣고 회사 모델에 바로 적용할 수 있다고 기대하는 답없는 인력들만 있는, 서울공화국 + 저가수주 마인드의 한국 IT 시장에서 굳이 동영상 강의를 해야할 인센티브가 적은 것도 사실이다. 더더군다나 필자의 수업처럼 수학과 수학적인 코딩이 잔뜩 들어간 강의라면, 수업의 많은 부분들이 온라인으로 전달하는데 한계가 있을 수 밖에 없고, “헛 돈 쓰는” 경우가 더 많이 생길 수 있다는 우려도 공감한다. 실제로 코딩 기반 강좌들을 끝까지 다 듣는 비율이 전체 수강생의 8%에 지나지 않는다는 보고서도 있다.

그렇다고해도, 이런식으로 블로그 & Github 따라하기 수준의 저급 강의가 판을 치는 한국 시장을 바꾸려면 누군가는 뭔가 “판을 깨는” 작업을 해야한다고 생각한다. 얼마나 많은 부분을 동영상으로 전달할 수 있을지, “전환”할 수 있을지 자신감은 0%의 Neighborhood에 있지만, “코딩 = Data Science”라고 우기는 사기꾼스러운 학원들을 퇴출시키겠다는 “빡침”으로 오프라인 강의를 시작했던만큼, 무모한 도전에 한 걸음 더 내딛어 보기로 결심했다. 강의라는 것이 누군가의 “검색 시간/비용”을 줄여주는 정도의 초급 수준이 아니라, 몇 백만원의 돈을 받으려면, 강의 퀄리티가 VC들에게 대형 투자를 요청할 수 있는 수준이라면, 외부 미팅에서 4차 산업을 이끄는 선두주자인 것처럼 거들먹 거릴려면, 블로그 & Github 따라하기 수준이 아니라, 다른데서는 볼 수 없는 깊이와 내공을 담아야한다는 알량한 철학이 온라인이라는 플랫폼을 타고 좀 더 많은 사람들에게 전달될 수 있으면 좋겠다. (Read 그런 코딩 학원들이 퇴출되는데 좀 더 효과적이었으면 좋겠다.)

“머신러닝이라는거도 그냥 코드만 갖다쓰는 거라고 생각하구요.”

“제가 수학이 부족해서 코드만 갖다쓰는 수준 이상으로는 잘 모릅니다.”

접근성 높은 동영상 강좌가 널리 퍼져서 언젠가 개발자 면접을 볼 때, “머신러닝이라는거도 그냥 코드만 갖다쓰는 거라고 생각하구요.”라는 말 대신, “제가 수학이 부족해서 코드만 갖다쓰는 수준 이상으로는 잘 모릅니다.”는 말을 들을 수 있는 날이 오기를 기대한다.

(Source: 만화 슬램덩크)

 

나가며 – 착각하는 개발자“꼰대”들에게

그동안 오프라인 강의하면서 가장 화가 났던 부분을 좀 더 정확하게 꼬집자면, 단순히 잘못된 시장 인식이라기 보다는, 그런 인식을 갖고 목에 뻣뻣한 깁스를 한 개발자들이었다. 아마 필자가 교직에 몸을 담고 있지 않다는 이유로 보통의 저급한 IT학원 강사들과 같은 급으로 보고 있는 것 같은데, 당신들을 학부 4년 내내 힘들게 만들었던 교수들 대부분이 심지어 학문적으로도 필자의 눈에 대수롭지 않은 존재들이다. 깁스하신 개발자들에게 묻고 싶다. 누구 앞에서 감히 자기가 딥러닝 전문가라고 오만들을 떠시는가? (자기가 알고있는 딥러닝과 다르다, 머신러닝과 다르다던 개발자들….. 청춘의 대부분을 Math & Computational stat에 투자한 학자들도 놀라면서 듣는 강의다. 하물며 개발용 코드 Copy & Paste 밖에 한 게 없는 개발자라면 주제 파악 좀 해주셨으면 좋겠다. 나 코드 화면에 띄워놓고 따라치라고 하는 “코딩 강사” 아니다.)

그런 개발자들 대부분이 “코드 = 지식”이라는 편견을 갖고, 아카데믹 코딩은 본 적도 없이 개발용 코딩만 한 주제에 아카데믹 코딩 기반의 머신러닝, 딥러닝이라는 주제들을 자기들의 것처럼 착각들을 하고 있다. 아카데믹이나 개발용이나 일단 “코드”니까, “코드”면 무조건 자기들 것인양 착각하는 듯. 그들 “코더”들에게 Java나 C++ 코드 몇 줄이 세상의 지식 전부이기 때문에 “지식 = 코드 = Data Science”라는 틀을 벗어나지 못하고 있는 것이다. 영어만 할 수 있으면 영어로 된 연구 논문과 법조문을 100% 다 이해할 수 있다는 착각과 하등 다를게 없다. 온라인 강의를 시작하게 된 가장 결정적인 계기는 그들의 알량한 자부심과 편협한 지식체계를 산산조각낼 수 있도록 “제대로 된 지식”을 좀 더 많은 사람들에게 공유해야겠다는 사명감의 발로였다고 하면 너무 오만한 발상인가?

꼭 20년 전 쯤에 파이낸스 전문 지식말고 영어 실력으로만 사람 뽑던 외국계 증권사들 보는거 같다. 커넥션과 골프와 접대로 한국 금융시장의 고혈을 빨아먹던 그 “교포”들 생각나네.