그룹에 워낙 대단하신 분들이 많고, 다들 한국 AI를 대표하시는 분들이 시라 지원서를 제출할 때 기대를 거의 안 했다.
사실 나 같은 루키를 받아주실 줄은 별 기대를 안 했는데, 정말 감사하게도 합격이 되었다!
정말 그룹에 참여하는 것 자체도 나에겐 엄청난 영광이고, 그룹에 초대해주셔서 정말 감사하게 생각하고 있다(이번 기수 대략 25분 중 학부생은 나밖에 없는 거 같다...)
현재까지 다른 분들의 발표를 3-4주를 들었는데, 너무너무 좋다. 다양한 딥러닝의 주제를 발표해주신다. 설명도 꼼꼼하고 이해하기 쉽게 해 주시고, 발표 내용도 너무 유익해서 너무 감사하게 듣고 있다. 한 번도 빠짐없이 미팅에 참여하고 성실하게 활동해서 다음 기수, 다다음 기수, 다다다음 기수까지 계속 활동을 하고 싶다.
어쨌든 나는 4주 차 발표(2월 16일)를 진행하였다. 주제는 EHR Data in DeepLearning이었고, 발표한 논문은
2018년에 구글이 Nature 자매지에 발표한 'Scalable and accurate deep learning with electronic health records'이다.
이 분야는 내가 예전부터 공부해보고 싶었던 분야기도 하고, 너무 재밌어 보이는 분야여서 발표 주제로 고르게 되었다.
발표할 때 엄청 떨렸지만, 어찌어찌 잘 마무리 지은 것 같다. 발표를 들으신 분들이 이해가 잘 되고 재밌게 들으셨길 바라고 있다. 그리고 녹화를 한 동영상을 유튜브에 올렸는데(내 첫 유튜브 업로드이다!),
혹시 참고가 될까 하여 링크를 적어보려 한다.
발표 끝부분에 살짝 언급이 되었지만, 사실 우리나라에서 아직까지는 EHR, EMR을 딥러닝에 이용한 연구가 많이 발달되지 않다고 하다.
(미국 같은 경우에는 벌써 엄청 인기가 많다고 한다) 얼른 이 분야도 많이 발전이 되었으면 좋겠다! 내가 좋아하는 분야니까
간단하게 만들어보았다. tf/keras에서 convolution, pooling layer에서 그냥 padding='same'하면 알아서 padding size 계산해서 패딩을 해주긴 하지만, 가끔 직접 패딩사이즈가 어떻게 되는지 필요할 때도 있어서 padding size를 리턴해주는 함수를 만들어보았다.
인풋으로는 input_shape, filter_size, strides 가 들어온다. 모두 (width, height)을 가진 리스트이다.
이때 padding = 'same'일 경우 padding size를 계산해서, 리턴해준다.
학기가 시작되고 20학점 들으면서 일도 계속하니까 토플 공부도 못하고 있는데 블로그를 쓸 시간은 도저히 나지 않는 것이다ㅠㅠ
그러던 중 인공지능 관련 교양 과목을 하나 듣고 있는데, 인공지능 관련 보고서를 쓰는 과제가 있어서 내가 일하고 있는 분야인 Image Classification 관련 정리도 해볼 겸 주제를 'Image Classification 연구의 동향'으로 잡고 보고서를 썼다. 바빠서 보고서를 자세히는 못 쓰고 의식의 흐름대로 그냥 적어서 깊이 있게는 못 적고, 검토도 못해서 틀린 부분이 많을 수 있지만 그래도 내용을 여기에다도 올려보겠다.
이와같은구조를가지며 71.5%의 Top 1 Accuracy, 90.1%의 Top 5 Accuracy를자랑하는이모델은 AlexNet과의구현상큰차이는없지만단지더많은 layer를(13개의 Convolution layer, 2개의 Dense layer) 사용하였을때얼마나더좋은성능을가질수있는가를보여줍니다. 최근의 어마무시하게 거대한딥러닝모델들에비하면턱없이작은수준이지만, 그래도이렇게모델의덩치를키우는 것 만으로도 5% 이상의정확도의향상을얻을수있다는것을보여준모델이었습니다.
마지막으로 Xception(2017,https://arxiv.org/abs/1610.02357) 모델에대하여알아보겠습니다. 79%의 Top 1 Accuracy, 94.5%의 Top 5 Accuracy를가지는이모델은, 마찬가지로구조가너무커서전체이미지를첨부하지는못하지만옆의이미지와같은블록이사용되었습니다. 가장큰차이는 Separable Convolution(Depthwise Convolution + 1x1 Point wise Convolution)을사용하였다는 것 입니다. 마찬가지로이방법은블록의크기는유지시키면서훨씬적은수의파라미터를사용하였다는것에의미를가질수있습니다. 일반적인 Convolution이아닌 Separable Convolution을사용할때의장점은, 밑의이미지에서보이는 것 처럼 인풋채널의수만큼의커널이각각채널을 convolution 한다는것입니다.
convolution layer을 포함하는 model을 직접 만들 때, convolution 후의 output shape을 이용하여 다음 레이어에 넘겨줘야 하는 경우가 있다. 내 기억에는 좀 더 간단하게 모델을 만들 수 있는 Keras 같은 경우에는 우리가 output shape을 계산해야 할 필요는 없지만(그냥 convolution layer을 계속 쌓으면 알아서 output shape을 계산해서 넘겨주는 것 같다), 더 deep 한 level을 건들 수 있는 tensorflow를 이용하여 model을 만들 때는, Convolution후의 shape을 코드를 짜는 사람이 직접 다음 레이어와 맞춰줘야 하는 경우가 많다.
그래서 convolution 후의 shape을 구하는 공식을 알아보려고 한다. 물론, convolution이 어떻게 계산되는지 잘 모르는 경우에는 직접 작은 예제(ex, 10x10 image, 2x2 filter, stride=1, padding =(1,1,1,1))등으로 한 번 output shape을 계산해 보는 것을 정말 추천한다! 필자는 직접 해봐서 공식을 유도해봤는데, 예전 수능 수학 공부하던 시절이 떠올라서 잠시나마 추억에 젖었었다. 하지만 매번 공식을 유도해서 output shape을 계산할 순 없으니! 공식을 알아보자. 이전에는 계속 까먹어서 매번 구글링을 해서 사용을 했지만(구글링 하면 쉽게 바로 나온다), 블로그도 시작한 겸 여기다가 구글링 해서 찾은 것을 그래도 적어보자 한다.
한 번 더 정리해보자면, W는 image size다. image의 height, width가 다른 경우(정사각형이 아닌 경우) height과 width를 각각 W에 적용해서 구하면 된다. K는 kernel(filter라고 불리기도 한다) 사이즈이다. P는 얼마큼 패딩을 하는지를 의미한다. S는 스트라이드(필터를 몇 칸 씩 건너뛸 것인지)를 의미한다. 이 공식을 이용하여 output shape을 쉽게 구할 수 있다!
참고로, kernel을 움직이다가 rightmost, bottommost 쪽에 자투리가 남을 수도 있을 것이다. 그때는 padding='same' or padding='valid'(tf & keras 기준) 둘 중 어떤 방식을 사용했는지 체크하고 자투리에 적용하면 된다!(same과 valid가 어떻게 다른지 궁금하다면 구글링을 해보자! 나중에 시간이 나면 저 둘의 차이에 대해 포스팅을 해보겠다)
사용자가 직접 model을 만들 수도 있지만, Google, Facebook 같은 기업이나 여러 대학들, 혹은 개인이나 단체에서 이미 만들고 실험을 한 좋은 model들이 많다. 이렇게 만들어진 유명한 model들을 따라가다 보면, 현재 AI 트렌드가 어떤 식으로 변하고 있는지, AI를 발달시키기 위해 대단하신 분들이 어떤 세련된 방법을 고안하셨는지도 공부할 수 있다.
현재 나는 Image Classification 관련 업무를 하고 있어서, NLP와 Face Detection 같은 분야의 유명 model들은 대충 '아~이 model 유명하지. 아~이거 들어봤어' 정도의 얕은 지식만 가지고 있다. 그래서 당분간은 Image Classification Model들만 간단히 리뷰를 하려고 한다.
Model Review를 할 수 있는 다양한 방법들이 많은 것 같다. paper를 직접 읽던, 구글링을 통해 model structure를 살펴보던, 유튜브에서 model review 영상을 보던... 하지만 이곳에 내가 정리를 하려는 이유는, 저런 방법들을 통해서 model review를 한 직후에는 '아! 이 model 이제 완벽히 이해했어' 생각이 들지만, 3일 지나면 다 까먹기 때문이다...('separable convolution이 xception에 쓰였던가 inception에 쓰였던가 둘 다 다 쓰였던가...? 하필 모델 이름은 헷갈리게 왜 이렇게 비슷한거')