2018년 10월 28일 일요일

Machine Learning, AI Researcher, Engineer 면접 질문, 구직 과정 정리

주요 회사들의 Machine Learning, AI Researcher, Engineer 포지션에 지원하면서 겪게 된 일들을 정리해 보려고 합니다.

0. 참고용으로 쓰는 저의 상태
한양대 컴공 석사 졸
논문 1편, 산학 프로젝트 1개, 개인연구 1개

1. 서류 전형
서류 전형은 이력서를 그렇게 공들여 쓴 게 아님에도 불구하고 다 합격했습니다.

2. 코딩 테스트
보통 Codility를 통해서 봅니다.
Programmers 쓰는 곳도 있긴 합니다.
난이도는 그렇게 어렵지 않았습니다.
특히 Codility 테스트는 삼성전자 코딩 테스트 통과할 정도면 대부분 합격할 것 같고, Programmers에는 어려운 문제가 한 개 정도 있었습니다.
그런데 코딩 테스트에서 모든 문제를 100% 다 맞추지 못해도 합격시켜주는 것 같습니다.
Codility를 통해 한 군데 코딩 테스트를 볼 때 1번 문제가 SQL 문제여서 당황(SQL 잘 못해서... 나중에 공부함 ㅋㅋ) + 오기(웬지 될 거 같은 쓸데 없는 자신감?) 때문에 결국 1번 문제는 풀지도 못하고, 2번문제 풀고, 3번 코딩하다 끝났는데(핵심 로직은 거의 다 쓴 듯) 합격시켜주더라고요.
당연히 떨어진 줄 알았는데...
SQL 문제는 이 때 처음이자 마지막으로 봤습니다.

어떤 데는 추가적으로 논문 구현 코딩 테스트를 요구하기도 합니다.

3. 1차 면접
면접 질문은 보통 4가지 정도로 나눌 수 있을 것 같습니다.
질문 외에 포트폴리오나, 제시하는 논문에 대한 ppt 발표를 시키는 곳도 있습니다.

3-1. 포트폴리오에 대한 질문
어떤 연구를 했는지에 대해 기본적으로 질문합니다.
연구 내용에 대해 당연히 잘 설명해야겠죠.
하지만 중요한 건, 왜 이 문제를 풀기로 했고, 왜 그런 방법을 선택했냐? 라는 질문에 대답을 잘 해야 할 것입니다.
사실 연구가 끝난 시점에서 대학원에서 교수님이 시키는 일을 그냥 했다던지 하면 첫번째 질문에 대해서는 크게 할 말은 없겠지만 그래도 포장?을 잘 해야겠죠.
두번째 질문도 그 당위성을 잘 설명해야할 것입니다.
그래야 앞으로 회사에 들어가서도 올바른 방향으로 연구 개발을 할 것이라 생각을 하겠죠.

3-2. 지식에 대한 질문
확률 통계, 선형대수, 머신 러닝, 딥러닝 모델 등의 개념을 알고 있는지 물어봅니다.
이건 그냥 키워드, 단어 형식으로 정리하겠습니다.
Likelihood란?
Maximum Likelihood estimation과 Maximum A Posteriori estimation의 차이?
Logistic Regression이란?
Linear Regression이란? 푸는 방법 2가지 - 선형대수적 방법, Gradient Descent

SVD란?
SVD의 차원 죽소에 쓰이는 3가지 방법?
Bayesian Rule?
SVM이란?
Conditional Random Field가 뭔지?
Hidden Markov Model?

KL divergence?
Validation set과 Test set을 나누는 이유?
Generative model과 Discriminative model의 차이?
Bayesian Inference?

Dropout?
Normalization 아는 것?
Dilated CNN?
Attention이란?
Memory Network?
Transformer?
Self Attention을 활용한 다른 논문들을 아는지?
인상 깊었던 논문?
최근 읽은 Gan 논문?
Highway network?
Elmo?
World model?


3-3. 문제를 주고 답하게 하는 질문
음... 이건 좀 공개적으로 적기 힘들 것 같습니다^^

3-4. 이력 자체, 인성에 대한 질문
왜 지원했는지? (게임 회사의 경우 왜 게임 회사에 지원했는지를 거의 물어봤던 것 같습니다. + 어떤 게임 좋아하는지, 인공지능을 게임에 어떻게 응용할 수 있을까)
어떤 일을 하고 싶은지?
연구와 개발 어느 쪽에 더 맞는지?
시키는 일을 하고 싶은지, 원하는 일을 찾아서 하는지?
논문 쓰면서 힘들었던 점?
논문 구현은 얼마나 해 봤는지?
왜 Tensorflow를 썼는지(vs PyTorch, Caffe 등)
현재 나와 있는 챗봇, 인공지능 스피커를 쓰고 느낀 점, 개선점?
갈등이 있을 때 어떻게 대처할 것인지?
협업한 경험?
개발 잘 하는지? (질문의 의도가 뭔지.... ㅋㅋㅋ)