본문 바로가기

Data Science/ML & DL

Pretrained Model | 2. Transfer Learning(전이학습)과 Fine tuning을 사용하자

Data 양이 많지 않아 딥러닝 모델의 학습에 어려움이 있을 때 사용 가능한 방법

1) Image augmentation 활용
        - Image에 다양한 효과를 주어 데이터양을 늘린다.

2) Pre-trained network의 활용한 Transfer learning (전이학습)
        - 매우 큰 데이터셋으로 미리 Training한 모델을 이용해 모델을 정의한다.
        - 성능이 좋은모델을 다량의 데이터로 학습시킨 모델을 사용하므로 적은 데이터에도 좋은 성능을 낼 수있다.

summary

Transfer Learning : pre-trained model에서 feature extracxtor를 가져와 일반적인 특징을 추출하고 직접 구성한 new classfier에서 학습을 진행해 업데이트한다.
- Backbone ( Trianed convolutional base :
Feature Extractor  - 일반적인 특징을 추출하는 곳, Frozen상태)+ Head(New classifier - 직접 구성, 학습 시 업데이트 되는 곳)

 fine tuning - Feature Extractor 재학습한다. 3가지 전략이 존재


Pretrained Model

- 다른 목적을 위해 미리 학습된 모델.
- Pretrained model을 현재 해결하려는 문제에 이용한다.
- 대부분 내가 만들려는 네트워크 모델에 pretrained model을 포함시켜 사용한다.
    - 이런 방식을 Transfer Learning (전이 학습)이라고 한다.
    - 보통 Feature Extractor block을 재사용한다.

1. Transfer learning(전이학습) : 잘 학습된 기존 모델을 재사용

- 사전에 학습된 신경망 구조 + 파라미터를 재사용해서 새로운 모델의 시작점에 붙인 후, 다시 학습시키는 것

전이학습이 해결하는 문제

1. 데이터 부족문제(딥러닝은 대용량의 학습데이터가 필요) 2. 과다한 계산량(신경망학습에는 계산이 많음)

Transfer Learning의 구조

Pretrained Model에서 Feature Extractor 만 가져오고 + 추론기(Fully connected layer)만 새로 정의한 뒤 그 둘을 합쳐서 모델을 만든다. 

Backbone   -  전체 네트워크에서 Feature Extraction의 역할을 담당하는 부분
Bottom 쪽의 Convolution Layer(Feature Extractor)들은 이미지에 나타나는 일반적인 특성을 추출하므로 다른 대상을 가지고 학습했다고 하더라도 재사용할 수 있다. 학습시 Frozen 상태(파라미터 업데이트 X)를 유지한다.  학습이 안된다는 것(Frozen)은 Training시 weight와 bias(parameters)가 update되지 않게 하는 것을 의미한다.

neck - backbone과 head를 연결해주는 역할

Head 
Top 부분 Layer 부분은 특히 출력 Layer의 경우 대상 데이터셋의 목적에 맞게 변경 해야 하므로 재사용할 수 없다.

새로운 New classifier를 붙여준 후, 학습을 할때는 이것만 학습하여 가중치를 조정한다.

 

Feature extraction 재사용이 가능한 이유

일반적인 특성을 추출(털의 특성 등)한 것이기 때문이다.

Feature extraction 재사용
- Pretrained Model에서 Feature Extractor 만 가져오고 + 추론기(Fully connected layer)만 새로 정의한 뒤 그 둘을 합쳐서 모델을 만든다.
- 학습시 직접 구성한 추론기(Fully connected layer) 만 학습한다. 
 - Feature Extractor는 추론을 위한 Feature 추출을 하는 역할만 하고 그 parameter(weight)가 학습되지 않도록 (Frozen)한다.
- 모델/레이어의 parameter trainable 여부 속성 변경
    :  model/layer 의 `parameters()` 메소드를 이용해 weight와 bias를 조회한 뒤 `requires_grad` 속성을 `False`로 변경한다.


2.  Fine Tuning(미세조정) : Feature Extractor 재학습

- Transfer learning을위한 Pretrained 모델을 내가 학습시켜야 하는 데이터셋(Custom Dataset)으로 재학습시키는 것
-  앞서 Feature Extractor는 학습 시 frozen한다고 했으나 , fine tuning을 통해 주어진 문제에 적합하도록 Feature Extractor의 가중치를 조정할 수 있다.

Fine Tuning 전략 3가지

1번 2번 전략을 Fine tuning 이라고함

1. 전체 모델을 학습시키는 전략

-  Pretrained 모델의 weight는 Feature extraction 의 초기 weight 역할을 한다.
- Train dataset의 양이 많고 /  Pretrained 모델이 학습했던 dataset과 Custom dataset의 class간의 유사성이 낮은 경우 적용.
- 학습에 시간이 많이 걸린다.

2. 일부는 Frozen, 일부는 학습하는 전략

Train dataset의 양이 많고  / Pretrained 모델이 학습했던 dataset과 Custom dataset의 class간의 유사성이 높은 경우 적용.
Train dataset의 양이 적고 /  Pretained 모델이 학습했던 dataset과 custom dataset의 class간의 유사성이 낮은 경우 적용

3. 일반적인 Transfer learning

- Train dataset의 양이 적고 Pretrained 모델이 학습했던 dataset과 Custom dataset의 class간의 유사성이 높은 경우 적용.