AI Research Topic/Deep Learning

[Deep Learning] pre-training 과 fine-tuning (파인튜닝)

꾸준희 2017. 8. 17. 21:42
728x90
반응형
728x90

 

 

 

Pre Training 이란?

 

선행학습(pre-training)

사전훈련(pre-training)

전처리과정(pre-training)
이라고도 하는데, 이는 Multi Layered Perceptron (MLP)에서 Weight와 Bias를 잘 초기화 시키는 방법이다. 이러한 Pre-training을 통해서 효과적으로 layer를 쌓아서 여러개의 hidden layer도 효율적으로 훈련 할 수 있다. 
또한, 이는 unsupervised learning이 가능하기 때문에(물론 이러한 가중치와 편향 초기화가 끝나면 레이블 된 데이터로 supervised learning 해야 한다 -> fine tuning) 레이블 되지 않은 큰 데이터를 넣어 훈련 시킬 수 있다는 점을 장점으로 들 수 있다. 
또한 Drop-out, Mini-batch 방식을 사용하여 Pre-traning을 생략하기도 한다. 





Fine Tuning 이란?

 

 

- 기존에 학습되어져 있는 모델을 기반으로 아키텍쳐를 새로운 목적(나의 이미지 데이터에 맞게)변형하고 이미 학습된 모델 Weights로 부터 학습을 업데이트하는 방법을 말한다. 

 

 

- 모델의 파라미터를 미세하게 조정하는 행위

 

(특히 딥러닝에서는 이미 존재하는 모델에 추가 데이터를 투입하여 파라미터를 업데이트하는 것을 말한다.)

 

파인튜닝은 정교한 파라미터 튜닝이라고 생각하면 되는데 정교한 파라미터가 키포인트들 이다.

고양이와 개 분류기 를 만드는데 다른 데이터로 학습된 모델(VGG16, ResNet 등) 을 가져다 쓰는 경우를 생각해보자.

 

VGG16 모델의 경우 1000 개의 카테고리를 학습시켰기 때문에 고양이와 개, 2개의 카테고리만 필요한 우리 문제를 해결하는데 모든 레이어를 그대로 쓸 수는 없다.

 

따라서 가장 쉽게 이용하려면 내 데이터를 해당 모델로 예측(predict)하여 보틀넥 피쳐만 뽑아내고, 이를 이용하여 어파인 레이어(Fully-connected layer) 만 학습시켜서 사용하는 방법을 취하게 된다.

하지만 이 경우는 파인튜닝이라고 부르지 않는다. 피쳐를 추출해내는 레이어의 파라미터를 업데이트 하지 않기 때문이다.

 

어파인 레이어를 업데이트 하지 않냐고 생각할 수 있지만 내가 새로 구성한 레이어이기 때문에 업데이트가 아니며 초기 웨이트가 랜덤이기 때문에 정교하지도 않다.

파인튜닝을 했다고 말하려면 기존에 학습이 된 레이어에 내 데이터를 추가로 학습시켜 파라미터를 업데이트 해야 한다.

이 때 주의할 점은, 튜토리얼에서도 나오듯, 정교해야 한다.

완전히 랜덤한 초기 파라미터를 쓴다거나 가장 아래쪽의 레이어(일반적인 피쳐를 학습한 덜추상화된 레이어) 의 파라미터를 학습해버리면 오버피팅이 일어나거나 전체 파라미터가 망가지는 문제가 생기기 때문이다.

 

 

 

 

출처 1 : 네이버 블로그

출처 2 : http://haandol.github.io/2016/12/25/define-bottleneck-feature-and-fine-tuning.html

출처 3 :  http://pointzz.tistory.com/15

 

 

반응형

 

728x90
반응형