Author: Dahyeon Lee
Research Field: Computer Vision
Date: 2023/02/03
전이학습과 관련한 내용들을 찾아보게 되어 간단하게 정리해보고자 합니다.
전이학습이라고는 pre-trained 모델을 불러와 약간의 파라미터만 변경하여 fine-tuning 해 본게 전부인 줄 알고 있었던 터라
layer를 freeze 시켜 전이학습 하는 방법에 대해서 알아볼 필요가 있었습니다.
Transfer Learning
간단하게 Transfer Learning (전이학습)이라고 하면, pre-trained model (사전 학습한 모델)을 사용하여
다른 domain(task)에서의 높은 성능을 내고자 하는 학습 방법입니다.
source domain에서 학습한 pre-trained model이 가지고 있는 지식 정보를 target domain 학습 시 사용함으로써
더 빠른 학습 속도와 더 높은 성능을 기대할 수 있게 된다고 합니다.
그와 관련되어 Facebook AI Reasearch에서 제시한 내용이 궁금하시다면 Reference 1을 참고해주세요!
즉, 우리가 Deep Learning을 처음 배운다고 생각했을 때 스스로 공부하는 것보다
주변에 Deep Learning과 관련하여 연구를 진행하셨던 선배님들의 도움과 조언을 기반으로 배우는 것이 더욱 효과적인 것처럼 말이죠.
Transfer Learning에서 나오는 몇 가지 개념들을 살펴봅시다 .
- Source/Target Domain
- Pre-trained Model
- Layer Freeze
- Fine-Tuning
Source / Target Domain
Source Domain은 사전학습을 하게되는 분야(문제)입니다.
즉, target domain에 전달해 줄 정보를 얻는 학습을 하는 task라고 볼 수 있죠.
주로 source domain은 ImageNet과 같이 대량의 데이터셋에 대해 학습하게 됩니다.
대량의 데이터를 통해 더 많은 feature들에 대한 정보를 가지게 되므로,
적은 양의 데이터를 가진 target domain에 전이학습 시 효과적인 결과를 얻을 수 있기 때문입니다.
Target Domain은 전이학습을 적용할 새로운 분야(문제)입니다.
즉, source domain과는 다른 task(classification, segmentation, 3d reconstruction 등)이거나
source domain과는 다른 데이터셋을 가진 새롭게 해결해야할 문제입니다.
참고로 source domain과 target domain의 task 및 데이터 분포의 동일 여부에 따라 전이학습을 구분할 수 있습니다.
예를 들어, domain adaptation은 source domain과 target domain의 task는 동일하나
데이터 분포가 다른 경우에 대한 전이학습의 일종이라고 합니다.
더 자세한 내용이 궁금하시다면 아래 Reference 2를 참고해주세요!
Pre-trained Model
Pre-trained Model은 사전 학습 모델이라고 하며,
source domain 학습 모델이자 target domain 전이학습에 사용할 모델이라고 생각하시면 됩니다.
Layer Freeze
Layer Freeze는 학습시키지 않을 레이어의 가중치를 고정시킨다는 의미입니다.
전이학습 시 pre-trained model에서 원하는 layer의 weight를 고정하여
필요한 부분만 학습을 진행하는 방법으로, back-propagation이 되지 않게 되겠죠.
주로 feature 추출 부분의 convolution layer를 고정하고,
말단 부분의 fully connected layer와 같은 부분만을 학습시키도록 하는 경우가 많다고 합니다.
Pytorch에서 layer freeze하는 자세한 방법은 참고1, 참고2, 참고3를 참고해주세요!
#사용 예시
for name, child in self.model.named_children():
for param in child.parameters():
if name in [{고정하고 싶은 layer}]:
param.requires_grad = False #freeze
참고로 segmentation task의 경우 classification task와 달리 모델의 encoder 부분을 freeze함으로써
좋은 성능을 기대할 수 있다고 합니다.
Encoder와 Decoder 부분 모두를 고정한다고 더 유의미한 결과가 나오지는 않는 것 같습니다.
관련된 내용이 궁금하시다면 아래 Reference 3를 참고해주세요!
Fine-Tuning
Fine-Tuning은 pre-trained model을 기반으로 새로운 task에 맞게 가중치를 미세하게 조정해가는 방법입니다.
다양한 파라미터들의 값을 변경하여 새로운 task에 맞게 학습을 진행하게 됩니다.
마치 현미경을 사용할 때 미세 조절 나사로 더 또렷한 초점을 잡는 것처럼 말이죠.
이러한 fine-tuning의 방법은 아래의 그림처럼 크게 3가지가 존재합니다.
여태 fine-tuning은 단순히 파라미터만 변경해서 모델 전체를 학습하는 것만이라고 생각해왔던 저에겐
fine-tuning의 영역이 매우 넓게 다가오더군요..이제 여러가지 방법으로 전이학습할 수 있길..!
1) pre-trained model 구조만 사용하여 모델 전체 학습
2) 일부 convolution layer를 고정하고 나머지만 새로 학습
3) 모든 convolution layer를 고정하고 fully-connected layer 부분만 새로 학습
이렇게 간단하게만 전이학습에 대하여 정리해보았는데,
기회가 된다면 Segmentation task에서 전이학습 시 layer 고정 기준을 확립하는 연구들에 대해
정리해 볼 수 있으면 좋겠군요-:)
Reference
1. "Rethinking ImageNet Pre-training", CVPR, 2018, FAIR; Kaiming He et al.
2. "Domain- and task-specific transfer learning for medical segmentation tasks", ELSEVIER, 2022, Riaan Zoetmulder et al.
3. "Transfer Learning for Segmentation Problems: Choose the Right Encoder and Skip the Decoder", CVPR, 2022, Jonas Dippel et al.
4. [블로그] https://newindow.tistory.com/254