2017년 9월 11일 월요일

딥러닝 모르는 나를 어느정도 이해하게 만든 슬라이드 소개

https://www.slideshare.net/yongho/ss-79607172

카카오 개발자가 쓴 딥러닝 설명 슬라이드인데 회사 동료가 추천해줘서 방금 읽어보았다. 이제 막 데이터 전처리와 머신 러닝을 공부하고 있어서 딥러닝은 잘 모르는데 이걸 읽고나니 어느정도 이해가 된다. 공부 엄청 하셨으니 이정도로 이야기를 쉽게 풀어낼 수 있으셨겠지만 어쨌든 본인이 이해하고 있는 내용을 이렇게 설명해낼 수 있는 능력이 부럽다ㅠㅠ 겁먹은 동생 살살 달래주면서 차근차근 알려주는 동네 형아 스타일.

위 슬라이드를 읽고 나면 적어도 아래 용어에 대한 거부감은 갖지 않게 된다.
ReLU
Stochastic Gradient Decent
DropOut
Convolution
MaxPooling
SoftMax

ReLU (Gradient vanishing 문제의 해결책(?), Underfitting을 막는다.)
예전엔 Back propagation(현재 내가 틀린 정도를 미분(기울기) 한 것)을 수행할 때 sigmoid 함수를 사용했었나 보다. 문제는 back propagation 학습 과정에서 sigmoid의 미분함수가 들어가게 되는데 sigmoid의 미분함수는 최대값 0.25에 양끝으로 갈수록 0에 가까워지는 모양이라 학습이 진행되면서 gradient가 0에 수렴해질 가능성을 갖고 있다. 그래서 앞 쪽에 위치한 hidden layer가 잘 학습되지 않는 문제가 발생하였다. (이 문제를 'Gradient vanishing'이라 부르나 보다.)
이 문제의 해결책으로 제시된 것이 바로 ReLU 함수이다. 설명 내용에서 처럼 용어가 익숙하지 않아 거부감이 드는 것이지 실제론 max(0, x)의 아주 단순한 함수에 불과하다. 이 함수의 장점은 양의 구간에서 미분값이 전부 '1'이 되기 때문에 sigmoid 함수를 이용했을 때의 문제점을 해결해주며 미분 계산마저 간단해짐에 따라 학습 속도가 빨라진다는 장점까지 가지고 있다. (음의 값을 갖을 때 gradient가 0이 될텐데 유사한 문제가 있는건 아닌가 하는데 잘 모르겠다. 어쨌든 sigmoid를 쓸바엔 ReLU를 쓰라는 정도로 이해하고 있어야 겠다.)

슬라이드 작성하신 분 께서는 위처럼 구구절절한 내용을 2줄로 어떻게 정리하셨냐면,
문제? 전달하다가, 사그라져 버린다 (vanishing gradient)
해결! sigmoid -> ReLU = 뒤로전달 오케이!
이 부분만 봐도 이분 일 참 잘하실듯 ㅋㅋ

Stochasic Gradient Decent (NN이 느리게 동작하는 단점을 보완)
기존의 Gradient Decent는 모든 트레이닝 데이터의 전체 에러를 계산한 뒤에 weight를 업데이트 시키는 방식이었다고 한다. 문제는 시간이 너무 오래 걸린다는 점인데 Stochastic Gradient Decent는 이 단점을 보완하기 위해 등장하였다. SGD는 '느린 완벽'보다 '조금 훑고 빨리 지나가는' 방식을 택한다. SGD는 스텝마다 에러를 계산할 때 일부 데이터 셋만 검토한 뒤 weight를 업데이트하게 되는데 Gradient Decent에 비해 최적의 해는 아니더라도 어쨌든 목적지 근처로 빠르게 다가설 수 있다. (이 분께선 SGD도 좋지만 '방향'과 '보폭'을 고려하는 개선된 버전인 'Adam'을 권하고 있다.)

이것도 2줄로 정리됨.
문제? 걸음마다 batch로 전부다 계산하려니 GD가 너무 오래 걸린다.
해결! SGD로 mini-batch마다 움직여 같은 시간에 훨씬 더 많이 진행해서 해결!

DropOut! (Overfitting 문제를 해소한다.)
학습 시킬 때, 일부러 정보를 누락시키거나 중간 중간 노드를 끄는 방식이라고 한다. 트레이닝 데이터가 아주 상세한 경우 오버피팅 문제가 발생할 수 있는데 이럴 때 dropout을 하면 잘 발견되지 않았던 패턴이 드러나거나 진짜로 중요한 요소가 무엇인지 네트워크가 알 수 있게 된다고 한다.

# 문제의 유형에 따른 아키텍쳐
스냅샷성 데이터 > CNN
시퀀스성 데이터 > RNN / LSTM

그 다음엔 VGG에 대해 설명하고 있다.
CNN의 일종으로 믿고 쓰는 알고리즘의 일종이란다. 슬라이드 작성자 분 꼐서는 조각을 보고, 패턴을 익힌 후 점점 멀리서 조합을 보는 방식이라고 설명하고 있다. 설명과정에서 개념 용어가 몇가지 나온다.
Convolution: 특정 패턴이 있는지 박스로 훑으며 마킹. (일반적으로 머신 비전에서도 흔히 쓰는 테크닉이다.)
MaxPooling: n x n pool을 중요한 정보로 줄이는 테크닉. 선명한 정보만 남겨서 판단과 학습을 쉽게끔 해준다.

위와 같은 기법으로 input 데이터를 추상화시킨 후, 결과물을 Fully Connected Layer에게 전달해서 output을 얻는다. (O/X 문제는 output에 sigmoid 함수를 먹여서 얻고, category 문제는 output에 softmax를 먹여서 답을 얻는다 한다.)

듣도보지못한 블로그라 슬라이드 작성자 분께서 이 글을 읽으실일은 없겠지만 정말 감사하다는 얘기를 남기고 이만 총총.

댓글 없음:

댓글 쓰기