brunch

You can make anything
by writing

C.S.Lewis

by null Jan 20. 2016

머신러닝, 제대로 배우는 법

Coursera만 열심히 들어도 머신러닝의 중수는 될 수 있다!

요즘 머신러닝이 대세긴 한가보다. 구글의 전 CEO이자 이제 지주회사 알파벳의 회장이 된 에릭 슈미트는 작년에 한국에 방문하여 "머신러닝이 우리 삶 바꿀 것"이라 말하고, 세계 최고의 경영 대학이라는 하버드 비즈니스 스쿨에서는 "데이터 사이언티스트가 21세기 가장 섹시한 직업"이란다.


머신러닝의 멈출줄 모르는 인기 / 출처: 네이버 트렌드


그 영향인지 주변에 머신러닝을 공부하겠다는 사람이 하나둘씩 늘어나고 있다. 컴공과뿐만 아니라 수학과, 전자과, 경영학과까지. 전공도 참 다양하다. 언어학 전공자가 텍스트 분석을 하기 위해 자연어처리(NLP)와 머신러닝을 공부하는 경우도 있다고 한다.


이러한 니즈에 발맞춰, 머신러닝을 소개하는 좋은 자료들도 점점 늘어나고 있다. 구글에 머신러닝을 검색해보면 수많은 소개글을 찾을 수 있다. 작년에는 코세라 인기강의인 앤드류 응의 머신러닝 강의를 번역한 수학을 포기한 직업 프로그래머가 머신러닝 학습을 시작하기위한 학습법 소개라는 글이 한창 유행하기도 했다. 지면이 부족하여 모두 소개할수는 없지만, 이 글 말고도 머신러닝에 대해 쉽고 재미있게 설명한 글들이 많았다.


수포자를 위한 머신러닝 학습법 / 출처: More Agile 블로그


머신러닝을 공부하는 사람으로서 일반인들에게 머신러닝을 쉽고 재미있게 풀어서 설명해주는 글이 늘어난다는건 참 바람직한 방향이라고 생각했지만, 한편으로는 대부분의 글들이 입문 수준을 벗어나지 못한다는 아쉬움이 있었다. (얼마 전에 K-MOOC에 카이스트 김기응/오혜연 교수님의 인공지능과 기계학습이라는 강의가 올라오긴 했지만, 아직 한글로 된 고급 자료는 많지 않은 것 같다.)


그래서, 비록 아직 나도 공부하는 입장이지만, 그래도 지난 1년간 공부해본 경험을 바탕으로 어떻게 하면 머신러닝을 제대로 배울 수 있을지 생각을 한 번 정리해보았다.


※ 주의:이 글은 머신러닝 연구자를 목표로 하는 사람들을 대상으로 쓰여졌습니다. 이 글에서는 머신러닝 이론을 어떻게 공부해야 하는지를 다룹니다. 머신러닝에 대한 개괄적인 설명을 바라고 들어오신 분, 혹은 현업에서 머신러닝을 실제로 구현하여 결과물을 만들어내야 하는 분들께는 적합하지 않을 수 있습니다.




결론은 간단하다. 코세라, 나아가 구글과 유투브만 잘 활용해도 머신러닝에 대한 대부분의 것들을 배울 수 있다. 이 글에서는 코세라 대표 머신러닝 강의 3개를 소개하고, 이 세 과목을 어떤 순서로 공부하면 좋을지 테크트리를 설명할 것이다. 나아가, 코세라 강의를 마친 이후에 추가로 더 볼만한 자료들을 소개할 것이다. 여기 써있는 것만 다 봐도 어디가서 머신러닝 공부해봤다고 당당하게 말할 수 있을 것이다.


코세라 머신러닝 강의 목록 / 출처: Coursera 사이트


코세라는 수백개의 강의를 담고있는 온라인 강의실이다. 이 중에 데이터과학과 머신러닝에 관련된 강의만 수십개 가까이 된다. R이나 파이썬 같은 컴퓨터 언어를 가르치는 강의, 엑셀을 활용하여 실무 데이터를 다뤄보는 강의, SQL, 하둡 등 데이터베이스를 알려주는 강의 등, 그 종류도 참 다양하다. 그러나 이 글에서는 머신러닝, 그 중에서도 머신러닝 이론을 설명하는 강의를 소개할 것이다.


