[Deep Learning] pre-training 과 fine-tuning (파인튜닝)
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