본문 바로가기
카테고리 없음

전이 학습(Transfer Learning) : 개념, 장점, 활용 분야, 방법, 예제 코드, 사례

by 쨔우쨔우 2025. 3. 28.
반응형

 

남이 미리 공부해 놓은 걸 똑똑하게 활용하는 방법, 그게 전이 학습이다.

전이 학습


전이 학습은 이미 학습된 모델의 지식을 다른 유사한 작업에 적용하는 학습 방법입니다.

쉽게 말해, 이미 거대한 데이터셋(예 : ImageNet)으로 학습된 딥러닝 모델(예 : ResNet, EfficientNet)을 다시 처음부터 학습하지 않고, 그 학습된 가중치나 구조를 새로운 과제에 맞게 재활용합니다.

1. 왜 사용하는가?

기존 딥러닝은 학습을 위해 방대한 데이터와 시간이 필요하지만, 전이 학습은 아래와 같이 이유로 사용됩니다.

 

1) 데이터가 부족한 경우

  • 새로운 문제에 사용할 데이터가 적을 때, 기존 모델의 지식을 활용하면 효과적으로 학습할 수 있음.

2) 학습 시간 단축

  • 처음부터 모델을 훈련시키는 데 필요한 시간, 자원을 크게 줄일 수 있음.

3) 성능 향상

  • 기존에 잘 훈련된 모델의 일반화 능력을 그대로 가져올 수 있어, 성능이 높아질 가능성이 큼.

 

2. 전이 학습의 장점은?

항목 설명
빠른 학습 전체 학습보다 훨씬 빠르게 모델 완성 가능
적은 데이터로도 성능 확보 소량의 데이터로도 높은 정확도 가능
리소스 절약 GPU 비용, 시간 모두 줄일 수 있음
일반화 능력 활용 대규모 데이터로 사전 학습된 모델의 성능 이점 활용

3. 그래서 어디에 쓰이는가?

전위 학습은 거의 모든 딥러닝 분야에서 쓰이지만, 특히 다음과 같은 상황에서 매우 효과적입니다.

 

1) 이미지 분류

  • 기존 ImageNet 사전학습 모델 → 새로운 소규모 이미지 데이터셋 분류

2) 의료 영상 분석

  • CT, MRI 데이터는 수집이 어렵고 적은데, 전위 학습으로 좋은 성능 확보 가능

3) 자연어 처리(NLP)

  • BERT, GPT 같은 대규모 사전학습 언어 모델을 특정 도메인(QA, 감정 분석 등)에 파인튜닝

4) 음성 인식

  • 사전 학습된 음성 모델을 새로운 언어에 적용하거나, 소량의 화자 데이터에 맞게 수정

4. 전이 학습의 방법, 예제 코드

1) Feature Extraction (특징 추출)

  • 기존 모델의 가중치는 고정(freeze)하고, 출력층만 새로 학습
  • 가장 빠르고 간단한 방식
# 예시 (PyTorch)
for param in model.parameters():
    param.requires_grad = False  # 모든 레이어 freeze

model.fc = nn.Linear(2048, 10)  # 출력층만 새로 학습

 

2) Fine-Tuning (미세 조정)

  • 기존 모델을 기반으로 하되, 일부 레이어는 재학습
  • 작은 학습률로 전체 또는 일부 레이어 가중치를 조정
for name, param in model.named_parameters():
    if 'layer4' in name:  # 마지막 블록만 학습
        param.requires_grad = True
    else:
        param.requires_grad = False

 

3) PyTorch를 활용한 전위 학습 예제 코드

이미지 분류를 위한 모델을 만들 때 자주 쓰이는 방식입니다.

# 라이브러리 임포트
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torchvision import models

# GPU 설정
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 데이터 전처리 및 로딩 (CIFAR-10 예시)
transform = transforms.Compose([
    transforms.Resize(224),  # ResNet 입력 크기 맞추기
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)

trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False)

# 사전 학습된 모델 불러오기 (ResNet50)
model = models.resnet50(pretrained=True)

# 전이 학습 설정 (Feature Extraction 방식)
for param in model.parameters():
    param.requires_grad = False  # 기존 레이어 freeze

# 분류를 위한 최종 출력층 수정
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 10)  # CIFAR-10은 10개 클래스
model = model.to(device)

# 손실 함수와 최적화 함수 설정
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.fc.parameters(), lr=0.001)

# 모델 학습
epochs = 5
for epoch in range(epochs):
    model.train()
    running_loss = 0.0

    for images, labels in trainloader:
        images, labels = images.to(device), labels.to(device)

        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()

    print(f"[Epoch {epoch+1}/{epochs}] Loss: {running_loss:.4f}")

# 정확도 평가
correct = 0
total = 0
model.eval()
with torch.no_grad():
    for images, labels in testloader:
        images, labels = images.to(device), labels.to(device)
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print(f"테스트 정확도: {100 * correct / total:.2f}%")

5. 전이 학습 vs 처음부터 학습

항목 전이 학습 처음부터 학습
학습 시간 빠름 오래 걸림
데이터 필요량 적음 많음
일반화 능력 높음 데이터에 따라 다름
적용 범위 유사한 작업에 효과적 완전히 새로운 문제에 적합

6. 실제 사례

  • ResNet50 + 의료 이미지 분류 : ImageNet으로 학습된 ResNet을 활용해 폐렴 진단 정확도 향상
  • BERT + 감정 분석 : BERT를 기본으로 한국어 리뷰에 맞게 파인튜닝
  • YOLOv8 + 스마트팜 : 농작물 병해충 탐지 시, COCO로 학습된 모델을 농업 이미지에 파인튜닝

 

전이 학습은 딥러닝의 핵심 전략 중 하나입니다.

특히 데이터가 부족하거나 자원이 제한된 환경에서, 기존의 대형 모델이 가진 능력을 효율적으로 활용할 수 있게 합니다.

반응형