OMSCS 석사 입학부터 졸업까지

OMSCS 입학부터 졸업까지 (7) - 수강과목 리뷰 3편

Since2015 2023. 3. 3. 23:00

수강과목 리뷰 마지막 편으로 개인적으로 가장 어려운 과목들이었던 졸업 전 마지막 2학기에 들었던 과목들을 리뷰해 보겠습니다.

CS 7641: Machine Learning (난이도 Very Hard) 

ML Specilization의 필수 과목이자 가장 난이도가 높은 머신러닝 과목입니다. 제가 유일하게 B를 받은 과목이기도 합니다. 2022년 Syllabus를 확인해 보니 여전히 같은 내용을 배우고 과제나 시험도 동일한 것 같습니다.

ML의 필수 개념들인 Supervised Learning, Unsupervised Learning, Reinforcement Learning 등을 배우고 과제를 통해서 직접 핵심 알고리즘들 (Decision Tree, KNN, Boosting, Neural networks 등)을 구현해 보고 본인이 직접 선택한 Dataset을 통해서 결과를 확인하고 리포트 형태로 제출해야 합니다. 다른 과목에 비해 어려운 부분이 바로 리포트의 Analysis 부분입니다. 과제에서도 설명하지만 그냥 구현하고 돌아가게만 하는 것은 아무 의미가 없고 thorough and concise 한 분석을 요구합니다. 매우 디테일하게 검토하기때문에 교수가 납득할 정도로 잘 쓰지 않으면 A를 받는 게 상당히 어렵고 본인의 제출한 모든 과제에 대한 디테일한 피드백을 받게 됩니다. 따라서 개인적으로 이 과목이 점수를 받기가 가장 어렵습니다. 다른 과목은 그냥 대부분 100% 작동하게 구현하고 제출하면 별다른 분석이 필요 없어도 쉽게 A를 받을 수 있지만 이 과목만은 정말 대학원 수준의 깊이 있는 분석과 본인의 생각을 나타내지 못하면 아주 기본점수만을 받게 됩니다. 과제의 양도 많기도 하고 그만큼의 깊이 있는 공부를 하지 않으면 정말 그런 내용을 매 과제의 담기 힘들기 때문에 정말 큰 노력이 필요합니다.

중간, 기말고사도 깊은 이해를 요구하는 문제를 내는데 대부분 주관식이고 T/F 문제 (설명도 요구하는)들이 조금 섞여있습니다. 일부로 범위가 많고 어렵게 내는 문제이기 때문에 평균 점수가 상당히 낮았던 것으로 기억합니다. 어차피 최종 시험 점수는 평균을 기준으로 Curve를 해서 상대평가로 주기 때문에 못 보시더라도 너무 실망하지 않으셔도 됩니다.

CS 6300: Software Development Process (Easy) 

이 과목은 말 그대로 소프트웨어 개발하는 과정에 필요한 일련의 단계들을 배웁니다. 회사에서 개발자로 일해보신 분이라면 이미 대부분 아는 내용입니다. Git 사용법, UML 그리기, 애자일, 디자인 패턴, 리팩토링 등의 개념을 배웁니다. 다만 이 과목은 그룹 과제가 있어서 팀을 잘 만나야 하는 단점이 있습니다. 그룹 과제 비중이 전체의 18%를 차지합니다. 정말 최악의 팀원들만 만나지 않는다면 사실 크게 어려운 문제는 없을 겁니다. 저는 다행히 팀원들이 저와 같이 캐나다에 거주하는 팀원들을 만나서 연락하거나 진행하는데 크게 무리가 없었습니다. 보통 그룹과제 초반에는 각자 나눠서 할 수 있는 정도의 과제가 나오고 마지막에 코딩 과제가 힘든데 저의 경우는 제가 대략적인 안드로이드 앱 구조를 짜서 소스를 git으로 공유하고 나머지 팀원들에게 파트별로 나눠서 분담하자고 제안했습니다.

