Machine Learning이 궁금해서 Coursera의 Machine Learning by Stanford University 강의를 들었다. 검색을 조금만 해봐도 쉽게 알 수 있지만 이 강의는 매우 유명하다. 처음 선택할 때는 유명세만 보고 골랐지만 수업이 다 끝난 지금 생각해보면 영어의 압박은 있지만 꽤 괜찮은 시작이라는 생각이 든다. 강의를 들은지 시간이 좀 됐지만 조금 남은 느낌마저 사라지기 전에 후기를 남겨본다.
강의는 모두 11주로 구성되어 있다. 1, 10, 11주는 강의만으로 구성되고 2~9주의 경우에는 실습이 추가되어 있다. 보통 1~5시간 분량의 강의로 구성되나 실제 사용한 시간은 2배 정도였던 것 같다. 비디오 중간 중간에 정신도 차려야 하고, 이해 못하는 부분은 찾아보기도 해야 하고. 또한 벡터에 대해 무지한 상태가 아니었음에도 불구하고 간만에 들여다보는 벡터를 이해하는데도 시간이 꽤 필요했다. 주말에 수업을 몰아 들었는데 대부분 이틀에 나눠서 수업을 들었다. 하루는 강의 비디오만 보고 다른 하루는 실습 문제를 푸는 방식이었다. 이틀 중 실습 문제를 푸는 날은 약속을 잡기가 상당히 부담스러울 정도였다. 특히 강의 초반에 어느 정도 강의 내용에 익숙해지기 전까지는 모르는 부분을 찾아보고, 코드도 이렇게 저렇게 돌려보고 하다보니 거의 하루를 다 썼던 적도 있다. 하루에 다 끝내고 싶으신 분이라면 실습이 있는 주는 다른 약속 없이 온전히 하루를 투자하는 것을 계획을 세우시는 편이 좋을 것이라 생각한다.
이 강의를 듣기 시작할 때 부담없이 시작했던 것 중에 하나는 한글 자막이 있었기 때문이다. 하지만 2장부터는 한글 자막이 없어 '아차..' 하는 느낌이었다. 그 순간의 절망감이라니. 간만에 결심하고 시작했는데 멈추기는 아쉬워서 영어 자막을 켜놓고 수업을 들었다. 아무래도 이해가 안되는 부분이 있을 수 밖에 없었는데 이런 경우에는 앞뒤를 다시 찾아보거나 한국어로 된 강의 노트를 검색하는 방식으로 해결했다. 아무래도 한글로 된 것을 보니 도움이 많이 됐다. 전체 강의 노트가 있지는 않아서 강의 후반부에는 맨땅에 헤딩하듯 스크립트를 보고 보고 또 봤다. 지금 살펴보니 4강까지 한글 자막이 추가되어 있으니 참고하시길.
다른 ML 강의를 들어본 적이 없어서 비교할 수는 없지만 이 강의는 상당히 쉽다는 인상이다. 아무래도 수강생을 기본 지식이 없는 사람들로 설정해서인지 복잡한 수학적인 내용은 그냥 넘어가고 꼭 필요한 내용만 언급한다. 설명도 이해하기 쉽다. 언어의 1차적 장벽에도 불구하고 내용 자체를 이해하기 어렵다고 생각한 적이 별로 없다. 나중에 다른 강의를 찾으면서 이 강의에 대한 평을 봤을 때, 비슷하게 느낀 경우가 많은 것으로 봐서 앤드류 응 교수가 강의를 잘하는 편이라는 생각이 든다. 하지만 벡터에 대한 기본적인 지식이 없다면 강의를 이해하기 어려울 것이라고 생각한다.
프로그래밍 숙제는 Octave로 푼다. 이 강의에서 처음 들은 프로그램인데 Matlab과 유사한 것 같다. 이 강의에서만 사용할 수 있는 무료 Matlab도 제공하고 있어 처음에는 Matlab을 설치할까도 고민했는데, 동영상에서 Octave로만 설명하길래 익숙하지 않아도 Octave를 설치했다. 강의 내내 Octave로만 설명하므로 특별히 Octave를 사용하는데 거부감이 있는 것이 아니라면 Octave를 설치하는 것을 추천한다.
프로그래밍 숙제를 하면서 처음에 애먹었던 것은 두 가지 정도다. 하나는 강의 내용의 수식을 실제 벡터 혹은 숫자로 표현할 때, 100% 동일하게 표현(=강의 내용의 수식을 프로그램으로 그대로 옮기는 것)되지 않는다는 점이다. 강의 내용과 벡터에 대한 이해가 있다면 쉽게 넘어갈 수 있는 부분이긴 한데 간만에 공부라는 것을 하다 보니 이 부분을 이해하고 프로그램이 동작할 수 있게 수정하는데 시간이 걸렸다. 두 번째는 여러 개의 수식을 한 번에 계산할 수 있도록 수식을 벡터화하는 부분이다. 이것도 이해하고 나면 그렇게 어렵지 않다. 주로 애먹었던 부분은 벡터화를 한 뒤, 그 값 중에 하나를 수정, 추출, 제거하는 부분이었다. 아무래도 벡터 연산을 해본지가 너무 오래되다 보니 머리 속에 아무런 생각이 없었던 것 같다. 특히 글로 설명되어 있는 부분을 벡터 연산으로 표현하는 과정이 연습이 안되어 있다보니 더 어려움을 겪었다는 생각이 든다. 이 두 가지에 익숙해지고 나니 프로그래밍 숙제를 하는데 속도가 붙었던 것 같고, 문제도 처음보다 편하게 풀 수 있었다.
프로그램을 짤 때는 게시판에 공개되어 있는 테스트 케이스를 활용했다. 실제 문제에서 제공되는 샘플로 프로그램을 짜기에는 실행 시간이 너무 오래 걸리는 문제가 있다. 내 컴퓨터가 8년 정도 된 녀석이라 느리기도 해서 최신 컴퓨터라면 어떨지는 모르겠다. 이런 문제가 나만의 문제는 아니었는지 테스트 케이스가 공개되어 있고, 이 테스트 케이스를 활용해서 문제를 풀었다. 그리고 테스트 케이스를 모두 잘 통과하는 경우에만 실제 샘플을 실행시켜봤다. 테스트 케이스를 통과한 후 실제 문제에서 실패하는 케이스는 없었던 것으로 기억한다. 만약 기대대로 동작하지 않는다면 강의에서 제공되는 코드에 오류가 있을 수 있으므로 게시판을 꼭 살펴보기 바란다. 가능하면 문제를 풀기 전에 게시판에서 errata를 먼저 찾아본 후에 시작하면 더 나을 것이다.
문제를 풀다가 막히는 경우에는 먼저 게시판을 뒤져봤다. 강의의 거의 마지막에 프로그래밍 숙제를 주로 하다보니 이미 다른 사람들의 글이 올라와 있는 경우가 대부분이었는데 내 문제를 해결하는데도 도움이 많이 됐다. 내가 겪는 문제와 같은 문제를 올린 사람도 있고, 겪어 보지 못한 문제를 올린 사람도 있었다. 앞에서 언급한 코드의 오류에 대한 이야기도 여기서 처음 발견할 수 있었다. 여기서도 해결하지 못한 경우에는 구글을 검색했다. 아무래도 강의가 오픈된 강의다보니 프로그래밍 결과를 인터넷과 같은 곳에 올리지 말라는 안내(경고?)가 있는데 그럼에도 불구하고 검색하면 어렵지 않게 답을 찾을 수 있다. 중간에 정말 고민해도 답을 모르겠던 적이 있어서 한 번 답을 참고한 적이 있다. 너무나 쉽게 문제를 해결해서 너무 어이가 없을 정도였다. 하지만 그 코드를 보고 벡터에서 특정 값 하나를 수정하는 방법을 이해하게 되서 도리어 그 다음부터는 검색 없이도 문제를 푸는데 도움이 됐으니 나름 꼭 필요했던 검색이 아니었나 하는 생각이 든다. 프로그래밍 숙제는 전반적으로 해답이 어렵지 않으니 꼭 직접 풀어보기를 권한다.
11주 간의 강의를 듣고 나니 뭔가 많이 아는 것은 아니었지만 ML이 안개 속에만 있다가 어렴풋하게 그 거대한 모습을 본 것만 같은 느낌이었다. 막상 실무에 적용하기에는 너무 기초적인 내용이라 이것 만으로는 뭔가 하기 어렵겠지만 그래도 첫 단추로써는 매우 훌륭한 강의라고 하겠다. 처음 ML을 시작하는 분들에게 충분히 추천할만한 강의다.
이 강의를 듣기 시작할 때 어떤 강의를 들을지 고민했던 강의 중에 하나가 유튜브에 있는 '모두를 위한 딥러닝 강좌'였다. 아마 Coursera 강의의 1장이 한글로 되어 있지 않다면 이 강좌를 들었을 것이다. 처음에는 유명인의 강의를 먼저 들어야겠다고 생각했던 것 같다. 하지만 지금 이 시점에서 생각해보면 굳이 Coursera의 강의를 듣기 보다는 '모두를 위한 딥러닝 강좌'를 먼저 듣는 것이 더 낫지 않을까 하는 생각이 든다. 기본적으로 언어의 제약이 없어 이해하기 쉽고 빠르고, 두 번째로는 최신 트렌드가 많이 반영되어 있다. 전반부는 두 강의의 내용이 유사하지만 후반부로 가면 차이가 난다. 무엇을 선택할지는 개인의 취향에 따라 선택하면 될 것이다 (초기 내용 vs 트렌디한 내용)
작년 알파고 이후로 그야말로 광풍이라고 할만한 ML의 바람이 불고 있다. 개인적으로 ML은 거대한 변화를 가져오게 될 것이라고 생각하고 있다. 이런 바람이 어디까지 불어가는지 꾸준히 살펴볼 생각이다.