머신러닝 및 딥러닝/자연어처리

Transfer Learning & Fine-tuning

viamemine 2023. 11. 18. 17:32
728x90
반응형

 

개와 고양이 이미지를 분류하는 task를 수행한다고 할 때, 이미 학습된 pre-trained model을 불러와서

사전학습된 모델의 파라미터를 적용하는 transfer learning을 수행한다.

 

이 과정에서 개와 고양이에 대한 binary classification만 하면 되므로
불러온 모델이 현재 task에 좀 더 집중하도록 fine-tuning을 해주는 것이다.

새로운 데이터로 한 번 더 가중치(사전학습된 모델의 파라미터)를 조정해주는 것이다.

 

 

💥 Transfer Learning과 Fine-tuning의 개념

두 개의 용어가 혼동될 수 있지만, transfer learning과 fine-tuning을 같은 개념으로 이해해도 무방하다.

 

큰 데이터로 사전학습된 backbone 모델을 통해 feature map을 뽑아내고,

아래와 같이 fine-tuning을 자신의 데이터셋에 맞게 feedforward network layer로 조절하면 된다.

 

예를 들어 object detection이나 segmentation을 수행하는 task에서

ResNet의 CNN을 classification이 아닌 feature extraction으로만 쓰는 경우는

'transfer learning으로 가중치를 가져왔다' 혹은 'ResNet의 CNN을 backbone 모델로 사용했다'라고 한다.

 

Fine-tuning을 할 때, 중요한 점이 있다. 

바로 현재 task의 데이터셋의 크기와 사전학습 모델과의 dataset, task와의 유사정도이다.

 

(😅는 주의할 점을 의미한다.)

 

1. 해결하고자 하는 task의 dataset size가 충분하지만, 사전학습된 dataset과 많이 다른 경우

Downstream task의 dataset은 학습할만큼 충분하고, 사전학습된 데이터와의 유사성이 떨어지는 경우에는 

network 전부를 다시 학습해주어 더 좋은 성능을 내도록 한다.

😅 Learning rate를 크게 잡으면 사전학습 모델의 가중치를 훼손시킬 수 있기 때문에 1/10 정도로 세팅한다.

😅 Fine-tuning에서는 optimizer도 이전 가중치를 훼손시키지 않는 RMSProp보다는

SGD와 같이 안정적인 학습 속도를 유지하는 optimizer를 사용하는 것이 바람직하다.

 

2. 해결하고자 하는 task의 dataset size가 충분하지만, 사전학습된 dataset과 유사한 경우

Convolution layer는 초반 input layer와 가까운 layer일수록 선이나 색 같은 일반적인 특징을 학습한다.

또한 output layer와 가까운 layer일수록 좀 더 class와 관련된 세세한 특징들을 학습한다.

학습할 dataset size는 충분하지만,

사전학습된 dataset과 유사한 경우에는 굳이 모든 convolution layer를 학습할 필요가 없다. 

😅 Convolution layer의 초기 layer는 learning rate을 0으로 세팅하여 학습을 하지않고,

풀고자하는 downstream task에 조금 더 fit한 특징을 유도 학습하도록

convolution layer 후기 layer의 일부와 feedforward network layer만 fine-tuning한다.

 

3. 해결하고자 하는 task의 dataset size가 작고, 사전학습된 dataset과 많이 다른 경우

이 경우가 가장 문제이다. 

dataset size도 작은데, 사전학습된 데이터와도 차이가 있는 경우에는

overfitting을 조심해야 하기 때문에 1번의 경우처럼 convolution layer를 전부 다시 학습시킬 수 없다.

따라서 2번의 경우처럼 fine-tuning을 진행한다.

😅 어려운 문제이다. 이 경우에는 image augmentation으로 데이터의 양을 늘리는 것이 좋을 것이다.

 

4. 해결하고자 하는 task의 dataset size가 작고, 사전학습된 dataset과 비슷한 경우

Dataset이 작은 경우에는 overfitting의 가능성을 견제해야 한다.

이런 경우에는 convolution layer를 frozen하고 feedforward network layer만 학습한다.

😅 이 경우에는 feature extraction을 하는 layer의 파라미터를 아예 학습하지 않기 때문에,

fine-tuning이 아니라고 하는 경우도 있다. 

 

마지막으로 굉장히 중요한 부분이 있다.

Convolution layer 전체나 일부를 frozen하고, 현재 task를 해결하기 위해 새로운 layer를 학습시킨다고 

무작정 새로운 feedforward network layer를 붙이면 안된다.

모든 layer는 꼭 1번 이상은 학습이 완료된 상태여야 한다.

무작위로 가중치가 부여된 새로운 layer에서 큰 가중치가 학습될 위험성이 있기 때문이다.

Fine-tuning은 이미 학습된 안정적인 가중치이기 때문에 이렇게 되면,

convolution layer의 방대한 데이터를 학습하여 얻어진 기존의 가중치를 너무 크게 바꿔버릴 수 있다.

이는 학습된 핵심 내용을 모델이 잃게 만들 수도 있다.

 

728x90