본문 바로가기

Programming/(Python)(Ubuntu)

Transfer Learning(전이 학습)

오늘날 딥러닝 분야에서 주요하게 연구되는 주제가 있습니다. 바로 Transfer Learning(전이 학습)입니다.

 

 

Transfer Learning(전이 학습) 이란?

(학습 데이터가 부족한 분야의 모델 구축을 위해 데이터가 풍부한 분야에서 훈련된 모델을 재사용하는 학습 기법)

 

이는 특정한 Task( Classification, Detection, Segmentation 등)에 대하여 학습된 딥러닝 모델을, 다른 Task로 Transfer(전이)하여 해당 모델으 사후적으로 학습하는 개념을 포괄합니다. 특정 분야에서 학습된 신경망의 일부 능력을 유사하거나 전혀 새로운 분야에서 사용되는 신경망의 학습에 이용하는 것을 의미합니다. 따라서 기존의 만들어진 모델을 사용하여 새로운 모델을 만들시 학습을 빠르게 하여, 예측을 더 높이는 방법입니다.

 

보통 특정된 딥러닝 모델을 사용하는 것보다, 더 적은 양의 학습 데이터를 사용하면서 학습 속도도 빠르고 우수한 성능을 발휘합니다. 또한 산업 현장에는 학습 데이터 자체가 비용과 관련되기 때문에 Transfer Learning(전이 학습)에 대해서 관심을 가질 수 밖에 없습니다.

 

컴퓨터 비전에서 말하는 전이학습은 주로 사전학습 된 모델(Pre-trained model)을 이용하는 것을 뜻합니다. 사전 학습 모델이란 풀고자하는 문제와 비슷하면서 사이즈가 큰 데이터로 이미 학습이 되어 있는 모델입니다.

 

 

Transfer Learning(전이 학습)을 사용하는가?

 

  1. 이미 학습된 모델을 사용해서 문제를 해결할 수 있습니다.
  2. 이미 학습된 많은 모델은 적용하려는 데이터가 학습할 때의 데이터와 같은 분포를 가진다고 가정으로 했을 때 효율적입니다.
  3. 새로운 문제를 해결하려할 때 데이터의 분포가 바뀌면 기존의 통계쩍 모델을 새로운 데이터로 다시 만들어야 할 때 좋습니다.
  4. 복잡한 모델일 때 학습 시간이 오래 걸릴 수 있으며, 학습시키는데 어려움이 있습니다.
  5. 층(layer)의 개수, Activation function, Hyper-parameters등 모델을 구성하는데 고려해야할 사항이 많으며, 직접 모델을 구성하여 학습시킨다는 것은 많은 시도가 필요합니다.

 

따라서 이미 잘 훈련된 모델이 있고, 만드려는 모델과 유사한 문제를 해결하는 모델일 경우에는 Transfer Learning(전이 학습)을 사용합니다.

 

사용 방법 : Fine-tuning

 

Fine-tuning 이란?

 

기존에 학습되어져 있는 모델을 기반으로 아키텍쳐를 새로운 목적에 맞게 변형하고 이미 학습된 모델 Weights로 부터 학습을 업데이트 하는 방법을 말합니다. (pre-trained model) (다른 레이어를 고정시키고 일부분 layer를 조정)

 

또한, 모델의 파라미터를 미세하게 조정하는 행위를 말합니다.

 

가장 쉽게 이용하려면 내 데이터를 해당 모델로 예측(predict)하여 보틀넥 피쳐만 뽑아내고, 이를 이용하여 어파인 레이어(Fully-Connected Layer)만 학습시켜서 사용하는 방법을 취하면 됩니다. 하지만 이 경우는 피쳐를 추출해내는 레이어의 파라미터를 업데이트 하지 않기 때문에 Fine-tuning이라고 부르지 않습니다.

 

"Fine-tuning 했다" 라고 말하려면 기존에 학습이 된 레이어에 데이터를 추가로 학습시켜 파라미터를 업데이트 해야합니다. 이 때 주의할 점은, 완전히 랜덤한 초기 파라미터를 쓴다거나 가장 아래쪽의 레이어의 파라미터를 학습하게 되면 오버피팅이 일어나거나 전체 파라미터가 망가지는 무제가 생깁니다.

 

사전 학습된 모델을 사용할 때

 

Strategy 1 : 전체 모델을 새로 학습

 

사전학습 모델의 구조만 사용하면서, 자신의 데이터셋에 맞게 전부 새로 학습시키는 방법

 

Strategy 2 : Convolutional base 일부분은 고정, 나머지 계층과 Classifier를 새로 학습

 

낮은 레벨의 계층은 일반적인 특징(독립적인 특징)을 추출하고, 높은 레벨의 계층은 구체적이고 특유한 특징(Task에 따라 달라지는 특징)을 추출합니다. 이런 특성을 이용하여 어느 정도까지 재학습시킬지 정할 수 있습니다.

 

데이터 셋이 작고 모델의 파라미터가 많다. -> 오버피팅이 일어날 수 있다.

데이터 셋이 크고 모델이 작다. -> 더 많은 계층을 학습시켜 적합한 모델로 발전가능하다.

 

Strategy 3 : Convolutional base는 고정시키고, Classifier만 새로 학습

 

컴퓨팅 연산 능력이 부족하거나, 데이터 셋이 너무 작을 때, 혹은 적용하려는 Task가 학습모델이 이미 학습한 데이터 셋과 매우 비슷할 때 고려해볼 수 있습니다.

참고 : https://blog.naver.com/PostView.nhn?blogId=flowerdances&logNo=221189533377&categoryNo=32&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=search
참고 : http://incredible.ai/artificial-intelligence/2017/05/13/Transfer-Learning/
참고 : https://jeinalog.tistory.com/13

https://developer.ibm.com/technologies/artificial-intelligence/articles/transfer-learning-for-deep-learning/

반응형