한창 머신러닝 붐이 일어나던 2년 전쯤 텐서플로우와 케라스를 활용해서 기본적인 선형회귀 정도를 해본 이후로는 딱히 공부라 할 만한 것을 하지 않고 있다가, 작년 연말에 다시 공부를 시작했었다. GAN 샘플 돌려보는 수준까지를 목표로 했었지만 회사 일이 바빠지면서 RNN을 조금 살펴보던 상태에서 또다시 멈추게 되었다. GAN까지는 아니더라도 RNN 정도는 이해를 해야 가변길이의 데이터로 어떻게 머신러닝을 하는지 이해할 수 있을거라 생각해서 그 때 RNN까지 제대로 보지 못했던 게 계속 마음에 걸려있었다. 단어 하나하나는 그 단어가 지니는 속성을 정하고 그 속성들을 수치화해서 벡터로 바꾸면(나중에 이것이 word embedding이라는 것을 알 수 있었다) 되지 않을까 짐작했었지만, 각각의 데이터샘플의 길이가 다른 경우 어떻게 고정된 크기의 벡터로 바꿔서 처리하는지가 의문으로 남아있었다.
그러던 차에 회사에서 MOOC 수강을 지원해주는 프로그램이 개설되었다는 안내 메일을 받았다. 인공지능 외에도 여러가지 분야의 과목들을 들을 수 있었는데, 나는 RNN 공부를 마무리하지 못한 것에 대한 아쉬움이 계속 남아있었기 때문에 인공지능 분야의 과목들을 살펴봤다.
여러 MOOC 강의들을 살펴보다가 Coursera에서 Deeplearning.ai가 제공하는 Sequence Models 수업을 신청했다. Coursera 학습 프로그램은 Specialization 과정과 일반 과정이 있는데, 특정 분야에 대해 연관이 있는 일반과정을 초급부터 중급까지 몇 개를 모아서 만든 것이 Specialization 과정이다. 기왕이면 기초부터 중급까지 다 훑어보면 좋겠지만, 나는 머신러닝 Specialization 과정에 있는 대부분의 내용들을 이미 독학했고, sequence를 다루는 부분을 남겨두고 있던 터라 더이상 기초적인 부분에 시간을 낭비하기 싫어서 Sequence Models만 신청하기로 했다. 대학에서 개설한 머신러닝 수업도 욕심이 났었지만 왠지 다른 과정보다 hard할 것 같은 느낌도 들고, 앞으로 업무량이 어떻게 될지 모르기 때문에 너무 큰 욕심은 부리지 않기로 했다.
그리고 과목을 고르면서 이론적인 부분보다는 좀 더 practical한 부분을 다루는 과목을 들을까 하는 생각도 있었다. 나중에 혹시 머신러닝과 직접 연관된 task를 할 일이 생기더라도 직접 모델을 연구 개발하고 튜닝하는 science 업무 보다는 구현품질을 개선하는 등의 engineering 업무를 하게 될 가능성이 크기 때문이다. 하지만 그런 내용들은 어차피 라이브러리나 프레임워크 문서(+ stackoverflow)들을 보면서 몸으로 익혀야하는 것들이라 기왕 수업 형태로 듣는 거라면 이론적인 이해를 더 보강하는 것이 좋겠다는 생각이 들었다. 혼자 해보다가 정 안되겠다 싶으면 그 때 수강해도 되고.
수업을 들으면서
수업은 3주 과정이고 각 주별로 1~2시간 정도의 수업 영상과 20분짜리 퀴즈, n시간 프로그래밍 과제로 구성되어있었다. 수식이 종종 나오기는 하지만 고등학교 수준의 수학과 수학적 notation에 어느 정도 익숙한 사람이면 크게 어렵지 않게 알아볼 수 있는 수준이었다.
수업이 다루는 주제는 다음과 같다.
- RNN의 기본 개념
- GRU
- LSTM
- NLP
- Attention Model
주로 출퇴근길에 영상을 보고 퀴즈를 풀고 주말에 프로그래밍 과제를 하는 식으로 진행했다. 퀴즈 난이도도 적당했던 것 같다. 수업 내용의 디테일을 묻기보다는 핵심 개념을 이해했는지를 판단하는 정도의 질문들이어서 부담스럽지도 않고, 퀴즈를 풀다보면 배운 내용들에 대해 저절로 복습이 이루어졌다.
프로그래밍 과제는 Jupyter notebook으로 구성되어있는데, 프로그램을 실행해볼 수 있도록 어느 정도 밑바탕 코드가 작성된 상태에서 핵심 아이디어를 구현하는 부분을 빈칸 채우기 처럼 구현하는 방식이었다. 코드를 작성하고 테스트해보다가 맞다고 생각되면 제출한다. 과제를 제출하고나면 grade가 나오는데 각 과제마다 통과를 위한 최소점수가 다르다. 틀리면 다시 시도할 수 있는데 너무 자주 제출할 수는 없고 제약이 있다. 거의 마지막 즈음에는 과제 코드 자체에 문제가 있는 경우도 종종 있어서 조금 헤메긴 했지만 토론 게시판에 어지간한 이슈들은 해결방법이 나와있어서 도움을 받을 수 있다. 모델이 어떻게 코드로 표현되는지를 익히기에는 충분한 수준이었던 것같다.
뿌듯
다른 일 하면서 수업듣고 과제하는 게 쉬운 일이 아닌데 끝까지 따라와줘서 고맙고 축하한다는 멘트가 마지막 영상에 있었는데 왠지 뿌듯했다. 수업을 들어보기 전에는 수료증 같은 것들도 ‘어차피 듣기만 하면 다 나오는 거 별 의미가 있나’ 했었는데 막상 받고보니 엄청 기분이 좋다.
3주 과정이지만 거의 6주 정도 걸린 것 같다. Due date를 리셋할 수 있어서 계속 연장하면서 했다. 이것도 수강하기 전에는 ‘어차피 계속 연장할 수 있으면 애초에 뭐하러 설정해두는 거지?’ 하는 생각이었는데, 나중에 연기될지라도 due date가 있는 것과 없는 것은 생각보다 차이가 큰 것 같다. 일단 정해진 날짜가 있으면 좀 더 긴장하고 ‘오늘은 강의 영상 하나라도 더 봐야지’ 하는 생각이 들었다. Due date가 너무 많이 지나버리면 아마 중간에 포기해버리고 안하게 됐을 것 같다. 이미 due date가 16일이나 지나버린 일을 붙들고 있는 것과, 연장해서 4일 남은 걸 붙들고 있는 건 마음가짐이 다르다. 긴장을 늦추지 않으면서 포기하지 않고 수업을 끝까지 듣게 해주는 좋은 장치였다고 생각한다.
그리고 신청할 때는 몰랐는데, Sequence Model이 Machine Learning Specialization 과정의 가장 마지막 코스였다. 이제 머신러닝에 대해 기본적인 개념들을 한 번씩 맛은 봤다고 할 수 있지 않을까 하는 생각에 조금은 자신감이 생긴 느낌이고 최종적으로는 GAN까지 다뤄보고 싶다. 그리고 나중에 다른 수업도 들어보고 싶다.