전이학습
Transfer Learning
사전학습 모델을 새 작업에 적용. 데이터 부족 문제 해결.
Transfer Learning
사전학습 모델을 새 작업에 적용. 데이터 부족 문제 해결.
전이학습(Transfer Learning)은 한 도메인에서 학습된 모델의 지식을 다른 관련 도메인의 새로운 작업에 적용하는 머신러닝 기법입니다. 이는 대규모 데이터셋에서 사전 학습된 모델을 기반으로, 상대적으로 적은 양의 데이터로도 우수한 성능을 달성할 수 있게 해주는 핵심 기술입니다.
전이학습의 등장 배경은 딥러닝 모델의 학습에 필요한 막대한 데이터와 계산 자원 문제에서 비롯됩니다. 2012년 ImageNet 대회에서 AlexNet의 성공 이후, 사전학습된 CNN 모델을 다른 이미지 분류 작업에 재활용하는 방식이 널리 퍼졌습니다. 2018년 BERT의 등장으로 NLP 분야에서도 전이학습이 표준이 되었으며, 현재 GPT, LLaMA 등 대규모 언어 모델에서 필수적인 기법으로 자리잡았습니다.
전이학습의 핵심 원리는 특징 추출(Feature Extraction)과 파인튜닝(Fine-tuning)입니다. 특징 추출 방식은 사전학습된 모델의 가중치를 고정하고 마지막 분류 레이어만 새로 학습합니다. 파인튜닝은 전체 모델을 낮은 학습률로 추가 학습하여 새 도메인에 적응시킵니다. 최근에는 LoRA, QLoRA 같은 파라미터 효율적 파인튜닝(PEFT) 기법으로 메모리 효율성을 크게 개선했습니다.
실무에서 전이학습은 데이터 수집 비용 절감, 학습 시간 단축, 성능 향상의 세 가지 측면에서 필수적입니다. 2025년 현재, Hugging Face에는 100만 개 이상의 사전학습 모델이 등록되어 있으며, 대부분의 AI 프로젝트는 처음부터 학습하는 대신 전이학습을 기본으로 시작합니다. 특히 의료, 법률 등 특수 도메인에서는 일반 모델의 도메인 적응이 핵심 경쟁력입니다.
Hugging Face Transformers를 활용한 텍스트 분류 파인튜닝 예제:
# 전이학습 파인튜닝 예제 (Hugging Face Transformers)
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from transformers import Trainer, TrainingArguments
from datasets import load_dataset
# 1. 사전학습된 모델과 토크나이저 로드
model_name = "klue/bert-base" # 한국어 BERT
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(
model_name,
num_labels=2 # 이진 분류
)
# 2. 데이터셋 준비
dataset = load_dataset("nsmc") # 네이버 영화 리뷰 감성분류
def tokenize_function(examples):
return tokenizer(
examples["document"],
padding="max_length",
truncation=True,
max_length=128
)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
# 3. 학습 설정 (LoRA 없이 전체 파인튜닝)
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=64,
learning_rate=2e-5, # 파인튜닝은 낮은 학습률 사용
warmup_ratio=0.1,
weight_decay=0.01,
evaluation_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
)
# 4. Trainer로 학습
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["test"],
)
# 5. 파인튜닝 실행
trainer.train()
# 6. 모델 저장 및 추론
trainer.save_model("./nsmc-classifier")
print("파인튜닝 완료! 저장 경로: ./nsmc-classifier")
LoRA를 활용한 파라미터 효율적 파인튜닝 예제:
# PEFT(LoRA)를 활용한 효율적 전이학습
from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM
# 베이스 모델 로드
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.2-1B",
torch_dtype="auto",
device_map="auto"
)
# LoRA 설정 - 전체 파라미터의 약 0.1%만 학습
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=16, # rank 크기
lora_alpha=32, # 스케일링 팩터
lora_dropout=0.1, # 드롭아웃
target_modules=["q_proj", "v_proj"], # 적용 레이어
)
# PEFT 모델 생성
peft_model = get_peft_model(model, lora_config)
# 학습 가능한 파라미터 확인
peft_model.print_trainable_parameters()
# 출력: trainable params: 4,194,304 || all params: 1,500,000,000 || trainable%: 0.28%
사전학습 모델 대비 전이학습 효율성 비교 (2025년 기준):
| 학습 방식 | 필요 데이터 | GPU 시간 | 비용 (A100 기준) | 성능 (KLUE) |
|---|---|---|---|---|
| 처음부터 학습 | 100M+ 토큰 | 1,000+ 시간 | $2,000+ | - |
| 전체 파인튜닝 | 10K 샘플 | 2-4시간 | $4-8 | 90%+ |
| LoRA 파인튜닝 | 10K 샘플 | 0.5-1시간 | $1-2 | 89%+ |
| 프롬프트 튜닝 | 100 샘플 | 10분 | $0.3 | 85%+ |
* 성능은 KLUE 벤치마크 평균 기준, 비용은 AWS p4d.24xlarge 시간당 $2 기준
영어 모델을 한국어 작업에, 또는 일반 도메인 모델을 전문 도메인에 바로 파인튜닝하면 성능이 크게 저하됩니다. 도메인 적응 단계(Domain-Adaptive Pre-training)를 먼저 거쳐야 합니다.
파인튜닝에서 학습률이 너무 높으면(예: 1e-3) 사전학습된 지식이 파괴되는 "catastrophic forgetting" 현상이 발생합니다. 보통 2e-5 ~ 5e-5 정도의 낮은 학습률을 사용해야 합니다.
점진적 언프리징(Gradual Unfreezing) 전략을 사용하세요. 처음에는 분류 레이어만 학습하고, 이후 상위 레이어부터 하위 레이어로 순차적으로 학습 가능하게 풀어주면 안정적인 파인튜닝이 가능합니다.