Tuesday, May 31, 2016

영국 박사과정의 특징

[편집 - 2019-12-04. 영국과 미국 유학 비교도 참고하세요]

2014년 10월에 박사과정을 시작했으니 이제 1년 8개월이 되었네요. 영국 기준으로는 과정이 절반이상 지난 셈입니다. 제법 시간도 지났고, 이번에 한국을 다녀와서 몇 가지 깨달은 내용도 있습니다. 그동안은 연구 내용만 올렸는데 이 이야기는 언제 한번 하고싶었던 내용이라 썰을 좀 풀겠습니다. 저는 한국에서 석사를 받았고, 주변에 한국에서 박사과정을 진행 중이거나 마친 친구들이 여럿 있어서 직/간접적으로 알게된 내용이 섞여있으니 참고하시기 바랍니다. 특별한 언급이 없다면 공과대학의 대학원에 해당하는 내용입니다.

영국 대학원의 특징 복습

인터넷에서 쉽게 찾아볼 수 있는 영국 대학원의 특징을 요약하면 대략 
  • 짧다 (3년)
  • 퀄이 없다
  • 수업이 없다
  • 졸업논문 심사를 철저하게 한다
  • 연구 지도에 더 신경을 써준다
  • 학비가 비싸다
  • 펀딩을 받기 어렵다
  • 언제든지 입학할 수 있다.
정도입니다. 중요한 특징이 맞습니다. 우선 위의 내용에 간단히 덧붙이면,
  • Full-time의 경우 3년이 맞습니다. 실제로 한국/중국 유학생들은 36개월에 잘 마치는 편입니다. 유럽 애들의 경우엔 학비나 비자 문제가 자유로워서 - 그리고 그 외의 다양한 이유로 - 중간에 part-time으로 바꾼다던지 해서 시간을 더 쓰는 경우가 종종 있습니다. 그리고 이 기간은 졸업논문 작성 모드 (writing-up stage)로 넘어가기 전까지의 기간을 말하는 것입니다. 즉 36개월간의 연구기간 - 졸업논문 작성기간 2-6개월 (이때 취직 준비를 하거나 아예 일을 시작하는 경우도 있음) - 제출 - 1-3개월 뒤 박사학위 심사 - 몇개월 뒤에 계절에 맞춰서 졸업식 진행. 이렇게 보면 됩니다. 
  • 퀄시험이 없습니다. 대신 몇가지 단계의 심사가 있는데 퀄처럼 pass/fail이 아니라 박사과정 연구가 잘 진행되는지 중간발표정도로 보면 되겠습니다.
  • 대체로 수업이 없습니다. 대략 수업 == 석사과정, 연구==박사과정으로 생각하면 됩니다.  다만 코스마다 차이는 있습니다.
  • 졸업 논문 심사는 상대적으로 꼼꼼하게, 그리고 길게 진행됩니다. 졸업논문을 펼쳐놓고 심사하는 교수와 학생이 방에 앉아서 2-4시간동안 지적, 토론 등을 합니다.
  • 대체로 연구 지도에 더 신경을 써주는 것 같습니다. 자세한건 아래에.
  • 학비 비싸죠. 2016년 기준 공대는 대략 연간 2천만원이 좀 안됩니다. 
  • 펀딩 소스따라 다르지만 많은 펀드가 EU 국적 소지자로 제한되어있습니다. 다만 누구나 지원할 수 있는 (international) 플젝/펀드가 분명 있긴 합니다.
  • 3월이나 9월로 정해진 것이 아니라 교수가 학생을 뽑을 펀딩만 있다면 언제든지 공고는 나옵니다.

정말 중요한, 영국 대학원의 특징

이 이야기는 유럽 대학원에 전반적으로 적용되는 이야기같기도 합니다.
공과 대학의 경우 대부분 교수가 연구계획서를 작성해서 국가나 EU펀드에 지원을 합니다. 그리고 이게 통과가 될 경우 연구비를 받게됩니다. 그러면 연구비를 사용해 학생 또는 포닥을 뽑죠. 제가 다니는 대학원도 대부분의 학생들이 이런 과정을 통해 학교에 입학합니다. 이렇게 들어오는 경우가 소위 '풀펀딩', 즉 등록금과 생활비를 모두 지원받는 경우죠. (겪어본 바로는 중국 학생들은 아직 국가 장학금이 빵빵해서 중국 정부 지원을 받는 경우가 대부분입니다. 저희 분야가 돈이 엄청나게 몰리는 곳이 아니라 그럴수도 있고, 또 중국 정부 장학금이 있다는것을 알기 때문에 교수 입장에서도 중국 학생이 지원한다면 중국 정부 장학금을 받고 오는지 물어보게 되는 듯 합니다.) 이런 장학금은 대체로 학교 홈페이지와 해당 전공 분야의 홈페이지, 메일링 리스트, 교수의 트위터 등을 통해 공고가 나옵니다. 예를 들어 이런식이죠.

  • Fully-funded PhD position in [연구 주제]
    • 학교: 어디어디
    • 교수: 누구누구
    • 과정 시작: 2016년 가을
    • 과제: 과제이름 무엇무엇. 관련 연구분야; 무엇무엇
    • 전체 박사과정 기간: 36개월
    • 요구 서류: 성적표, 연구계획서 등.
    • 펀딩 소스: 예: 무슨 기업과 관련된 과제, 또는 영국 정부 과제 어쩌구저쩌구, 또는EU과제 어쩌구저쩌구 
