Transfer Learning : TensorFlow Hub

Google은  최근 TensorFlow Hub이라는 library를 발표하고, transfer learning이 용이하도록 library를 제공하였다.  기존에 개발된 많은 모델과 dataset을 이용하여 이미 학습된 정보를 모두 포함하고 있는 module을 그대로 차용하여 다른 프로젝트에 활용하는 것이 transfer learning의 핵심 개념이다. 이러한 방법이 없다면, Deep Learning을 통한 application 개발은 많은 데이터와 연산능력을 확보한 조직의 전유물이 될수 밖에 없을 것이다. 다행스럽게 이 모든 정보를 공개해 놓고 있으며, 이번에 Google은 TensorFlow Hub을 통해 더욱 더 편하게 이를 사용할 수 있도록 만들었다. 앞선 posting도 transfer learning을 확용한 예이지만, Hub module을 사용하는 것이 더 편하다고 할 수 있다.

예를 들어 이미지 classification을 위한 transfer learning을 계획해 보자. CNN의 구조가 일반적으로 Input – (Convolution-Pooling-Activation) -Fully connected layer – logit layer (output layer)의 구조를 가지고 있지만, 다양한 방법으로 몇십 layer를 적층하는 deep learning 방법을 사용한다고 할때, Transfer Learning에서 우리가 그대로 이용하고 싶어하는 학습 layer는 이미지의 특징을 추출하는 layer들이며, class를 최종 판단하는데 관여하는 layer는 새로 학습 시켜야 하는 것이 자연스러운 접근 방법이 될것이다.

Bottlenecks

“Bottleneck”이라는 용어는 앞서 설명한 이미지 특징이 추출된 정보를 포함하는 layer를 지칭하며, 최종적으로 이미지 분류를 시행하는 layer 바로 앞에 존재한다. TensorFlow Hub에서는 이것을 “image feature vector”라고도 한다. 이 layer는 이미지 분류에 필요한 정보를 함축하고 있는 것으로 실제 이미지 분류에 충분한 정보를 가지고 있으므로, 각 이미지별로 이 feature vector값을 계산해 내면 곧바로 최종 classification layer에서 옳바르게 이미지 분류를 할 수 있도록 training할 수 있다. 그러므로, training step이 반복될때마다, 각 이미지의  feature vector값을 계산한다면 비효율적이므로 처음에 한번 계산한 후 결과 값을 저장하고, 학습하는 동안 재사용하는 방식을 사용한다.

Bottleneck이라는 단어는 병목지점을 의미하나, 여기서는 모든 정보가 하나로 모이는 지점을 의미한다. 즉 정보의 수렴지점이며, 다른 새로운 정보를 창출하는 거점 역할을 한다.

테스트

TensorFlow Hub에서 module을 불러와서 이미지를 분류하는 예제를 실행시켜 보았다. 불러온 module은 NASnet_large version으로, 이 모델을 처음부터 학습시키는것은 장비로나 시간으로나 쉽지 않은 일이지만, transfer learning에 사용하도록 학습된 모델을 다운로드 받아 재사용할 수 있으므로 간단하고 학습시간도 얼마 걸리지 않는다.

tensorflow의 graph 형태는 아래와 같다. 맨 아래쪽에 module이 있고 이 모듈을 사용하여 각 이미지의 feature vector를 구하는 node를 오른쪽에 볼 수 있다. 아래 그림의 final_retrain_ops가 우리가 학습시키는 final layer이다.

graph_large_attrs_key=_too_large_attrs&limit_attr_size=1024&run=

아래 그림은 training중 accuracy의 변화 추이를 나타낸 그래프이다. 두 가지의 accuracy tend를 볼 수 있는데, 주황색은 train accuracy이며 파란색은 validation accuracy를 나타낸다. 대부분의 경우가 그렇지만,  overfitting현상은 여기서도 나타나며, validation accuracy가 7 point percent 정도 낮은 값을 보인다. 주목할 점은 accuracy의 향상 속도인데,  transfer training을 수행하니 초반에 매우 빠른 속도로 accuracy가 증가함을 알 수 있다.

Screenshot from 2018-04-04 16-58-53

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중