Transfer learning에 관하여 (CNN기준)

dusruddl2·2024년 2월 26일

이것저것

목록 보기
3/5

참고 블로그
: https://inhovation97.tistory.com/31
: https://jeinalog.tistory.com/13

공부하며 다음 블로그들을 정리하였습니다.


전이학습(Transfer learning)

사전 학습된 모델(pre-trained model)을 이용하는 것
즉, pre-trained된 backbone을 이용해 feature map을 뽑아내고 그 이후에 내 데이터에 맞게 fine-tuning을 진행하는 과정을 의미한다.

  • 사전 학습이 된 모델
    : 내가 풀고자 하는 문제와 비슷하면서 사이즈가 큰 데이터로 이미 학습이 된 모델

큰 데이터로 모델을 학습시키는 것은 오랜 시간과 연산량이 필요하므로, 일반적으로 이미 공개되어 있는 모델들을 import해서 사용함

(보통 timm에 많이 업데이트가 되어 있다.)


사전에 학습된 모델을 내 프로젝트에 맞게 재정의하기 (CNN 기준)

일반적으로 내 프로젝트와 맞게 재정의하기 위해서 원래 모델의 'classifier'을 없애는 것부터 시작한다.
그 이후에 내 프로젝트와 맞는 classifier을 추가하고,
새롭게 만들어진 모델을 다음 세 가지 전략 중 한 방법을 이용해 fine-tuning을 진행한다.

1. 전체 모델을 새로 학습시키기

사전 학습 모델으 구조만 사용하면서, 내 데이터셋에 맞게 새로 학습
밑바닥에서부터 새로 학습하는 것이기 때문에, 큰 사이즈의 데이터셋과 좋은 GPU 필요

2. Convolutional base의 일부분은 고정시킨 상태로, 나머지 계층과 classifier 새로 학습시키기

일반적으로 CNN 구조에서
낮은 레벨의 계층은 일반적인 특징을 추출하고, 높은 레벨의 계층은 구체적이고 특유한 특징을 추출하기 때문에
이러한 특성을 이용해서 신경망의 파라미터 중 어느 정도까지 재학습시킬지를 결정

3. Convolutional base는 고정시키고, classifier만 새로 학습시키기

convolutional base는 건들지 않고 그대로 두면서, feature extractor 메커니즘으로만 활용하고, classifier만 재학습시키는 방법

  • GPU가 부족하거나, 데이터셋이 너무 작을 때
  • 내가 풀고자 하는 문제가 pre-trained 모델이 이미 학습한 데이터셋과 매우 비슷할 때


비교적 간단히 사용할 수 있는 3번 방법과 다르게
1번 2번 방법은 learning rate에 대해서 조심해야 할 필요학 있다.
이전에 학습한 내용들을 모두 잊어버릴 위험이 있기 때문에 작은 learning rate로 사용하는 것이 바람직하다.


지금 내가 하고 있는 연구와 어떻게 결합할 수 있을 것인가?
난 ViT이기 때문에 convolutional base와 classifier과 직접적인 관련은 없으나
learning rate를 작게 사용하거나 freeze시키는게 좋다는 insight는 배워갈 수 있을 것이다.

profile
정리된 글은 https://dusruddl2.tistory.com/로 이동

0개의 댓글