10. transfer learning

2018. 7. 31. 12:46

딥러닝은 아주 강력한 모델이지만, 진입장벽이 높다. 3가지 이유를 생각해보자.

image

1) 충분한 양의 데이터
2) 고성능 하드웨어(GPU)
3) 딥러닝으로 구현한 알고리즘 및 튜닝 노하우

3가지 중에 Data를 구하는 것이 가장 큰 문제라 볼 수 있다.


이미지 데이터를 구하는데 어려움을 겪고, train시키는데 너무 많은 시간이 소요된다.
하지만, train시킨 결과물(weight)용량이 적다. 그리고 train시간보다 predict(예측)하는데는 시간이 별로 걸리지 않는다.

아무리 복잡한 모델이라도, train된 결과물(weight)를 가져와서 예측한다면, 고성능 하드웨어 없이도 가능하다는 말이 된다.

이미 누군가가 만든 알고리즘 모델을 가져와서 쓰는 것을 transfer learning이라고 한다.


Transfer learning

하지만, 아무리 큰 기관이라도 모든 데이터를 학습시켜놓진 않는다.
대안으로서, (ResNet은 마이크로소프트. GooGleNet은 Google이) 이미지넷을 가지고 학습시킨 완성된 딥러닝 모델을 가져오게 되면, 우리가 새로만드는 모델보다 성능이 훨씬 좋을 것이다.
이미지넷 데이터도 모든 데이터가 있는 것이 아니기 때문에, 우리가 우리 데이터에 맞추어 마지막단계에서 train만 시켜주면 된다.
image

예를 들어, 이미 학습이 끝난 VGGNet모델을 다운받고, 마지막 Fully-connected N.N.만 없앤 뒤, 자신이 보유한 데이터에 맞게 마지막 Outpt Layer를 완성한 뒤, 이 Layer에서만 train시키면 되는 것이다.
왜냐하면, 이미지넷 챌린터의 목적(label)은 1000가지 카테고리를 판단하는 것인데, 우리는 필요한 만큼의 label만 분류해주면 되기 때문이다.
이 때, 앞의 Layer의 output neuron에 대해서는 weight는 랜덤초기화가 들어가게 된다.
이미지넷 챌린지로 train된 Conv. Layer들은 feature만 뽑아놓은 상태이기 때문에, 우리는 Single-Layer N.N. 등으로 다시 train시킨다면, 그냥 우리가 모델을 만들어서 쓰는 것보다 언제나 결과가 좋다고 한다.

즉, 꼬다리만 떼고, 마지막 Layer만 train시키고, 앞의 weight들은 건들지 않으므로 train속도가 훨씬 빠르다.

image

그림상의 VGGNet모델 같은  base모델을 backbone모델이라고 한다. 백본을 활용해서 모델을 구성해야한다!
데이터가 너무 많을 때는, 약간 앞의 레이어도 같이 학습할 수 있다.
이러한 weight학습 세팅은 keras에서 모델구성시 수정할 수 있다.


transfer learning전까지는 하나의 딥러닝 경진대회마다 새로운 알고리즘이 나왔었다.
하지만 T.L. 이 등장하여. 마지막 Layer만 수정하여 자신이 분류하고 싶은 label만큼 output을 수정한 결과
모든 알고리즘을 다 이겼다는 후문이다..ㄷㄷㄷ

image


결론적으로 무슨 경진대회든, 데이터가 작을수록 가능한 transfer learning을 하면된다.

요약하자면)
오픈된 이미지넷 챌린지 train완료 모델을 다운받아서, output Layer만 수정하여 train시키면 되므로 하드웨어성능이 많이 크게 필요하지 않는다.
백본모델을 갈아끼우는 식으로 하면 모델 학습하기가 쉬워진다.


Transfer 모델도,, 이미지 챌린지 카테고리에 걸린 것들만 성능이 좋아진다.
만약 없는 데이터라면,, 분류가 안된다.


실습

VGGNet을 백본모델로 하여, keras를 이용해 빨간줄 친부분까지를 완성시켜보자.

image

로컬 노트북 파일

keras로 VGG16을 백본으로 고양이/개 binary classification + 히스토리 + 평가까지

+ Recent posts