머신러닝 다루는 컴퓨터공학과, 통계학과 수업들

수업에 찾아오는 공대생들이 매번 넋나간 표정으로 앉아있는 것 같아서, 도대체 우리나라 공대들은 어떤걸 가르치길래 문과인 경제학과 출신도 따라오는 수학&통계학도 이해 못해서 쩔쩔매고, 학부 수업에 머신러닝 관련된 전공 수업이 얼마나 없길래 외부에 저렇게 학원들이 많이 생기는지 궁금해졌다. 우리학교 컴공과 웹페이지에 교과목 정보 리스트를 쭈욱~ 훑어봤는데, 필요한 수업들 다 있는데?

(Source: 인스티즈)

학부 아니고 대학원이라구요? 음… 대학원 말고, 학부 수업들 리스트 몇 개만 뽑아보겠습니다!

 

컴퓨터 공학과 수업들

1. 선형 및 비선형 계산모델

3학년 수업이고, 선형대수학, 선형 프로그래밍, 비선형 최적화 등의 다양한 “계산모델”을 소개하는 수업이란다. 이렇게 만든 계산 모델들을 컴퓨터 응용소프트웨어 개발에 활용한다는데? 이전 수업들 링크를 따라가보면

  • 선형대수학의 컴퓨터 응용에 관하여 공부한다”고 버젓이 명시되어 있고,
  • Prerequisite으로 공학수학 I이 들어있다.

더 놀라운 사실은, 지금 정리한 내용은 2012년 강좌 발췌고, 2004년 1학기부터 자료가 있다.

옛날에는 이런 수업이 없었다고? 필자가 20대 초반에 군대서 유격훈련하고 있던 2004년에도 있었던 수업인데?

강의자료들 보면 수업 시간에 필자가 가르치는 내용들이랑 매우매우매우 흡사하다.

  • 초반부에는 선형대수학 복습하고,
  • 중반부로 가면 PCA 적용할 때 보여주는 Eigen decomposition도 있고,
  • inequality constraint가 있을 때 optimization이 어떻게 작동하는지,
  • 이 때 고려해야할 사항이 뭔지가 버젓이 강의노트에 들어가 있다.

Inequality 케이스는 필자의 수학 & 통계학 수업 시간에 Lagrangian을 Kuhn-Tucker 스타일로 풀 때 예시, SVM 모델은 이런 방식으로 풀린다는 설명하는 페이지랑 같은 내용이다. 학문마다 그걸 활용한 사람 이름이 다를테니 경제학에서 쓰는 Kuhn-Tucker 대신에 다른 학자의 이름이 달려있을지는 모르지만, 저걸 처음 본다는 표정으로 날 쳐다보시던 컴퓨터 공학과 출신분들 뭐임?

저 링크의 강의노트 1번부터 8번까지가 필자의 학부 1학년 시절 김선구 교수님 경제수학 중간고사 범위랑 (거의) 똑같고, 2학년 때 들은 선형대수학 Quiz 1, Quiz 2에 나왔던 내용들이랑 판박이다. 여태까지는 당신들이 학부 때 배우지 않은 내용을 가르쳐서 미안합니다는 표정으로 가르쳤는데, 앞으로 이거 모르겠다고 벙찐 표정 짓고 있는 컴퓨터 공학과 출신들, 폭풍 놀림들을 각오하시라. 경제학과, 수학과, 통계학과 출신들도 마찬가지다!

 

2. 데이터 마이닝 개론

이것도 3학년 수업이다. 대용량 데이터에서 유용한 “패턴”을 찾기 위한 이론과 기법을 강의한단다.

  • 사기 탐지, 추천 시스템, 사이버 보안 등에 활용되고 있다
  • 유사 아이템 검색, 빈발 패턴 검색, 링크 분석, 데이터 스트림 마이닝, 클러스터링, 그래프 마이닝 등을 다룬다

이거 데이터 사이언스 강의할 때 가르쳤던 내용들인데, 학부 때 다 들었네? 아마 이 수업은 최근에 생겼을테니까 수업을 안 듣고 졸업한 경우가 많다고 쳐도, 최소한 이 수업이 학부 3학년을 대상으로 하고 있다는 것은 이 수업을 듣는데 필요한 수학 & 통계를 그 전에 다 들었다는 뜻일 것이다.

 

3. 기계학습 개론

기계 학습은 데이터로 모델을 생성하고, 이를 기반으로 미래를 예측하는 계산구조와 알고리즘을 연구하는 컴퓨터 공학의 한 분야이다. 패턴 분류, 확률관계 모델링, 순차적 의사결정 과정에 대한 구체적인 학습 구조와 알고리즘을 살펴보며…

 

4. 인공지능

  • 경험적 탐색, 추론, 학습, 지식 표현 방법에 대한 이론과 근본적인 계산학적 문제들을 다룬다.
  • 논리 기반의 정리증명, 게임이론, 지능형 에이전트 등에 관해 다루며, 
  • 신경망, 진화 연산, 베이지안망의 기본 원리를 학습하고, 
  • 응용 사례로 정보 검색, 데이터 마이닝, 자연언어처리, 컴퓨터 비전 등의 분야에 대해 살펴본다