코세라에는 3개의 대표 머신러닝 강의가 있다. 첫째는 앤드류 응(Andrew Ng)의 Machine Learning, 둘째는 다프네 콜러(Daphne Koller)의 Probabilistic Graphical Model, 그리고 셋째는 제프리 힌튼(Jeoffrey Hinton)의 Neural Networks for Machine Learning이다. 특히 앤드류 응과 다프네 콜러는 코세라의 창립자로, 말 그대로 코세라의 간판 강의라고 볼 수 있다. 또한 제프리 힌튼은 요슈아 벤지오, 얀 르쿤과 함께 2006년 이후 세계에 딥러닝 열풍을 불러온 딥러닝의 대가 중 한 명이다.


머신러닝의 분야는 정말 넓고, 상상하는 것 이상으로 다양한 문제들이 있다. 그러나 나는 위에서 언급한 세 과목: 머신러닝, 그래피컬 모델, 뉴럴 네트워크가 모든 세부분야의 기초가 되는 내용이라고 생각한다. 뒤에서 다시 언급하겠지만, 머신러닝의 전반적인 기초를 닦으려면 앤드류 응 강의를 넘어서 머피 혹은 비숍 책을 읽어야 한다. 이 책까지 읽으면 앞으로 무엇을 공부해야 할지 혼자서 찾을 수 있을 것이다.


그럼 이제 각각의 과목들에 대해 소개해보도록 하겠다.




(1) Andrew Ng - Machine Learning


머신러닝을 공부하려면, 당연히 머신러닝 개론을 가장 먼저 들어야 한다. 앤드류 응 강의는 머신러닝 입문자에게 가장 많이 추천하는 강의이다. 수식은 꼭 필요한 것만 사용하고 대부분의 내용을 직관적으로 설명하여, 처음 공부하는 사람이 개념을 잡기 좋다. 이 강의에 대한 내용은 다른 글에서도 많이 다루고 있으므로 굳이 여기서 더 자세히 설명하지는 않겠다. (수포자를 위한 머신러닝 학습법 참고)


코세라 버전 외에도 유투브에 들어가보면 앤드류 응이 스탠포드에서 강의한 동영상을 찾을 수 있다. 2008년에 찍은거라 화질은 좋지 않지만 코세라 버전보다 좀 더 깊게 가르친다고 하니 코세라 버전이 성에 안 차는 사람은 참고해보면 좋을 것 같다. 강의노트는 스탠포드 강의 사이트에 올라와있다.


앤드류 응 강의의 대체재로 칼텍 Yaser Abu-Mostafa 교수의Learning From Data 강의도 유명하다. 또한 수학적 배경이 어느정도 있다면 듀크대에서 포닥을 하고있는 Jeff Miller (mathematicalmonk)의 Machine Learning 강의을 봐도 된다. 두 강의 다 직접 들어보진 않았지만, 목차만 봤을땐 앤드류 응 강의나 Yaser 강의가 더 나은 것 같다. mathematicalmonk 강의는 다루는 주제가 넓어 오히려 본질을 흐릴 수 있을 것 같다. 이 강의는 앤드류 응 강의를 마친 후 (1-1) 심화과정으로 넘어가기 전에 보는게 적당할 것 같다.


앤드류 응 강의를 모두 마쳤다면, 크게 세 가지 선택지가 있다. 첫째는 머신러닝 전반을 조금 더 깊게 공부하는 것이고, 둘째는 Graphical Model을 공부하는 것, 셋째는 Neural Network를 공부하는 것이다. 이 중에 어떤걸 먼저 선택하더라도  상관없다. 어차피 모든 내용들이 조금씩  얽히고설켜있기 때문에 처음에는 이해가 잘 안 가더라도 나중에 다시 보면 아 그때 말한게 이거였구나 깨닫게 될 것이다.



(1-1) Murphy or Bishop - Advanced Machine Learning