대략 이런 내용으로 공고가 뜹니다. 여기서 간과하는 내용이 바로 과제와 박사과정의 연관성입니다.
이 공고를 보고 지원하는 사람 중에 보통 1-2명을 선발합니다. 그리고 선발된 사람은 박사과정을 수행하면서 과제와 관련된 연구를 하게 되지요. 연구를 통해 그 과제에 참여하게 되고, 때론 과제 회의라든지 워크샵을 가기도 합니다. 회사와 관련된 과제라면 실무적인 일을 조금 하게 될 수도 있구요. 이렇게 과제에 참여하는 댓가로 등록금과 생활비를 지원받는 것 입니다.
다시 말하자면,
이렇게 뽑힌 학생은 박사과정을 진행하는 36개월동안 본인이 참여하는 과제 이외엔 아무런 잡일을 할 필요가 없습니다. 과제 제안서? 안씁니다. 제안서를 왜 쓰나요? 자기가 받을 돈이 이미 확보가 되어있는데. TA? 옵션입니다. TA를 하면 하는 시간만큼 시급이 더 나오게 되고 보통은 TA를 안해도 살 수 있는 돈을 줍니다. 교수 잡일? 학교에 행정일 하는 사람 엄청 많아요. 그냥, 36개월간 (=박사과정 내내) 하나의 과제에 참여합니다. 따라서 졸업까지 어떤 연구를 진행할지 스스로 계획을 세우고 이를 수행하면 됩니다. 그것만 하면 됩니다.

운이 나쁘면 실력이 없는, 혹은 성의가 없는 교수를 만날 수도 있습니다. 이렇다할 지도를 받지 못할 수도 있어요. 그런건 정말 어쩔 수 없죠. 그렇지만 박사과정을 진행하는 동안 다른 잡일을 전혀 할 필요가 없습니다. 그리고 하나의 과제만 수행하면 됩니다. 애당초 그러려고 들어온거니까요. 따라서 과제 수행이 곧 연구 진행입니다. 

한국 대학원이 어떤지는 한국에 계신 분들이 더 잘 아실테니 자세히 적지 않겠습니다. 장단점이 있겠지만, 이렇게 플젝 기반으로 박사과정을 선발하는 제도가 한국에도 마련이 되면 좋겠네요. 박사과정의 경우 연구 연속성이 중요한데, 과정중에 여러 과제에 참여할 경우 아무래도 연속성을 지키기가 어렵죠.

질문은 댓글로 달아주세요. 

Thursday, May 26, 2016

Wednesday, May 25, 2016

딥러닝과 음악 분류 (Deep learning and music classification), 2016-05-24, 카이스트

카이스트 남주한 교수님의 수업인 GCT634에서 Deep learning and music classification이라는 제목으로 세미나를 했습니다.
덕분에 교수님과 연구실에 계신분들 만나뵙게되었네요. 같은 분야에 계신 분들을 여럿 만나뵙게되어 여러모로 의미있는 자리였습니다.
강의에 사용한 슬라이드를 공유하니 참고하셔요.



Deep learning for music classification, 2016-05-24 from Keunwoo Choi

PS. GCT634 강의자료가 업로드되어있는데, Music information retrieval 공부하시는 분들에게 훌륭한 공부자료입니다.


Thursday, May 12, 2016

딥러닝 세미나@키스텝, 2015-05-09


딥러닝 개요 (2015-05-09 KISTEP) from Keunwoo Choi


2015-05-09 키스텝에서 진행한 딥러닝 개요입니다. 

짧은 분량이지만 세미나는 매우 인터랙티브하게 진행되어 두시간을 꽉 채웠던 슬라이드입니다. 
다시 말해 슬라이드만 보시면 부족한 부분이 많이 있으니 참고하시기 바랍니다. 
8페이지에 6개의 텐서플로 플레이그라운드 데모를 연결해두었습니다. 링크 눌러보시고 직접 돌려보시면 뉴럴넷에 대해 쉽게 이해하실 수 있을겁니다.

Thursday, March 24, 2016

딥러닝을 이용한 추천엔진 (넷플릭스 컨테스트) 코드 설명