그룹을 만들기 전에 조교들이 미리 본인의 경력, 위치를 설문조사를 해서 그걸 바탕으로 조를 짜줍니다. 그래서 팀 내에 개발 경력이 거의 없는 친구도 있기도 하고 어느 정도 있는 친구도 있습니다. 그리고 안드로이드 스튜디오 툴을 통해 과제를 진행하기 때문에 미리 안드로이드/Java 개발 경력이 있다면 매우 쉽게 과제를 하실 수 있습니다. 개인적으로 그룹 과제만 빼면 전체적인 난이도는 매우 낮습니다. 그리고 시험도 따로 없기 때문에 다른 난이도 있는 과목과 페어해서 듣기가 괜찮습니다.

CS 6515: Intro to Graduate Algorithms (Hard) 

전공의 필수 과목인 대학원 알고리즘입니다. 저는 개인적으로 학부 때부터 알고리즘을 평소에 자신 있어했었는데 이 과목은 증명을 기반으로 과제/시험을 쳐야 해서 조금 어려웠습니다. 단순히 어떤 알고리즘을 배우는 것이 아니라 교재에 나온 이론들( Dynamic Progmramming, Graph Algorithm, NP-completeness) 등을 배우고 그에 관련한 연습 문제들을 분석하고 증명하는 것을 과제와 시험을 통해서 배웁니다. 3번의 시험 비중이 72%를 차지하고 Final Exam은 선택입니다. 만약 자신이 3번의 시험 중에 하나를 매우 못 받으면 Final Exam을 치고 그 성적으로 가장 낮은 점수를 기록한 시험을 대체할 수 있습니다. 저도 첫 시험을 매우 못 봐서 Final Exam으로 만회하고 A를 받을 수 있었습니다.

시험이 어려운 점은 분석과 증명 문제가 대부분이기 때문에 제한 시간 내에 템플릿에 손으로 풀거나 워드로 타이핑을 해서 풀어 PDF 형태로 제출해야 합니다. 저는 풀이에 수식이 많이 들어가서 손으로 푸는 방식으로 했는데 시험시간이 생각보다 넉넉하지 않아서 어려웠습니다. 평소에 연습으로 많이 풀어보지 않았으면 당황해서 시간을 많이 사용하게 됩니다. 과제는 12%로 보통 책에 나온 연습문제를 숙제로 내줍니다. 나머지 코딩 9% 퀴즈 3%를 차지하는데 제가 들을 당시에는 코딩 과제는 딱히 없었던 것으로 기억합니다.

졸업 필수 과목이기에 모든 학생들이 최소 B 학점을 받아야 하므로 모두 열심히 하는 분위기입니다. 시험 비중이 크기 때 문에 평소에 연습문제를 풀면서 준비만 잘하시면 B 학점은 받는 것은 어렵지 않을 것입니다.

만약 처음부터 다시 듣는다면?

리뷰를 통해서 보듯이 제가 만약 다시 OMSCS를 듣는다면 그나마 대분의 과목들이 크게 어렵지 않은 Computing Systems를 세부전공해서 졸업을 최대한 빨리 2년 만에 할 것 같습니다. 사실 ML이 든 AI든 무슨 전공으로 졸업해도 그 전공을 살려서 취업하는 건 개인적으로 어렵다고 생각하기 때문입니다. 차라리 비전공자가 이 프로그램을 통해서 CS를 전공해 졸업한 것으로는 취업하는 데 도움이 될 테지만 세부 전공 관련 과목 몇 개를 들었다고 해서 본인이 정말 세부전공을 했다고 보기엔 어렵기 때문입니다. 본인이 ML/AI 등의 커리어로 바꾸길 원하다면 최소한 관련 논문을 몇 편을 써보거나 이 프로그램을 마치고 박사과정을 이어간다면 가능하지 않나 생각합니다.