머신러닝을 제대로 공부하기 위해서는 머피의 Machine Learning: A Probabilistic Perspective 비숍의 Pattern Recognition and Machine Learning을 봐야한다. 두 책이 장단점이 있다고 하는데 아직 제대로 안 읽어봐서 잘 모르겠다. 개인적으로 비숍이 좀 더 클래식하다는 인상을 받았다. 그냥 서점에 가서 둘 다 훑어보고 더 눈에 잘 들어오는걸로 사면 될 것 같다. (근데 결국에는 두 책 다 사게 된다고 하더라) 머피는 번역서도 있는데, 번역품질은 그렇게 좋진 않았던거 같다.


사실 앤드류 응 강의를 듣고 바로 머피나 비숍으로 넘어오면 조금 어렵게 느껴질 수도 있다. 이 책을 읽기 위해서는 미적분학, 선형대수, 확률/통계 테크닉을 편하게 사용할 수 있어야 하며, 고급 해석학 지식도 조금 필요하다. 만약 메져기반 확률론을 좀 공부해보고 싶으면 위에서 언급한 mathematicalmonk의 Probability Primer 강의를 추천한다. 수학이 받쳐준다면 (1-1) 머신러닝 심화를 먼저 보는 것을 추천하고, 그렇지 않다면 (2) 그래피컬 모델이나 (3) 뉴럴 네트워크을 먼저 보는게 나을 것 같다.


머피/비숍 책은 혼자 보기 어렵고 너무 두꺼워서 독학용으로는 추천하지 않는다. 대부분의 대학원 머신러닝 강의들이 이 두 책을 사용하고 있으니, 검색해보고 마음에 드는 커리큘럼을 따라가면 된다. 나는 포항공대 최승진 교수님 강의를 들었는데, EM과 Mixture 모델 부분은 좋았지만 뉴럴넷 부분은 설명이 조금 빈약했던 것 같다. 구글링을 좀 해본 결과 Tom Mitchell의 강의노트와 INRIA의 요약자료를 찾았는데 어떤 강의자료가 더 좋은지는 잘 모르겠다. (추천해주시는 강의가 있다면 댓글로 남겨주시면 감사하겠습니다)


머신러닝 심화 과정을 마쳤다면, 축하한다. 이제 기본기는 탄탄히 갖춘 것이다. 이제 모르는 분야는 머신러닝의 2대 컨퍼런스인 NIPS와 ICML의 튜토리얼이나 머신러닝 썸머스쿨(MLSS)의 강의자료를 보면 된다. 아니면 논문을 직접 읽어도 된다. 이런 분들께는 감히 내가 더 드릴 말씀이 없다. 이제 다시 코세라로 돌아와서 다음 강의인 Probabilistic Graphical Model에 대해 설명하도록 하겠다.



(2) Daphne Koller - Probabilistic Graphical Model


그래피컬 모델은 머신러닝의 메타 이론이다. 머신러닝에서는 개별 모델들이 어떻게 작동하는지를 배웠다면, 그래피컬 모델에서는 그 모델들을 어떻게 하나의 언어로 통합하여 설명하는지를 배운다. 예를 들어, 우리가 초등학교 때 산수 문제를 풀 때 진분수, 가분수, 대분수, 소수의 경우를 모두 나누어 풀었다면, 중학교 때는 이 모든 문제를 "방정식"이라는 하나의 형태로 묶어서 푸는 것과 비슷하다. 그래피컬 모델은 여러 머신러닝 모델을 하나의 형태로 표현하는 머신러닝 모델의 "방정식"이라고 볼 수 있다.


그래피컬 모델이 머신러닝 모델의 "총론"이라면, 뉴럴 네트워크는 머신러닝 모델의 "각론"이다. 총론을 배워두면 각론을 공부할 때 더 깊게 이해할 수 있고, 각론을 배워두면 총론을 공부할 때 예시를 떠올리며 더 쉽게 이해할 수 있다. 그래서 (2) 그래피컬 모델과 (3) 뉴럴 네트워크는 개인의 학습 스타일에 따라 먼저 보고 싶은걸 먼저 보면 된다. 나는 그래피컬 모델을 먼저 공부했는데, CRF, HMM 등 처음 보는 개념들이 자꾸 예시로 나와서 이해하는데 고생을 좀 했다. 그래도 그래피컬 모델이 더 "기초"가 되는 과목이므로 순서상 앞에 배치했다. (그러나 뒤에서 다시 언급하겠지만, 휴고의 뉴럴넷 강의를 먼저 보고 그래피컬 모델을 보는게 더 나을 수도 있다.)


