전이학습 (Transfer Learning)
기존에 학습된 모델의 지식(가중치 등)을 새로운 문제에 적용하는 머신러닝 기법
대량의 데이터를 활용해 학습한 모델을 기반으로, 새로운 작업에 적은 데이터로도 좋은 성능을 낼 수 있도록 도와줌
전이학습이 필요한 이유
- 데이터 부족
새롭게 풀고자 하는 문제에 대한 학습 데이터가 적을 때, 사전 학습된 모델을 활용해 일반화 성능을 끌어올릴 수 있음 - 학습 시간 단축
처음부터 모델을 학습하는 것보다 빠르게 수렴 - 성능 향상
ImageNet, COCO 등 대규모 데이터셋에서 학습된 모델은 일반적인 시각적 특징을 잘 추출하므로, 특정 도메인에서도 높은 성능을 보일 수 있음
전이학습의 원리
전이학습은 크게 두 가지 방식으로 구분됨
- 특징 추출기(Feature Extractor)
- 미세 조정(Fine-Tuning)
특징 추출기(Feature Extractor)
사전 학습된 모델의 초기 층(Convolution 등)을 고정하고, 마지막 출력층만 새로 학습
빠르고, 적은 데이터에서도 효과적
사전 학습된 모델 → [Conv → Conv → Conv → ... → FC]
전이학습 → Conv 층 고정, FC만 새로운 태스크에 맞게 변경
미세 조정(Fine-Tuning)
전체 네트워크를 모두 재학습
일반적으로는 마지막 몇 개 층만 업데이트하지만, 필요에 따라 전체 레이어를 모두 학습할 수 있음
모든 레이어의 gradient를 업데이트 (requires_grad=True)
→ 사전 학습된 feature에 새로운 태스크를 완전하게 맞춤
전이학습을 활용한 모델 만들기 (PyTorch 예시)
사전 학습된 모델 로드
PyTorch에서는 torchvision.models를 통해 다양한 사전 학습 모델을 쉽게 불러올 수 있음
import torchvision.models as models
model = models.resnet18(pretrained=True)
모델 수정 (클래스 수 변경)
import torch.nn as nn
num_classes = 5 # 새로운 데이터셋의 클래스 수
model.fc = nn.Linear(model.fc.in_features, num_classes)
모델 학습
- 특징 추출기 방식: requires_grad=False로 설정
- 미세 조정 방식: 모든 파라미터를 업데이트
# Feature Extractor 방식
for param in model.parameters():
param.requires_grad = False
for param in model.fc.parameters():
param.requires_grad = True
# Fine-Tuning 방식
for param in model.parameters():
param.requires_grad = True
손실함수 & 옵티마이저 설정 예
import torch.optim as optim
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
'⊢ DeepLearning' 카테고리의 다른 글
하이퍼파라미터 튜닝 (0) | 2025.03.22 |
---|---|
과적합(Overfitting) 방지 기법 (0) | 2025.03.22 |
생성형 모델(Generative Models) (0) | 2025.03.22 |
오토인코더(Autoencoder) (0) | 2025.03.21 |
이미지 처리 모델 (0) | 2025.03.21 |