Machine Learning Engineer라는 역할로 지난 1년 4개월 정도를 근무했고, 동일한 역할로 타 회사로 이직하게 되었습니다. 이번 포스트에서는 이직 준비를 하면서 겪었던 경험들과 그에 대한 개인적인 느낌을 기록하려고 합니다.
1. 이직 동기
기존 회사에서 Machine Learning Engineer 역할로 업무를 진행해왔습니다. 주로 NLP 프로젝트들을 진행했으며, 크게 대화체에 Self-Supervised Learning 방법을 적용하는 프로젝트들과 Knowledge Distillation 을 이용한 모델 경량화 프로젝트를 진행했습니다.
1.1 Research vs Engineering
최근에 여러 논문들을 읽으면서 “전반적으로 많은 데이터를 이용한 엄청나게 큰 모델들을 학습하는 방향으로 나아가는것 같다” 라고 느꼈습니다. 특히 제가 공부하고 있던 NLP 영역에서는 BERT를 시작으로 Self supervised learning 방법들이 연구되어 왔고, 최근 Google의 T5나 Open AI의 GPT-3를 보면 모델의 크기 또한 엄청나게 커지고 있음을 볼 수 있습니다. 이런 방향의 연구들은 많은 컴퓨팅 리소스가 들어가기 때문에 (= 돈이 많이 들기 때문에), 소규모의 기업/ 대학원의 연구실이 도전하기에 한계가 있을 것이고, 결국 대부분의 기업들은 “연구”라는 이름 아래에서 선두에 있는 기업들(Google, Facebook, OpenAI, Microsoft 등)이 진행한 연구들을 잘 “적용”하는 방향으로 나아가지 않을까..? 라는 생각이 들었습니다. 여기서 “적용”은 결국 연구의 결과를 실제 서비스로 만들어나가는 과정입니다. 개인적으로 이 과정에서는 Research적 역량보다는 기존 여러 CS지식들에 기반한 Engineering적 역량이 더 중요하다고 느껴졌고, 이 방향으로 제 자신을 발전시켜나가고 싶었습니다. 기존 회사에서의 역할은 Research에 조금 더 무게가 실려있었기 때문에 이직을 결심하게 되었습니다.
1.2 Service
기존에 진행했던 프로젝트들은 B2B 서비스에 적용되거나, 아직 정시 출시되지 않은 B2C 서비스에 적용될 예정인 기술들을 연구/개발하는 것이였습니다. 따라서 제가 개발한 기술들에 대해 실제 사용자들의 반응들과 피드백을 얻기 힘들었습니다. 초기에는 기술 자체를 몰랐고, 공부를 하면서 동시에 이들을 적용했기 때문에 이 자체로 큰 흥미를 느낄 수 있었지만 최근에는 이 속도가 점점 늦어져 정체되는 느낌을 받았는데, 이는 제가 만든 기술의 영향력을 측정할 수 없음이 크기 때문이라고 생각합니다. 실제로 많은 사용자가 있는 서비스 위에서 제가 만든 기술이 적용되는 경험을 해보고 싶다는 생각이 들었습니다.
2. 회사 서베이
결과적으로 Machine Learning Engineer 포지션을 채용하는 기업들 중 위의 조건들(+ 군대) 1) Engineering 위주의 역할 2) 실제 사용자가 많은 서비스 3) 산업기능요원 전직 가능 조건 을 만족시킬 수 있는 회사들을 찾았고 최종적으로 두 군데의 회사에 지원을 했습니다.
채용 공고들을 보면서 1년전과 가장 크게 느꼈던 차이점은 Machine Learning Engineer의 역할이 조금 더 명확해지고 있는것 같다는 것입니다. 제 기억으로 1년전에는 대부분 회사들이 비슷한 내용의 채용공고를 갖고 있어 명확한 차이를 찾기 힘들었고, 역할 자체가 애매한 경우가 많았습니다.(Machine Learning에 관심이 있는 분 등의 애매한 자격 요건) 이에 비해 이번에 봤던 많은 채용 공고들은 비교적 구체적인 역할 및 자격 요건을 담고 있었습니다. (기계 학습 관련 프로젝트 경험, 논문을 읽고 이를 빠르게 구현하여 검증할 수 있는 능력 등의 자격 요건, 더욱 세분화된 기술 경험 - Graph Neural Network, Language Modeling 등)
3. 이력서
대부분 기업들은 서류 전형에서 이력서(CV, Resume)를 제출합니다. 즉 이력서는 가장 처음 자신을 표현할수 있는 수단입니다. 제가 채용하는 입장에서 이력서을 받았을 때 가장 크게 봤던 점은 1) 자신이 한 일들을 잘 표현했는가 2) 전체적인 레이아웃 + 내용의 깔끔함 이였습니다. 그래서 이 점들에 주목해서 이력서를 작성했습니다. 개인적으로 PPT형식의 포트폴리오는 PPT자체가 많은 말이 생략된 그림위주이고, 양이 많아 눈에 확 들어오지 않는다는 느낌을 받아서 따로 준비하지 않았습니다. 비슷한 이유로 이력서의 양은 1-2 페이지 안으로 조절했습니다. 표현하고자 하는 많은 단어들이 번역하면 어색해졌기 때문에 이력서는 영문으로 작성했습니다. 이곳을 참고하면 Machine Learning Engineer 이력서 샘플들을 볼 수 있습니다.
3.1 레이아웃
크게 위의 그림과 같이 7개 항목으로 구성했습니다.
- Education: 기본적인 학력 사항, 주요 Coursework
- Work Experience: 업무 경험, 회사 및 재직 기간 및 주요 프로젝트에 대한 간단한 요약
- Projects: 일 외에 진행했던 프로젝트
- Awards: 수상 경력(해커톤 등)
- Research Interest: 관심있는 연구 분야
- Teaching Experiment & Extracurricular Activities: 교육 봉사활동, 멘토 활동, 커뮤니티/밋업에서 발표했던 내용
- Technical Skills: 다룰 수 있는 언어 및 프레임워크, 개발 도구 등
3.2 내용
사실 채용하는 입장에서 봤을 때, 위의 항목 중 (나머지 항목들도 물론 중요하지만) Work Experience을 가장 눈여겨 볼 것이고, 따라서 지원자 입장에서도 가장 많은 노력을 들여야 할 항목이라고 생각합니다. (아래 예시와 같이) 프로젝트의 대략적인 내용 - 내가 맡은 역할 - 성과(결과)를 작성했는데, 너무 자세하게 표현하기 보다는 면접에서 추가적으로 물어볼 만큼의 흥미를 끌 수 있는 정도로(각 프로젝트마다 1-2줄로) 요약하려고 노력했습니다. 동일한 내용이라도 어떻게 쓰느냐에 따라 느낌의 차이가 크기 때문에 여러 번 반복해서 수정작업을 진행했습니다. (맞춤법 + 영어 표현도 함께 수정 /도움을 주신 @sammy)
Research on Pre-training Language Models(such as BERT, XL-Net) for Dialogue System and achieve more than 5% of performance improvement compared to existing NLU models.
4. 면접
일반적으로 이력서를 이용한 서류 전형을 통과하면 면접 전형을 진행합니다. 면접은 기업들마다 전부 케바케일 것 이기 때문에, 구체적으로 어떤 질문을 했느냐 보다는 질문의 느낌 위주로 작성합니다.
4.1 면접 준비
저같은 경우 서류 전형 발표 - 면접 전까지 약 3-4일에서 길게는 일주일 정도의 시간이 주어졌습니다. 일을 병행하면서 면접 준비를 진행하기에는 빡빡하고, 세세한 부분들을 공부하기엔 부족한 시간입니다. 저는 주로 다음과 같은 요소들을 위주로 면접 준비를 진행했습니다.
- 이력서: 이력서에 적었던 각 프로젝트의 내용들을 리마인드하고, 내가 맡았던 역할이 무엇인지 떠올려봅니다. 또한 해당 프로젝트에 이용되었던 기술들의 레퍼런스(논문, 프레임워크 등)를 정리합니다. 특히 최근에 진행했던 프로젝트들의 경우 목적부터 진행 과정, 결과까지 상세하게 되짚어 봅니다.
- Machine Learning/Deep Learning 기초 지식: ML에 대한 기본적인 지식들을 공부합니다. 변성윤님 블로그 글을 참고하면서 많은 도움을 받았습니다.
- 기본적인 확률, 통계: PRML(Pattern Recognition and Machine Learning)책의 앞부분에 등장하는 확률, 통계, 베이지안 정리 부분까지 읽었습니다.
- NLP: 예전에 CS224n 을 들어면서 정리해뒀던 내용들, ratsgo’s blog에 있는 여러 자료들을 참고했습니다.
- 그 외의 부분들: 이전에 읽으면서 블로그에 정리해뒀던 논문들, Backpropagation의 원리, Optimizer 정리, Activation Function의 역할, Batch Normalization의 의미 등 기초이면서 혼란이 있을 수 있는 개념들을 정리했습니다.
- Computer Science 기초 지식: 면접 준비를 하면서 가장 자신없는 부분이였습니다. 기술 인터뷰 모음을 참고해서 공부했습니다. 모든 내용을 다 안다면 더 좋겠지만, 저같은 경우 제가 알아야 할 것 같은 내용들을 위주로 살펴봤습니다. (개발 상식, 자료구조, 네트워크, 운영체제, Python 등)
4.2 기술 면접
다행이도 이번에 경험했던 면접들은 제가 준비했던 범위를 크게 벗어나지 않았습니다. 위에서 준비했던 내용들에서 우선 순위를 따져보자면 이력서 > ML 지식 > CS 지식 순이였습니다. 대부분 기술 질문들은 이력서를 바탕으로 진행되고, 이력서에 필요한 ML/CS지식 들이 꼬리 질문에서 나오는 형식이였습니다. 한 가지 팁은 면접관 분들은 제가 진행했던 프로젝트의 배경 지식이 없을 가능성이 높기 때문에 짧게라도 각각의 프로젝트에 대한 설명을 하는 연습을 해보면 도움이 될 것 같습니다.
4.3 인성 면접
기술 면접 이후에 최종적으로 인성 면접을 진행합니다. 이 자리는 면접의 느낌 보다는 회사와 지원자 간의 가치관, 비전 등이 일치하는지 확인하는 자리입니다. 따라서 지원자의 입장에서도 회사에 대해 더 자세히 알아갈 수 있습니다. 모든 면접에 해당하겠지만, 인성 면접에서는 특히 솔직함 + 경험을 잘 녹여내는 것이 중요하다고 생각합니다. 자신의 가치관이 확실하고 이에 대한 근거를 잘 제시할 수 있다면 무난한 면접이 될 수 있습니다. 별도로 준비를 한다기보다는 회사 홈페이지나 제품, SNS 등을 통해 어떤 회사인지 훑어보고, 궁금한 점 3-4 가지 정도는 생각해보는 것이 도움이 될 것 같습니다.(사실 면접장에 들어가면 1-2개만 생각납니다 ㅠㅠ)
5. 마무리
2020년 5월부터 시작했던 약 1달간의 이직 준비는 끝이났고, 다행히 좋은 결과를 얻을 수 있었습니다. 구체적인 내용들을 거의 다 생략하기도 했고 너무 당연한 이야기들만 적어둔 것 같아서, 조금 더 정리가 된다면 자세한 내용도 공유할 예정입니다. 지금부터 산업기능요원 종료 까지는 새로 이직하는 회사에서 근무할 예정입니다. 새로운 회사에서는 위에서 생각했던 이직 동기들을 만족시킬 수 있도록 노력해야겠네요 :)