그래피컬 모델 강의는 크게 세 파트로 구성되어 있다. 표현(Representation), 추정(Inference), 학습(Learning)이 그것이다. 표현 파트에서는 그래피컬 모델의 두 축, 베이지안 네트워크와 마르코브 네트워크에 대해 설명한다. 추정 파트에서는 변수소거, 신뢰전파, 샘플링 기법 등을 활용하여 특정 사건의 발생 확률을 구하는 법을 다룬다. 마지막으로 학습 파트에서는 주어진 그래피컬 모델의 파라미터를 조정하는 방법을 배운다.


여담이지만, 처음 머신러닝을 배울 때 추정과 학습의 차이가 정말 헷갈렸었다. 이 차이를 이해하는게 머신러닝의 개념을 체득하는 중요한 한 걸음인 것 같다. 이에 대한 내용은 다른 글에서 다루기로 하고, 여기서는 다프네 콜러 그래피컬 모델 강의에 대해 좀 더 얘기해보도록 하겠다.


사실 다프네 콜러는 앤드류 응에 비해 강의를 잘하는 편은 아니다. 처음 들을 때 통계물리, NLP 등에서 가져온 복잡하고 생소한 예시들과 수식 없이 뭉뚱그려 넘어가는 설명 때문에 이해하는게 너무 힘들었다. 그러나 다른 각론들을 좀 더 공부하고 다시 강의를 들으니 정말 구성도 알차고 담겨있는 내용이 많은 강의라는 생각이 들었다. 이 강의는 말 그대로 "아는만큼 보이는" 강의인 것 같다. 만약 강의가 이해가 잘 안 된다면, 일단 표현 파트라도 보고, 각론으로 넘어갔다가, 나중에 다시 이 강의로 돌아오는 것도 한 가지 방법이다.


그래피컬 모델에 대한 공부는 이 강의 하나면 충분한 것 같다. 교재는 콜러가 직접 저술한 Probabilistic Graphical Models: Principles and Techniques라는 책이 있긴 한데, 너무 테크니컬한 부분이 많다고 느껴졌다. 그래피컬 모델을 전공할게 아니라면 마이클 조던의 An Introduction to Graphical Models로도 충분한 것 같다. 그리고 Quora에 그래피컬 모델 강좌 추천글이 있는데 만약 코세라 강의가 잘 이해가 안 간다면 한 번 살펴보는 것도 좋을 것 같다. 이제 마지막으로 Neural network 강의를 살펴보자.



(3) Jeoffery Hinton - Neural Networks for Machine Learning


2013년 AlexNet의 ILSVRC 성공 이후 딥러닝이 머신러닝 방법론의 대세가 되었다. 아마 지금 머신러닝에 관심 가지시는 분들 중 상당수가 딥러닝에 관심을 가지고 계실 것이다. 딥러닝을 공부하기에 앞서, 딥러닝의 역사에 대해 한 번 알아보자. 사실 뉴럴 네트워크는 1940년대에 처음 등장한 개념으로, 1960년대 XOR 문제의 발견으로 한 번 망했다, 1980년대 역전파 알고리즘의 등장으로 다시 부흥하고, 인공지능에 대한 지나친 기대로 인해 1990년대 또 한 번의 AI winter 시기를 겪었으며, 2006년 제프리 힌튼의 pre-training 기법을 통해 다시 한 번 떠오른, 많은 풍파를 겪은 오래된 개념이다. 이에 대한 자세한 내용은 토론토 대학에서 박사과정을 밟고있는 엄태웅님의 쉽게 풀어쓴 딥러닝(Deep Learning)의 거의 모든 것를 보면 된다. 아마 처음에 보면 무슨 말인지 이해가 잘 안 갈 것이다. 코세라 강의를 들으면 이 글에 적힌 내용을 하나하나 이해해나갈 수 있다.