재미있는 글이 올라왔습니다.
https://karthkk.wordpress.com/2016/03/22/deep-learning-solution-for-netflix-prize/
딥러닝으로 협업 필터링(collaborative filtering) 문제를 푸는 코드입니다.

넷플릭스

는 우리가 다 아는 그 넷플릭스입니다.

컨테스트

각 사용자가 영화에 매긴 평점을 학습 데이터로 줍니다. 그리고 사용자가 다른 영화엔 어떤 평점을 줄지를 예측하는 문제입니다. 이걸 이용해서 사용자가 좋아할법한 영화를 추천할 수 있겠죠. 
해당 컨테스트는 100만달러의 상금이 걸려있었고 몇차례 잘 진행되었으나 개인정보관련 문제로 소송이 들어와서 중단되었습니다. 이후에도 데이터를 이용해 논문을 쓰는건 막을수가 없어서 사람들이 계속 활용하고 있습니다.
아마 컨텐츠 추천으로는 제일 널리 쓰이는 데이터셋일겁니다.

요번에 나온 코드

는 아래와 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
movie_count = 17771
user_count = 2649430
model_left = Sequential()
model_left.add(Embedding(movie_count, 60, input_length=1))
model_right = Sequential()
model_right.add(Embedding(user_count, 20, input_length=1))
model = Sequential()
model.add(Merge([model_left, model_right], mode='concat'))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('sigmoid'))
model.add(Dense(64))
model.add(Activation('sigmoid'))
model.add(Dense(64))
model.add(Activation('sigmoid'))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adadelta')

별로 아름답게 코드가 안뜨지만 양해 바랍니다.

설명

  • [1] 데이터에 있는 전체 영화의 수입니다.
  • [2] 데이터에 있는 전체 사용자의 수 입니다.
  • [3-6] 영화의 인덱스를 60차원 벡터로, 사용자 인덱스를 20차원 벡터로 바꿔주는 embedding층을 추가합니다. keras문법을 참고하면, 입력은 [[1],[3],[9],[232423],[534]...], 즉 영화의 인덱스를 받고 그 인덱스 하나하나를 60차원의 벡터로 변환해줍니다. 사용자도 마찬가지구요. 
  • [7-8] 여기에서는 위에서 embedding층의 결과를 다시 입력으로 받습니다. 두 개의 embedding벡터를 이어줍니다.
  • [9-16] 그리고 3개의 dense layer, 혹은 fully connected layer, 혹은 일반적인 인공신경망의 층을, 혹은 3개의 MLP를..아무튼 뉴럴넷을 이어줍니다. 최종 출력은 노드가 1개인 스칼라 값이네요. 넷플릭스는 총 5단계 (1,2,3,4,5)로 평가합니다. 따라서 값의 범위가 1-5인데, 이걸 그대로 사용했군요. 
  • [17] MSE로 loss function을 정해주고 adadelta로 최적화합니다.
여기에서 일어나는 학습을 세 가지로 나눠볼 수 있겠네요.
  1. 영화 인덱스 → 60차원 벡터
  2. 사용자 인덱스 → 20차원 벡터
  3. 80차원의 벡터 [60차원 영화 임베딩 + 20차원 사용자 임베딩] → 스칼라 값 (평점)
이 세 가지 학습의 목표는 평점을 정확히 예측하는 것 이구요.
보통 추천 시스템에서 사용하는 Matrix factorisation과 풀이 과정이 달라서 좀 이해가 안갔는데, 아예 다른 접근법이라고 보면 될 것 같습니다. 

생각할 거리

  • 출력층의 [1,2,3,4,5]값을 [0.2, 0.4, 0.6, 0.8, 1.0]으로 바꿔주고 (혹은 [0.1, 0.3, 0.5, 0.7, 0.9]가 더 괜찮을지도..) 출력층에도 sigmoid를 적용한 뒤 crossentropy를 쓰거나,
  • [1,2,3,4,5]의 범주로 분류하는 분류 문제(classification problem)으로 설정하고 softmax를 쓰면 어떻게 될지 궁금하네요.
  • 그 외에 다양한 머신러닝 학습 기법이 어떻게 적용될 수 있을런지도 마찬가지로..
  • 이 방법이 정말 테스트셋에서도 잘 된다면 굉장한겁니다. 엔지니어링쪽은 잘 모르지만 일단 새 아이템 엔트리를 추가하기도 아주 간단하고 (학습데이터에 그냥 넣어서 계속 돌리면 되죠) 메모리도 많이 차지할 것 같지 않은데요? 저정도 크기의 파라미터는 GPU메모리에 충분히 들어갈테니...
  • 업데이트된 글에 의하면 실제 컨테스트에서 썼던 test set과, 글에 나온것처럼 트레이닝셋을 나눠서 하는것과는 성능 차이가 좀 난다고 하네요. test set의 경우엔 아예 평점을 매긴 날짜 자체가 다르고 등등, 난이도 차이가 있다고 합니다.