본문 바로가기

AI/이론

[ML] Transfer learning1

 
한 명의 개발자가 있습니다. 이 개발자는 개, 고양이, 말, 소, 양을 구별할 수 있는 이미지 분류용 CNN 모델을 만들어야합니다. 보스가 시켰으니까요. 그래서 이 개발자는 수많은 개, 고양이, 말, 소, 양의 이미지를 인터넷상에서 많이 찾아왔습니다. 이 이미지들을 가지고 CNN 모델을 훈련시켰습니다. 수많은 테스트를 통해 최적의 모델 가중치(weights)를 찾아냈습니다. 즉, CNN 모델 내의 많은 가중치들이 개, 고양이, 말, 소, 양을 분류하기에 적합하도록 조정이 된 것이죠. 
 
그런데 갑자기 보스가 개, 고양이, 말, 소, 양은 분류할 필요가 없어졌다고 합니다. 그것 대신 사슴, 코끼리, 토끼, 염소, 호랑이를 분류할 수 있는 모델을 만들어달라고 합니다. 최대한 빨리! 이 개발자는 너무나 짜증이 났습니다. 힘들게 모델을 만들었는데, 무용지물이 되고 만 것이죠. 다시 처음부터 이 과정을 반복하자니 너무 막막합니다. 그래서 개발자는 아이디어를 냅니다. '동물들 종류만 바뀌었지 동물의 종을 분류해내야하는 것은 동일하니 이전에 만든 모델의 가중치를 가져와서 그것을 추가적으로 새로운 과제에 맞게 조정해보면 어떨까?' 이 개발자의 아이디어는 통했습니다. 아예 처음부터 새로 훈련하는 것보다는 훨씬 더 빠르게 수렴했습니다. 생각보다 빠른 시간내에 새로운 분류기를 만들어낸 것이죠. 

https://bskyvision.com/698

 

학습 모델의 재사용 (Transfer Learning)

 

DNN 모델을 스케치 단계서 부터 전부 다시 학습하는 것은 어려운 일이다. 정말 많은 데이터를 필요로 하기 때문에 학습이 거의 대부분 실패 한다.

여러 방법이 있을 수 있지만 여기서는 Transfer Learning을 다룬다. 잘알려진pretrainted model을 이용해서 마지막 final layer만 수정해서 본인의 목적에 맞게 다시 학습 시키는 방법이다.
혹자는 Fine tuning이라 부르기도 한다.

본인 보유한 데이터 양에 따라 어느 정도 레이어들을 수정할지가 결정된다. 보통 앞부분 layer는 추상적인 feature를 extraction하는 레이어이므로 건들지 않고 마지막 레이러들을 수정한다.

하지만 pretrained model이 현재 수행하려고 하는 작업에 전혀 관련이 없다면Transfer Learning이 의미가 퇴색 된다.
이 경우 unsupervised pre-training방법으로 RBM 또는 Autoencoder방법을 사용하거나 실제로 labeling 데이터를 왕창 모아서 학습을 해야한다.
하지만 scarth부터 random initialization 상태에서 학습하는 것은 매우 도전적인 일이므로 추천 하진 않는다.

결국 아무 때나 Deep Learning을 쓰기엔 무리가 있다.

 

개념설명

아래와 같이 ImageNet모델이 있다고 가정한다. 1000개를 classify할 수 있다.

이것을 가지고 고양이 Tigger, Misty, Neither 세개를 구분하는 모델을 만든다. 당연히 이런 특정 고양이 이미지는 많이 없다. 따라서 pre-trained 모델을 사용 한다.

이 때 학습할 때 마지막 softmax layer만 학습하게 된다.
이전 데이터는 freeze하게 된다. 이것은 deep learning framework에 따라 구현코드가 달라진다. 이후에는 TensorFlow를 이용해서 이 방법을 다룬다.

  • trainablePrameter =0, freeze = 1

그리고 이러한 freeze레이어의 숫자는 training data의 양에 따라서 다르게 적용할 수 있다.

 

 

 

 

학습 모델의 재사용 (Transfer Learning)

학습 모델의 재사용 (Transfer Learning) DNN 모델을 스케치 단계서 부터 전부 다시 학습하는 것은 어려운 일이다. 정말 많은 데이터를 필요로 하기 때문에 학습이 거의 대부분 실패 한다. 여러 방법이

goodtogreate.tistory.com

 

 

 