제프리 힌튼의 강의를 설명하기 앞서, 또 하나의 뉴럴 네트워크 강의를 소개하고 싶다. 힌튼의 제자인 휴고 라로첼(Hugo Larochelle)의 유투브 강의이다. 파트 (2)에서 그래피컬 모델은 "총론"이고, 뉴럴 네트워크는 "각론"이라는 이야기를 했었다. 그러나 뉴럴 네트워크 안에서 또 나눠보면 힌튼의 강의는 "총론"이고, 휴고의 강의는 "각론"이라고 볼 수 있다. 힌튼의 강의는 퍼셉트론부터 시작해서 RNN, CNN 등 비교적 최신의 개념까지 가능한 직관적으로 설명하는 반면, 휴고의 강의는 오토인코더와 RBM 등 기본적인 모형만 다루지만 좀 더 엄밀한 수식을 추구한다. 두 강의 모두 장단점이 있으므로 둘 다 보는 것을 추천한다. 순서는 파트 (2)에서 말했던 것과 마찬가지로 자기 학습 스타일에 맞게 들으면 된다. (개인적으로 휴고 강의를 먼저 보는걸 추천한다.)


힌튼도 앤드류 응에 비해 강의를 잘하는 편은 아니다. 콜러도 그렇고 힌튼도 그렇고 강의 전달력은 조금 아쉽지만, 중요한 내용을 많이 다루고 있으므로 어쩔 수 없이 들어야 한다. 힌튼 강의의 가장 큰 문제는 강의 흐름이 좀 뜬금없다는 것이다. 역전파 알고리즘을 설명하고 예제로 넘어가더니 갑자기 다시 최적화 문제로 돌아온다. 그리고 이번엔 RNN을 설명한다. 필요한 내용은 모두 담겨있지만, 처음 공부하는 사람은 이해하기 힘들 것 같다. 또 하나 마음에 안 드는 점은 슬라이드가 부실하다는 점이다. 슬라이드를 보는데 중요한 내용이 뭔지 눈에 잘 안 들어왔다. 반면, 휴고 강의는 흐름이 더 자연스럽고 슬라이드가 한 눈에 딱 딱 들어왔다. 또한 휴고 강의는 CRF, HMM 등의 내용도 다루어 그래피컬 모델 강의를 이해하는데도 도움이 된다. 다시 한 번 강조하지만, 휴고 강의는 코세라 두 강의의 좋은 보완재이다. 꼭 듣는 것을 추천한다.


힌튼과 휴고 강의를 통해 총론과 기본기를 쌓은 사람이라면, 비전이나 NLP 등 실제 문제에 적용해보고 싶은 마음이 들 것이다. 이러한 사람들에게는 스탠포드의 Convolutional Neural Networks for Visual Recognition 강의와 Deep Learning for Natural Language Processing 강의를 추천한다. 사실 이 부분은 아직 공부를 안해봐서 잘 모르겠다. 마지막으로, 딥러닝 교과서는 요슈아 벤지오의 Deep Learning 책이 바이블인 것 같다. 아직 온라인 버전밖에 없어서 보기는 좀 불편하지만 공짜로 볼 수 있으니 감수하자.




정리하자면, 코세라 머신러닝 (이론)강의는 앤드류 응의 머신러닝, 다프네 콜러의 그래피컬 모델, 제프리 힌튼의 뉴럴 네트워크, 이렇게 3개로 구성되어 있다. 머신러닝을 제대로 공부하려면 이 세 과목은 필수적으로 봐야한다고 생각한다. (콜러와 힌튼의 강의실력은 조금 아쉽지만 어쩔 수 없다) 여기에 추가로 휴고 라로첼의 강의를 같이 보면 더 좋다. 휴고 강의는 콜러와 힌튼 강의의 좋은 보완재이다. 이렇게 코세라만 열심히 봐도 머신러닝의 기본기를 탄탄히 쌓을 수 있다. 여기에 머피나 비숍 책까지 보면 금상첨화이다.


아직 공부가 부족한 학생이지만, 혹시 머신러닝을 공부하는 다른 사람들에게 도움이 될까 싶어 주제넘게 글을 써보았다. 머신러닝을 공부하면서 한 가지 좋은 점은 온라인에 좋은 자료들이 많다는 것이다. 코세라와 유투브, 구글링만 잘 활용해도 공부할거리는 무궁무진하다.


머신러닝을 공부하고 싶다면, 지금 당장 코세라에 들어가라.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari