전이 학습(Transfer Learning) 완벽 가이드
딥러닝 모델을 항상 0부터 학습하는 것은 비용이 큽니다.
전이 학습은 대규모 데이터셋으로 학습된 모델의 지식을 재사용해 적은 데이터/자원으로 빠르게 성능을 확보하는 실전 전략입니다.
1단계: 사전 학습된 모델 선택
새 작업(Task B)에 맞춰, 대규모 데이터(Task A)로 학습된 모델을 고릅니다.
- 대표 사전학습 데이터: ImageNet
- 대표 백본: VGG, ResNet, DenseNet, EfficientNet, MobileNet
선택 기준:
- 연산 자원(GPU/CPU)
- 속도 vs 정확도 트레이드오프
- 배포 환경(서버/모바일)
실전에서는 torchvision.models의 pretrained weights를 가장 많이 활용합니다.
2단계: 모델 로드 및 구조 변경
사전학습 가중치를 불러오고, 마지막 출력 헤드를 새 문제에 맞게 교체합니다.
from torchvision import models
import torch.nn as nn
model = models.resnet18(pretrained=True)
in_features = model.fc.in_features
model.fc = nn.Linear(in_features, 10) # 예: 10클래스
- 분류: 마지막 FC 교체
- 탐지/분할: task-specific head 교체
3단계: 가중치 동결 전략 선택
특징 추출 (Feature Extraction)
- 백본 freeze, 새 헤드만 학습
- 데이터가 적을 때 유리, 빠르고 안정적
for p in model.parameters():
p.requires_grad = False
for p in model.fc.parameters():
p.requires_grad = True
미세조정 (Fine-tuning)
- 백본 일부/전체를 낮은 LR로 재학습
- 데이터가 충분하고 최대 성능이 필요할 때 유리
실전 팁:
- 헤드 LR은 크게, 백본 LR은 작게 (파라미터 그룹 분리)
4단계: 데이터 준비 및 전처리
사전학습 모델의 입력 규칙을 최대한 유지해야 성능이 안정적입니다.
- 입력 크기 맞춤 (예: 224x224)
- 채널 수 맞춤 (흑백 -> 3채널 확장 필요 시 처리)
- ImageNet mean/std 정규화
import torchvision.transforms as T
transform = T.Compose([
T.Resize((224, 224)),
T.ToTensor(),
T.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]),
])
5단계: 재학습 및 평가
기본 학습 루프:
- Forward
- Loss 계산
- Backward
- Optimizer step
- Zero grad
옵티마이저 예시:
- Feature Extraction:
Adam(model.fc.parameters(), lr=1e-3) - Fine-tuning:
Adam(model.parameters(), lr=1e-4)(또는 백본/헤드 분리 LR)
평가 시:
model.eval()
with torch.no_grad():
# validation/test inference
pass
마무리
전이 학습의 핵심은 다음 5단계입니다.
- 사전학습 모델 선택
- 구조 변경
- freeze/fine-tune 전략 선택
- 전처리 규칙 정합
- 재학습 및 평가
이 흐름을 지키면 적은 데이터에서도 빠르고 강한 성능을 확보할 수 있습니다.