기존의 기계학습 알고리즘에서는 2개의 훈련 데이터셋을 학습할 때, 비록 2개의 데이터셋이 비슷한 특징을 가진다고 하더라도, 2개의 모델을 각각 독립적으로 만들어서, 사용합니다.

예를 들어서, 첫번 째 모델은 가구에 소파, 식탁, 장롱 등의 다양한 category를 분류하는 모델이며, 두번 째 모델은 다양한 가구중에서 소파인지 아닌지를 분류하는 binary classification 모델이라고 가정하면, 첫번째와 두번째 모델은 각각 독립적으로 학습됩니다.

반면에, Transfer Learning은 이전에 사용되었던 모델의 정보를 입력받아 새로운 모델을 학습합니다.

예를 들어서, 가구를 분류하는 CNN 네트워크가 사전에 만들어져 있다고 합시다. 실제로 가구를 분류할 때, 사용되는 Feature들이 소파인지를 분류하는 Feature는 분명히 비슷한 점이 많기 때문에, 만들어져 있는 CNN 네트워크에서 만들어진 Feature를 새로운 모델을 만들 때, 그대로 사용하면 학습 시간에 있어서 상당히 줄일 수 있습니다.

이 때, 사전에 학습되는 모델을 pre-training 이라고 정의하고, 이를 활용하여 새로운 모델을 학습하는 과정을 Fine-tuning 이라고 정의합니다.

다음으로, Fine-tuning 과정에 대해서 배워보도록 하겠습니다.

Fine tuning 은 크게 4가지 유형으로 나눌 수 있습니다.

1. Small dataset and similar to the pre-trained model`s dataset

첫 번째는, 데이터셋이 적지만, 기존에 pre-trained 된 데이터 셋과 비슷한 특징을 가지는 경우입니다.

이 때, 데이터가 적기 때문에, 전체 네트워크에 대하여 Fine-tuning을 하면, over-fitting 문제가 발생합니다.

따라서, FC layer에 대해서만 Fine-tuning을 진행합니다.

Conv. layer에 대해서 학습을 막기 위해서 learning rate를 0으로 주고, 학습하는 층에 대해서는 learning rate를 기존에 pre-trained 된 네트워크의 learning rate의 1/10의 값으로 사용합니다.

왜냐하면, 만약 높은 값의 learning rate를 사용하면, 기존에 있던 정보들은 새로운 데이터 셋에 맞춰서 새로 업데이트 되기 때문에, pre-train 하는 이유가 없어집니다.

 

 

 

 

[신경망] 17. Transfer Learning

안녕하세요. 이번 포스팅에서는 Transfer Learning 에 대해서 배워보도록 하겠습니다. ​ 기존의 기계학습 알고리즘에서는 2개의 훈련 데이터셋을 학습할 때, 비록 2개의 데이터셋이 비슷한 특징을

analysisbugs.tistory.com

 

 

 

두 pre-trained 모델을 훈련시킬때는 feature extraction  fine-tuning 두가지 방법을 사용하여 비교했어요.

Feature extraction은 ImageNet 데이터셋으로 훈련된 pretrained 모델의 dense layer를 제외한 다른 layer의 weight는 고정(freeze)시키고 dense layer의 weight만 update하여 모델을 훈련시키는 방식이에요. Pretrained 모델이 ImageNet 데이터셋으로 이미지 특징을 잘 추출했기 때문에 dense layer의 weight만 update 하여도 좋은 성능을 얻을 수 있거라 기대 할 수 있어요.

Fine-tuning은 feature extraction에서 더 나아가 dense layer뿐만 아니라 네트워크내 다른 layer의 weight를 update 하여 훈련시키는 방식입니다. Feature extraction은 목표 feature를 잘 추출했다는 전제하에 좋은 성능을 낼 수 있는데 그렇지 못할경우, 예컨데 ImageNet 데이터셋의 이미지 특징과 당근마켓 중고물품의 이미지 특징이 상이할 경우, fine tuning은 중고물품 이미지로 네트워크 layer의 weight를 다시 update함으로서 feature를 추출하는식이에요.

 

1. 기본 Pretained model 2. Feature Extraction 방법 3. Fine-tuning 방법

 

 

 

이미지만으로 내 중고물품의 카테고리를 분류해준면? (feat. Keras)

안녕하세요 당근마켓 인턴 jeon입니다.

medium.com