AI | ML

Transfer Learning 가이드

깜태 2021. 1. 5. 10:04
728x90

 

많은 사람들이 딥러닝을 처음 접하고 이용할 때, 수많은 논문들의 github 코드를 가져와서 사용하곤 합니다.

 

이 때, Transfer Learning이라 하여 기존의 학습된 가중치를 이용해 본인이 적용하고자 하는 업무에 조금 변형하여 사용합니다.  

 

fine-tuning, Transfer Learning, pre-trained model 등 다양한 이름들이 존재하는데, 언제 어떻게 사용하는게 좋을까요?

 

스탠퍼드 대학교에서 가르치는 컴퓨터비전 과목에서는 다음과 같이 적혀 있습니다.

 

 

정리해서 말하면 Transfer Learning에는 3가지 시나리오가 있는데, 

 

1. Convolutional Network를 특징추출기로 사용하는 경우 : ConvNet의 마지막 FC layer를 제외하고, 새로운 데이터셋의 특징 추출기로 사용할 때

 

2. ConvNet을 fine-tuning 하는 경우 : 새로운 데이터셋의 분류기를 바꾸고, 재학습할 때

(보통 CNN에서 초반 레이어는 edge나 color blob 같은 general한 특징을 뽑아내지만,  나중 레이어는 데이터셋에 포함된 클래스의 특징들을 뽑아냅니다) 

   (그렇다면 이를 염두하고 새로운 데이터셋에 맞게 수정할 때 사용되겠죠)

 

3. 모델을 재학습하는 경우 : 다시 학습하는 경우 2~3주를 걸려가며 다시 학습시킬 필요 없이, 다운받아서 사용하면 되기 때문

 

2번의 경우는 경우가 더 복잡해보입니다.

 

그렇다면, 언제 fine-tuning을 이용해야 할지에 대한 답변도 적혀있습니다.

 

새로운 데이터셋에 transfer-learning 을 적용할 때, 여러 요인들이 있겠지만 중요한 2가지를 따지면

  1. 새로운 데이터셋이 큰지, 작은지
  2. original dataset과 얼마나 유사한지

를 판단해야 한다고 합니다. 

 

그리고, 위에 언급한 CNN에서 초반 레이어는 edge나 color blob 같은 general한 특징을 뽑아내지만,  나중 레이어는 데이터셋에 포함된 클래스의 특징들을 뽑아낸다는 것을 염두해두고 다음의 경우를 따져보라고 합니다.

 

  1. 새로운 데이터셋이 작지만, 기존 데이터셋 유사한 경우 
  2. 새로운 데이터셋이 크지만, 기존 데이터셋과 유사한 경우
  3. 새로운 데이터셋이 작지만, 기존 데이터셋과 다른 경우
  4. 새로운 데이터셋이 크고, 기존 데이터셋과도 다른 경우

새로운 데이터셋이 작지만, 기존 데이터셋 유사한 경우에는 overfitting이 우려되고, 기존 데이터와 유사하기 때문에 high level feature도 비슷하게 뽑힐 것입니다. 따라서, 분류기만 따로 학습을 진행하는 게 최고의 아이디어라고 합니다.

 

새로운 데이터셋이 크지만, 기존 데이터셋과 유사한 경우, 데이터가 충분히 많아서 overfitting되지 않을 자신이 있다면, fine-tuning 하는 하는 의미가 충분히 있다고 합니다.

 

새로운 데이터셋이 작지만, 기존 데이터셋과 다른 경우, 데이터가 작기 때문에 분류기만 학습시키는게 최선이겠지만, 데이터셋이 매우 다르다면 데이터셋에 특화된 특징을 뽑아내는 것은 어렵습니다. 대신에, 분류기 이전에 네트워크의 어느 부분부터 SVM 분류기를 학습시키는 게 더 나을 수도 있다고 합니다.

 

새로운 데이터셋이 크고, 기존 데이터셋과도 다른 경우, 매우 크기 때문에, 처음부터(scratch) 다시 학습하길 권합니다. 하지만, pre-trained model이 가중치를 초기설정하는데 유용한 경우가 꽤 많은 경우도 있으니, 이런 경우에는 충분한 데이터를 갖고 전체 네트워크를 fine-tuning 하길 권장한다고 합니다.

 

읽어주셔서 감사합니다.

728x90