|
|
안녕하세요 6기 조은성입니다.
다른 게시판은 로그인없이도 열람이 가능한 것 같아 부득이 딥러닝 게시판에 침투(?)하여 글을 남깁니다. 차후에 유연수 선생님 클래스 수강생들만 볼 수 있도록 해주시면 감사하겠습니다.
1.
아래의 글은 2015년 기준으로 오늘 수업에서 보았던 SGD 자료 작성자이신 하용호님께 개인적으로 받았던 조언을 공유합니다. 데이터 분야의 커리어에 대한 전반적인 조언이었고 개인적으로 나침반같은 역할을 해주었던 글입니다. 2년 동안 많은 부분들이 변했을 수 있다고 생각합니다. 따라서, 전체적인 맥락만 참고하시어 향후 공부 계획에 참고하시면 좋겠습니다.
-------
안녕하세요. 하용호입니다.
2. 데이터를 보는 업무는 다행히도 미니멈 10년은 잘되어갈 것 같습니다.
그 이후는 저도 모르죠. 신의 영역이겠죠^^? ㅎㅎㅎ 이 분야를 들어오겠다는 것은 좋은 생각이라 봅니다.
다만 전문적인 데이터 분석가가 되는데 필수적인 것이 있습니다.
바로 코딩입니다. 데이터 사이언티스트는 사실 쉽게 말하면 ‘Statistician who can write code’ 입니다.
반드시 R또는 Python으로 코딩을 할 수 있어야 합니다.
다시 한번 생각해봅시다. 왜 데이터 분석가라는 직업이 뜨고 있을까요?
생각해보면 이전에서 SPSS등이 있었는데, 왜 굳이 데이터 사이언티스트라는 말이 생겼을 까요?
그건 두가지 기능을 두 사람이 나누어 하는 것 대비 (프로그래머 + SPSS분석가)의 페어보다
한사람이 두가지 기능을 함께 할 수 있을 때 (프로그래밍 할 줄 아는 분석가)
작업의 이터레이션이 극단적으로 빨라지기 때문입니다.
그 빠른 이터레이션으로 빠르게, 또는 넓게 결과를 탐색해 나갈 필요성이
이 직업의 존재의의 입니다.
일부 친구들은 코드는 별로 안좋아하는데, 그냥 통계와 인문지식을 잘 갖추면 되지 않을까요?
묻는데, 단언할 수 있습니다. 코드를 쓸 줄 알아야 합니다.
꼭 언어를 배우세요. 언어를 배우는 순서는 R -> 그리고 Python인데
Python은 취미정도라 생각하고 R을 잘 쓸 수 있도록 훈련하세요. 꼭입니다.
3. 포트폴리오를 만드세요
실제로 이쪽 업계가 가장 선호하는 인력의 스테레오 타입은 이렇습니다.
1). ‘컴과나, 산업공학과 학부를 나오고’
2) ‘컴과나 산업공학과 데이터마이닝 유관 연구실에서 석사를 한’
3) ‘코딩도 잘 할줄 알고’
4) ‘산업전반에 관심이 많으며’
5) ‘말을 조리있게 할 줄 알 것’
4,5는 충분히 패스입니다만 1,2,3 입니다.
3은 공부를 통해 어느정도 매꾸어도
1,2가 남습니다.
그렇다면 1,2가 없는 것에 대한 불안을 불식할 수 있는 요소는 무엇이냐?
포트 폴리오 입니다.
여기서 포트 폴리오라는 것은 어떤 자료를 스스로 분석해본 케이스를 만들어 어딘가 올리는 것인데
http://www.r-bloggers.com 여기에 있는 것 같은, 자기만의 분석이나
최근에 화제가 되었던 http://openlook.org/wp/does-lotteria-locate-different/
이런 글들. 또는 http://freesearch.pe.kr/archives/category/데이터분석 이런 글들을
지속적으로 올리고, 공유하는 것입니다.
컴과나 산공과 학석사 와
분석 포트폴리오를 가진 타과생이 있다면
채용 기준은 압도적으로 포트폴리오를 가진 타과생입니다.
하용호 드림
2.
비록 저는 딥러닝에 대해서는 문외한이지만 follow 할만한 사람을 한분 남겨볼까 합니다.
남세동님 개인 페이스북
https://www.facebook.com/dgtgrade
VoyageX 라는 스타트업을 창업한 개발자 남세동님입니다. 20대떄 세이클럽을 개발했고, 첫눈 창업멤버, 네오위즈 창업멤버를 거쳐 최근 딥러닝 스타트업을 창업하신 분인데요, 첫눈은 네이버에게 인수된 스타트업이고, 네오위즈역시 지금 배틀그라운드로 유명한 블루홀 창업자 장병규씨의 창업사였습니다. 그 만큼 업계에서는 많은 지식을 가지고 있고, 어느정도 하시는 말씀들이 신뢰도가 높을 것 같아 구태여 개인의 페이스북을 남겨보았습니다. VoyageX 에서도 이따금씩 페북을 통해 인턴채용이 올라오는 만큼 팔로우한다면 정보를 다방면으로 구하실 수 있을 것이라 생각합니다.
아래에는 최근 쓰신 글들 중 보실만한 글을 추려보았습니다.
2.1 딥러닝 개발 채용 질문
딥러닝이라는 주제에 대해서 개발자 면접을 자주 하다 보니 어떤 질문을 하면 되는지 대략 정리가 되었다.
1년 이하 정도 딥러닝을 열심히 해 본 개발자들이 일정 수준 이상으로 잘 대답할 것으로 기대하는 질문들이다.
1. 요즘 Sigmoid 보다 ReLU를 많이 쓰는데 그 이유는?
+ Non-Linearity라는 말의 의미와 그 필요성은?
+ ReLU로 어떻게 곡선 함수를 근사하나?
+ ReLU의 문제점은?
+ Bias는 왜 있는걸까?
2. Gradient Descent에 대해서 쉽게 설명한다면?
+ 왜 꼭 Gradient를 써야 할까?
+ 그 그래프에서 가로축과 세로축 각각은 무엇인가?
+ 실제 상황에서는 그 그래프가 어떻게 그려질까?
+ GD 중에 때때로 Loss가 증가하는 이유는?
+ 중학생이 이해할 수 있게 더 쉽게 설명 한다면?
+ Back Propagation에 대해서 쉽게 설명 한다면?
3. Local Minima 문제에도 불구하고 딥러닝이 잘 되는 이유는?
+ GD가 Local Minima 문제를 피하는 방법은?
+ 찾은 해가 Global Minimum인지 아닌지 알 수 있는 방법은?
4. CNN에 대해서 아는대로 얘기하라
+ CNN이 MLP보다 좋은 이유는?
+ 어떤 CNN의 파라메터 개수를 계산해 본다면?
+ 주어진 CNN과 똑같은 MLP를 만들 수 있나?
+ 풀링시에 만약 Max를 사용한다면 그 이유는?
+ 시퀀스 데이터에 CNN을 적용하는 것이 가능할까?
5. Word2Vec의 원리는?
+ 그 그림에서 왼쪽 파라메터들을 임베딩으로 쓰는 이유는?
+ 그 그림에서 오른쪽 파라메터들의 의미는 무엇일까?
+ 남자와 여자가 가까울까? 남자와 자동차가 가까울까?
+ 번역을 Unsupervised로 할 수 있을까?
6. Auto Encoder에 대해서 아는대로 얘기하라
+ MNIST AE를 TF나 Keras등으로 만든다면 몇줄일까?
+ MNIST에 대해서 임베딩 차원을 1로 해도 학습이 될까?
+ 임베딩 차원을 늘렸을 때의 장단점은?
+ AE 학습시 항상 Loss를 0으로 만들수 있을까?
+ VAE는 무엇인가?
7. Training 세트와 Test 세트를 분리하는 이유는?
+ Validation 세트가 따로 있는 이유는?
+ Test 세트가 오염되었다는 말의 뜻은?
+ Regularization이란 무엇인가?
8. Batch Normalization의 효과는?
+ Dropout의 효과는?
+ BN 적용해서 학습 이후 실제 사용시에 주의할 점은? 코드로는?
+ GAN에서 Generator 쪽에도 BN을 적용해도 될까?
9. SGD, RMSprop, Adam에 대해서 아는대로 설명한다면?
+ SGD에서 Stochastic의 의미는?
+ 미니배치를 작게 할때의 장단점은?
+ 모멘텀의 수식을 적어 본다면?
10. 간단한 MNIST 분류기를 MLP+CPU 버전으로 numpy로 만든다면 몇줄일까?
+ 어느 정도 돌아가는 녀석을 작성하기까지 몇시간 정도 걸릴까?
+ Back Propagation은 몇줄인가?
+ CNN으로 바꾼다면 얼마나 추가될까?
11. 간단한 MNIST 분류기를 TF나 Keras 등으로 작성하는데 몇시간이 필요한가?
+ CNN이 아닌 MLP로 해도 잘 될까?
+ 마지막 레이어 부분에 대해서 설명 한다면?
+ 학습은 BCE loss로 하되 상황을 MSE loss로 보고 싶다면?
+ 만약 한글 (인쇄물) OCR을 만든다면 데이터 수집은 어떻게 할 수 있을까?
12. 간단한 MNIST DCGAN을 작성한다면 TF 등으로 몇줄 정도 될까?
+ GAN의 Loss를 적어보면?
+ D를 학습할때 G의 Weight을 고정해야 한다. 방법은?
+ 학습이 잘 안될때 시도해 볼 수 있는 방법들은?
13. 딥러닝할 때 GPU를 쓰면 좋은 이유는?
+ 학습 중인데 GPU를 100% 사용하지 않고 있다. 이유는?
+ GPU를 두개 다 쓰고 싶다. 방법은?
+ 학습시 필요한 GPU 메모리는 어떻게 계산하는가?
14. TF 또는 Keras 등을 사용할 때 디버깅 노하우는?
15. Collaborative Filtering에 대해 설명한다면?
16. AutoML이 뭐하는 걸까?
이상 공통 (기본) 질문들만 정리해 봤다.
2.2 딥러닝을 공부해야하는데 대학원에 가야하는 것 아닐까요?
딥러닝을 잘 하는 개발자가 되고 싶은데 대학원에 가는 것은 필수 아닐까요? 요즘 많은 분들이 나에게 묻는 질문이다. 이에 나의 대답을 정리 한다. 고민할 때 참고가 되길 바라면서 페이스북에도 공개 한다.
우선 연구와 개발을 나눠 보자. 물론 소프트웨어 분야에서 이 둘은 칼로 자르듯이 나눌 수 없는 것이다. 하지만 여기서는 편의상 나눠 보자. 최종 결과물이 사용자를 위한 제품인 것을 개발이라고 하고, 최종 결과물이 다른 연구자 또는 개발자를 위한 논문인 것이 연구라고 해 보자.
단순하게 보면 연구자는 결국 논문으로 평가 받는다. Publish or Perish. 개발자는 결국 제품으로 평가 받는다. Done is better than Perfect. 만약 본인이 논문으로 평가 받는 것이 더 나아 보인다면 연구자의 길이 맞을거고, 제품으로 평가 받는 것이 더 나아 보인다면 개발자의 길이 맞다고 볼 수 있다.
그런데, 여기서 이슈가 있다. 연구자가 되고 싶다면 당연히 대학원에 가야 하겠다. 거기에는 의문의 여지가 없다. 그런데 개발자가 되고 싶은데도 대학원에 가야 할까? 나는 일반적인 개발의 경우에는 아주 많은 경우에 그렇지 않다고 생각한다. 좋은 개발자가 되기 위해서 대학원에 가는 것은 좋은 운동 선수, 작가, 작곡가, 건축가, 쉐프, 사업가가 되기 위해서 대학원에 가는 것과 비슷해 보인다.
하지만, 딥러닝이라면 어떨까? 딥러닝 또는 머신러닝이라면 일단 대학원에서 관련 공부를 하고 나와야 뭐라도 제대로 할 수 있는 것 아닐까? 결론부터 얘기하자면 나는 그것 또한 그렇지 않다고 생각한다. 지금 대학원에 가면 빠르면 5년 뒤에 박사 학위를 취득할 것이다. 5년 뒤의 상황을 생각해 봐야 한다. 학계가 아닌 산업계의 상황 말이다.
물론 지금 딥러닝을 잘 하는 사람들 대부분은 대학원 과정을 거친 사람들이다. 왜냐면 그것은 그동안 딥러닝 또는 머신러닝을 연구 개발 할 수 있었던 곳이 오직 대학 뿐이 없었기 때문이다. 또한 얼마 전까지는 딥러닝으로 할 수 있는 일이 개발 보다는 연구가 더 많았다. 하지만 이제는 다르다. 이미 많은 회사에서 딥러닝을 이용 하고 있고 앞으로 점점 더 많은 회사에서 딥러닝을 이용 해 개발을 진행할 것이다.
딥러닝에 있어서의 선형대수와 미분. 이것은 내가 보기에는 프로그래밍에 있어서 이산수학이나 계산이론과 같은 것이다. 잘 알면 물론 좋지만 몰라도 괜찮다. 컴파일러 내부를 개발자들이 속속들이 알 필요는 없다. 몰라도 개발 잘만 한다. 비주얼 스튜디오를 만드는 사람들은 물론 컴파일러에 대해서 잘 알아야 하겠지만 다른 대다수의 개발자들은 그렇게까지 몰라도 된다. 사실 비주얼 스튜디오의 개발자들이 비주얼 스튜디오를 잘 만들수록 다른 개발자들은 몰라도 된다. ^^
텐서플로우를 만들려면 선형대수와 미분을 잘 알아야 하지만 텐서플로우를 잘 사용하기 위해서 선형대수와 미분을 잘 알 필요는 없다.
앞으로 점점 더 그럴 것이다. 사실 텐서플로우도 내가 보기에는 너무 로우레벨이다. 앞으로 퓨어 자바스크립트 같은 존재가 될 것 같다. 요즘 웹이나 앱 개발 할 때 왠만하면 퓨어 자바스크립트로 개발 하지 않는다. 앞으로는 딥러닝도 텐서플로우 보다는 케라스나 파이토치 같은 것으로 개발 할 일이 더 많아질 것이다.
딥러닝에 있어서의 통계. 이 녀석은 프로그래밍에 있어서 데이터 구조, 운영체제, 프로그래밍 언어 같은 녀석이다. 이건 개발자들도 잘 알아야 하고 더 잘 알 수록 더 좋다. 그래서 통계는 필수적으로 공부를 해야 하고, 공부를 할 수록 딥러닝을 잘 할 수 있을 것이다. 그러나 오직 통계를 공부하기 위해서 대학원 과정을 밟는 것은 너무나 비효율적으로 보인다.
70년대에는 많은 개발자들이 어셈블리로 개발 했다. 하지만 90년대에는 그렇지 않았다.
관련글:
https://www.facebook.com/dgtgrade/posts/1616084621783731
90년대 중반에는 웹이란 것이 매우 어려운 기술이었고 주로 연구자들이 웹 기술의 발전을 이끌어 갔었다.
관련글:
https://www.facebook.com/dgtgrade/posts/1475752469150281
00년대에는 퓨어 자바스크립트로 개발 했으나 요즘은 그렇게 하지 않는다.
3년 전에는 좋은 앱들은 결코 리액트 네이티브 같은 것으로 개발하지 않았다. 하지만 요즘에는 점점 그렇게 개발 한다.
지금 대학원에 가서 박사과정을 마치고 나면 최소한 2023년이다. 나도 잘 안 믿기지만 자동차들이 알아서 다닌다는 바로 그 2023년이다. 그때의 딥러닝은 어떻게 되어 있을까? 만약 연구 보다 개발이 좋다면, 그래서 개발자가 되고 싶다면 지금 바로 케라스나 파이토치로 딥러닝 개발을 시작 하라. 통계를 공부 하고. 기회가 된다면 딥러닝을 하는 회사에 들어가면 더 좋다.
다른 많은 개발이 그렇듯, 딥러닝 개발도 다르지 않다. 아니 얼마 전까지는 달랐는데 앞으로는 다르지 않게 될 것이다. 텐서플로우를 만들고 싶다면 대학원 과정은 필수이나 인공지능 어플을 만들고 싶다면 대학원 과정은 필수가 아니고, 오히려 좋지 않은 선택이 될 수도 있다.
2.3 기타 목록
딥러닝을 공부하는 방법에 대해서 물어보시는 분들이 많아서 관련해서 제가 만든 영상 그리고 그동안 적었던 글들을 정리합니다. 나름대로 순서를 붙여 봤습니다.
0. 헬로 딥러닝: 개발자가 아닌 분들이 들어도 어렵지 않습니다.
https://www.youtube.com/watch?v=yWySw4EfSJc
1. 딥러닝, 아무나 할 수 있다:
https://www.facebook.com/dgtgrade/posts/1597213890337471
2. 딥러닝의 "기본 원리"는 매우 단순하다:
https://www.facebook.com/dgtgrade/posts/1536461109746083
3. 요즘의 인공지능 난리에 대한 "비교적" 짧은 설명의 시도:
https://www.facebook.com/dgtgrade/posts/1440646125994249
4. 후배님으로부터 딥러닝 공부 방법을 추천해 달라는 부탁을 받고:
https://www.facebook.com/dgtgrade/posts/1340177956041067
5. 머신 러닝 공부 자료들 정리해 봤습니다:
https://www.facebook.com/dgtgrade/posts/1145680742157457
6. 선대, 미분, 통계 및 SVM, RBM 등등 이런 저런 허들들:
https://www.facebook.com/dgtgrade/posts/1328790023846527
7. 딥러닝은 휴리스틱 덩어리다:
https://www.facebook.com/dgtgrade/posts/1628524207206439
8. 셸든 녀석, 하워드 좀 그만 무시해라:
https://www.facebook.com/photo.php?fbid=1145716252153906
9. High Dimensional Data, 그리고 Data Point라는 말
https://www.facebook.com/dgtgrade/posts/1598044216921105
10. Back Propagation 알고리즘을 정확히 이해 하는게 좋겠지만:
https://www.facebook.com/dgtgrade/posts/1316988828359980
11. 신경망에서의 Loss의 개념과 Gradient Descent의 원리:
https://www.facebook.com/dgtgrade/posts/1587853294606864
12. Dynamic Programming을 꼭 제대로 이해하고 있어야:
https://www.facebook.com/dgtgrade/posts/1566155880109939
13. 딥러닝 개발자가 되고 싶은데 대학원에 가는 것은 필수 아닐까요?:
https://www.facebook.com/dgtgrade/posts/1648199235238936
14. Convolution 같은 것을 신경망에 적용할 생각을 할 수 있었을까요?:
https://www.facebook.com/dgtgrade/posts/1592507747474752
15. VAE(Variational Auto Encoder)의 Loss 함수:
https://www.facebook.com/photo.php?fbid=1541286282596899
16. 요즘 컴퓨터가 인공지능으로 그림도 그리고 작곡도 한다고 한다:
https://www.facebook.com/photo.php?fbid=1586295191429341
17. 알파고 제로는 그 전전 버전인 알파고 리(Lee)와 달리:
https://www.facebook.com/dgtgrade/posts/1595680410490819
18. Andrej Karpathy: Software 2.0:
https://www.facebook.com/dgtgrade/posts/1613655608693299