물론 회귀분석의 기초 밖에 없는 상태에서 저 위의 고급 수업들을 쉽게 이해하기는 어려울 것이라고 짐작되고, 필자 역시도 학부 고학년 수업들을 제대로 이해하고 학부를 졸업한 건 아닌데다, 교수님들 수업이 도무지 뭔 말인지 못 알아먹을 4차원 언어로 구성되어 있다는 점은 백분 공감한다. 또 1번 이외에 다른 수업들은 최근까지 각광받지 못했던 수업이라 듣는 사람도 적었을 것이고, 수업 자체가 열린 적이 없었을 수도 있다.

또, 일부 대학원 가는 애들이나 저런 고학년 수업을 열심히 듣지, 그냥 대충 기업에 취업하려고 코딩이나 열심히하는 일반 컴콩과 학생들은 그런 고급(?) 수학 모르고 졸업했다고 주장할 수도 있다. 경제과에도 고시치는 애들 중에 고학년 계량경제학, 시계열 듣고 졸업하는 애들 없으니까. 기업들이 “머신러닝 개발자 과정” 열어놓고 정작 열심히 코드 Copy & Paste 하는 수업들만 유치할 수 밖에 없는 것도 같은 문제 때문일 것이라는 것도 이해한다.

하지만, 저 수업들이 학부 과정에 개설되어 있다는 뜻은, 적어도 학부 과정에서 다룰 수 있는 내용이고, 필요한 수학과 통계학을 학부 3학년 이전에 어느 정도는 공부했었다는 반증일 것이다. 단순한 Copy & Paste 코딩말고 수학 & 통계학 말이다. 그렇지 않았다면 저런 수업들이 전부 대학원에 올라가 있었겠지.

학부 때 쓰는 수학이 컴퓨터 공학과나 경제학과나 별 다를 바 없다는 걸 눈으로 확인하고나니, 경제학부 2-3학년 수학으로 구성해놓은 수업이 다른 것도 아니고 “수학” 때문에 어렵다는 건, 아무리 좋게 봐줘도 변명에 지나지 않는다는 걸 깨닫게 된다.

학부 때 본 수학보다 쉽게 만든 수업에도 수학이 너무 어렵다고 불평하는 공대생들은 학부 졸업장을 다시 쳐다보고 반성하셔야 된다. 계속 불평할려거던 공대 졸업했다고 하지말고, 어디 코딩 부트캠프 졸업했다고 해라. 그래야 자기 학교 명성이라도 실추시키질 않지. 

 

 

통계학과 수업들

그럼 통계학과에는? 필자가 가르치는 수학 & 통계학 내용이 너무 어려워서 통계학과 대학원 과정에만 있는건가? 통계학과 학부 수업들 리스트도 뒤져봤다. 

1. 데이터마이닝 방법 및 실습

4학년 수업이고,

  • 대용량 자료의 분석을 위한 자료의 전처리과정 (ex. 자료의 범주화, 자료의 선택) 등을 배우고
  • 회귀분석을 시작으로, 로지스틱 회귀, 의사결정 나무, 신경망 모형, 군집분석, 연관성 분석 등에 대한 개요 및 컴퓨터를 이용한 모형구축 방법에 대하여 배운다
  • R, SPSS, SAS 등의 다양한 통계 프로그램을 이용한다

이거 딱 필자가 MIT 에서 들었던 수업의 학부 버젼이고, 학부 과정에 있다는 건 학부생들이 충분히 감당할 수 있다는 뜻이다. (나는 심지어 이거보다 쉽게 가르칠텐데? 그리고 다른 4학년 수업들 – 시계열, 베이지안 등등 – 에 비해서 훠~얼~씬 쉬워보인다.)

 

2. 함수 추정의 응용 및 실습

역시 4학년 수업이고,

  • 통계 모형에 나타나는 함수에 대하여 비모수적 추정 방법을 배우며, 이론보다 주로 방법론 및 응용에 초점을 맞춘다
  • 커널 추정법, 다항 적합법, 스플라인 추정법 등을 다룬다
  • 분류 및 판별 분석, 일반화 선형 모형, 중도 절단 회귀 모형 등에 응용하는 방법을 간략하게 소개한다.

용어가 약간 부담스러우신 분들을 위해서 쉽게 풀이하면, 커널(Kernel) 추정법이 데이터를 커널(함수, y= f(x))에 통과시킨 다음, 다른 공간으로 이동시켜서 내가 원하는 추정을 진행한다는 뜻인데, 수업 시간에 직선으로 분류가 안 되는 SVM 케이스를 제곱, 세제곱 평면을 추가한다던가, 정규분포 Kernel을 이용해서 non-linear 분류를 해주는 hyperplane을 찾는다던가 하는 작업이다.

다항적합법은 말 그대로 비선형 함수를 다항함수로 찾아내주는 내용 (y = a x^1 + b x^2 + c x^3 + …, 필자의 수업 첫 시간에 나온다), 스플라인 추정법은 수학 & 통계 시간에 잠깐 설명하는 Interpolation의 통계학과 용어다. (굳이 따지자면 Interpolation이 통계학을 Finance에서 활용하는 용어겠지만)

분류 및 판별 분석이라는게 Classification 작업이고, 그 뒤에 나오는 다른 모델들도 데이터의 형태에 맞게 fitting 해주는 함수를 찾는 (좀 고차원적인) 작업들이다.

 

3. 통계계산

역시 4학년 수업이고,

  • 컴퓨팅 파워의 발전으로 이전에는 상상할 수 없었떤 복잡한 통계모형을 사용할 수 있게 되었다
  • Markov Chain Monte Carlo (MCMC) 기법을 배운다
  • 통계 계산에 필요한 자료 구조와 행렬계산 등 다양한 계산 알고리즘들을 다룬다

MCMC는 기존 데이터의 특성을 뽑아낸 다음, 그 특성을 담은 Simulation을 할 때 아주 잘게 쪼갠 particle이 뭉쳐져서 큰 분포함수를 구성해낸다는 아이디어고, 머신러닝에서 대표적으로 쓰이는 곳은 강화학습 (Reinforcement learning)할 때 모델 Free인 경우 (아마 일반에는 Q-learning으로 알려져 있을 것이다) 대규모 Simulation으로 결과값을 찾아가는 과정에 활용된다. (Policy learning 이라고 부른다.) 그 이외에 대형 행렬 계산하는 부분에서 PCA에 대한 기본 지식, Neural net 계산이 사실상 행렬 계산이라고 했던 부분을 커버하실 것으로 보인다.

이외에도 베이지안, 시계열, 확률과정론 등등 필자가 경제학 대학원에나 가서야 배웠던 좀 무거운 내용들이 통계학과 학부 고학년 수업에 쫘악 포진되어 있다. (물론 이런 내용들은 8회짜리 데이터 사이언스 강의에서 못 다룬다. 안 그래도 초죽음 상인데…)

 

나가며

(Source: KBS 드라마 IRIS) – 벙찐 표정

처음 이 강의를 시작했을 때, 찾아왔던 학생들이 정말 엄청나게 충격먹은 표정으로 앉아있었던 기억이 난다. R Studio 콘솔창을 열고 그 날 다룰 코드가 수업 시간에 본 수학 개념이라는 걸 설명해나가기 시작하면 눈이 @.@ 상태로 된 걸 보면서 정말 너무 괴로웠었다. “내가 이렇게 못 가르치나?”, “이거보다 더 수학을 빼면 어떻게 가르쳐야되는거지?”

그러다가 권재명 박사님의 데이터 사이언스 책에 서평을 달아놓은 개발자들이 그렇게 쉽게 써 놓은 책의 수학도 이해못해서 “수포자에게 힘들다”라는 둥, “수학이 많이 어려워서 다시 공부해야겠다는 생각이 들었다”는 둥의 평을 하는 걸 보고 시야가 좀 많이 바뀌었다. 수학 때문에 머리를 쥐어짜야하는 전공들 상황은 다 똑같구나…

이번에 모교 통계학과랑 컴퓨터 공학과 학부 교과과정을 보면서, 그렇게 수학이 어렵다고 불평하며 도망갔던 사람들은 그냥 수준이 낮은 사람들이라는 결론을 내려본다. 그리고 어쩌면 그렇게 수학을 포기한 사람들이다보니 타협점으로 “개발자”의 길을 택했을 수도 있겠다. 수학 안 하는 단순 코딩은, 머리를 안 or 덜 써도 되는 쉬운? 길이니까. 학부 고학년부터 “개발”과 “연구”의 길이 나뉘고, 수학 때문에 “개발자”의 길로 타협했던 사람들은 “연구”의 길에서 만나게 되는 수학을 피했었니까, 그래서 그렇게 수업시간에 벙찐 표정을 지었나보다. 그래서 지금까지 내가 “머신러닝 개발자 과정”이라는 수업들에 코웃음을 칠 수 밖에 없었고.

필자도 군 복학하던 2학년 2학기에, 그리고 직장에서 머리 리셋되고 런던에 처음 유학갔을 때 다시 수학 공부하느라, 수학 살려낸다고 2번이나 힘들었던 기억이 난다. 당연히 그 때 힘들게 복구시켰던 수학이 지금에 와서는 우습게 보인다고해서 쉽다고 생각하지는 않는다. 어려울 것이다. 그래도 학부생들이 감당할 수 있는 내용이니까 학부에 수업이 개설되어 있지 않겠는가? 수업에와서 아예 포기하는 이른바 “수포자”들은, 듣기 불편하겠지만 그냥 코드만 Copy & Paste하는 3류가 되거나, 자신의 한계를 받아들이고 포기하라고 조언하고 싶다. 반대로, 이걸 정말 배우고 싶고, 내 능력의 일부로 삼고 싶다면 꾹 참고 수학 머리 복구시켜라.

그나저나, 학부에 저런 수업생기는데, 이제 슬슬 강의 그만둬도 되겠다. 학교 교수들은 자존심 때문에라도 부트캠프처럼 가르치진 않겠지.

X