전이학습 전략 선택: 파인튜닝·도메인 적응·퓨샷 러닝

전이학습에서 Fine-Tuning, Domain Adaptation, Few-Shot Learning을 선택하는 기준과 데이터 시프트·비용·운영 관점의 적용 전략을 정리한다.

2026-08-14 · 최초 발행 2024-04-29

사전학습 모델을 타깃 환경에 맞추는 방법

전이학습(Transfer Learning)은 대규모 소스 도메인에서 학습된 사전학습(Pretrained) 표현을 타깃 도메인이나 작업에 재사용하는 학습 패러다임이다. 제한된 데이터와 자원으로도 성능을 확보하려는 상황에서 활용한다.

적응 방식은 서로 다른 제약을 겨냥한다.

  • Fine-Tuning은 사전학습 모델의 가중치를 타깃 라벨 데이터에 맞춰 전체 또는 일부 층에서 추가 학습한다. 전량 미세조정(Full FT)과 파라미터 효율 기법(PEFT: LoRA, Adapters) 중에서 선택할 수 있다.
  • Domain Adaptation은 소스와 타깃의 분포 차이, 즉 domain shift를 완화하기 위한 표현 정렬 전략이다. 타깃 라벨의 유무에 따라 Supervised, Unsupervised, Adversarial 적응으로 나뉜다.
  • Few-Shot Learning은 극소 샘플이나 프롬프트 안의 예시를 통해 적응한다. 매개변수를 갱신하지 않는 In-Context Learning과 경량 갱신 방식인 PEFT를 함께 사용할 수 있다.

백본은 BERT, ViT, Whisper, CLIP 등에서 작업과 도메인 적합성, 파라미터 규모, 라이선스를 기준으로 고른다. Full FT, PEFT(LoRA/Adapter), Prompting은 성능·비용·운영성 사이의 트레이드오프를 이룬다.

전략 선택부터 검증까지의 흐름

Fine-TuningDomain AdaptationFew-Shot위험완화위험완화위험완화사전학습 모델 + 소스 데이터전략 선택백본 동결/부분 동결 헤드교체 저학습률 훈련특징 정렬(MMD/Adversarial) 타깃 무·소량 라벨 활용프롬프트/데모 설계 PEFT또는 In-Context 적용검증: 소스·타깃 세트 성능Catastrophic Forgetting층별 LR, 규제(EWC), 부분동결부적절한 정렬/불안정Gradient Reversal 안정화,정규화, 얼리 스톱프롬프트 민감도/과적합예시 선택·순서 탐색,칼리브레이션

데이터 전략에서는 라벨링을 최소화하기 위해 Active Learning, Weak Supervision, Pseudo-Labeling을 조합할 수 있다. 스타일 전이·증강, Feature Alignment(MMD, CORAL), BatchNorm 재적응은 시프트 완화에 사용된다.

학습 안정성도 별도 관리 대상이다. 낮은 학습률, 층별 LR, Grad Clip, Early Stopping을 적용하고, Catastrophic Forgetting은 Elastic Weight Consolidation(EWC), L2-SP, 규제 기반 정규화로 줄인다. 평가는 소스·타깃·혼합 분포별 벤치마크를 나눠 구성하며, 운영 중에는 데이터·개념 드리프트, 칼리브레이션(온도 스케일링), OOD 탐지를 감시한다.

프롬프트와 파인튜닝 데이터에서는 PII를 제거하고 필요하면 차등프라이버시를 적용한다. Seed 고정, 모델 카드와 데이터 시트 작성, 롤백 가능한 배포 파이프라인도 재현성과 운영을 위한 기반이 된다.

타깃 라벨이 충분할 때의 Fine-Tuning

Fine-Tuning은 타깃 라벨 데이터셋, 사전학습 모델, 평가 지표를 입력으로 삼는다. 태스크 전용 헤드를 추가하거나 교체한 뒤 백본을 동결하고 점진적으로 해제하며, 층별 학습률과 Warmup을 적용한다. EWC/L2-SP 같은 규제, 증강, Mixed Precision, Early Stopping도 함께 사용한다.

검증에서는 타깃 분포 성능과 칼리브레이션을 확인하고, 추론 지연과 메모리도 점검한다. 클래스 불균형에는 가중치 손실이나 리샘플을 적용하며, 데이터 스키마 불일치는 전처리 검증으로 다룬다. 과적합이 나타나면 드롭아웃과 데이터 증강을 강화한다.

분포 차이를 다루는 Domain Adaptation

Domain Adaptation은 소스 라벨 데이터와 타깃 무·소량 라벨 데이터, 그리고 시프트 분석을 바탕으로 시작한다. MMD, CORAL, Adversarial(Gradient Reversal) 방식으로 피처를 정렬하고, BatchNorm 통계를 업데이트한다. 타깃 의사라벨링에는 신뢰도 필터링을 함께 둔다.

타깃 전용 벤치마크 성능, t-SNE·UMAP 기반 정렬 시각화, 학습 안정성을 확인해야 한다. 부적절한 의사라벨이 확산되는 경우에는 온도·임계값을 조정하고 샘플링 균형과 정기적 재학습을 적용한다.

적은 예시로 시작하는 Few-Shot Learning

Few-Shot Learning은 K~M개 예시 또는 소량 라벨과 지시문·프롬프트 설계 지침을 입력으로 사용한다. In-Context 데모는 다양성과 대표성을 기준으로 고르고, 예시 순서를 탐색하며 Self-Consistency와 칼리브레이션을 적용한다. 필요할 때는 PEFT(LoRA/Adapter)로 경량 미세조정을 추가한다.

홀드아웃·OOD 셋 성능, 프롬프트 민감도, 비용과 지연을 검증한다. 레이블 누수를 막고 프롬프트 길이와 토큰 한도를 관리하며, 답변 일관성도 확인해야 한다.

기준 Fine-Tuning Domain Adaptation Few-Shot Learning
성능 높음(라벨 충분 시) 중~높음(시프트 완화 시) 중간(LLM 품질 의존)
확장성 중간(태스크별 모델) 중간(도메인별 파이프라인) 높음(프롬프트 교체)
일관성 높음(고정 추론) 중간(정렬 안정성 영향) 변동성 존재(프롬프트 민감)
안정성 높음(규제/모니터링 시) 중간(적응 불안정 위험) 중간(컨텍스트 변동)
운영 편의 중간(재학습 필요) 중간(복잡도 증가) 높음(학습 없음/경량 FT)
비용/자원 높음(Full) / 낮음(PEFT) 중간(적응 모듈 추가) 낮음(프롬프트)

적용 맥락에서 달라지는 선택

제조 결함 탐지에서는 ImageNet 사전학습 ViT 백본에 소량 결함 라벨을 사용해 파인튜닝하고, 이상치 검출을 병행할 수 있다.

금융 문서 분류·질의응답에서는 일반 도메인 BERT를 금융 코퍼스에 적응시키는 Domain-Adaptive Pretraining 이후 파인튜닝을 적용한다. 의료 영상 판독은 공개 데이터 사전학습 뒤 병원별 스캐너 시프트에 대해 BatchNorm 재적응과 CORAL 정렬을 적용하는 형태다.

음성 인식의 악센트 적응에는 Whisper 백본과 타깃 악센트 수십 분 데이터를 사용한 LoRA 적용이 가능하며, WER 1020% 상대 개선을 목표로 한다. LLM 기반 사내 지식 검색·요약에서는 프롬프트 템플릿과 510개 예시를 활용한 Few-Shot 방식에 지식베이스 RAG를 결합하고, 필요하면 Adapter 미세조정을 더한다.

PEFT 기준으로 학습 시간은 5090%, GPU 비용은 4080% 절감 가능하다. 라벨 수 1030% 수준으로 From-Scratch 대비 동등 성능을 달성할 수 있으며, 특정 도메인에서는 F1/Accuracy가 315pt 향상되고 배포 주기 단축과 신속한 피처 롤아웃이 가능하다.

PEFT 기반 텍스트 분류 예시

환경/전제조건: Python 3.10+, PyTorch 2.x, Transformers 4.x, CUDA 선택사항

# pip install torch transformers datasets peft accelerate evaluate
from datasets import load_dataset
from transformers import (AutoTokenizer, AutoModelForSequenceClassification,
                          TrainingArguments, Trainer, DataCollatorWithPadding)
from peft import LoraConfig, get_peft_model
import numpy as np
import evaluate

ds = load_dataset("imdb")
tok = AutoTokenizer.from_pretrained("bert-base-uncased")
def tokenize(x): return tok(x["text"], truncation=True)
ds_tok = ds.map(tokenize, batched=True, remove_columns=["text"])
collator = DataCollatorWithPadding(tok)

base = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
lora_cfg = LoraConfig(r=8, lora_alpha=16, lora_dropout=0.05, target_modules=["query","value","key","output.dense"])
model = get_peft_model(base, lora_cfg)  # 백본 고정, 로라 파라미터만 학습

metric = evaluate.load("accuracy")
def compute(p):
    preds = np.argmax(p.predictions, axis=1)
    return {"accuracy": metric.compute(predictions=preds, references=p.label_ids)["accuracy"]}

args = TrainingArguments(
    output_dir="out", per_device_train_batch_size=16, per_device_eval_batch_size=32,
    learning_rate=2e-4, num_train_epochs=2, weight_decay=0.01, fp16=True,
    evaluation_strategy="epoch", save_strategy="epoch", load_best_model_at_end=True
)

trainer = Trainer(model=model, args=args, train_dataset=ds_tok["train"].shuffle(seed=42).select(range(5000)),
                  eval_dataset=ds_tok["test"].select(range(2000)), tokenizer=tok,
                  data_collator=collator, compute_metrics=compute)
trainer.train()

Few-Shot 프롬프트 구성 예시

# 일반 예시. 제공 LLM/엔드포인트에 맞춰 호출 변경
from transformers import pipeline
gen = pipeline("text-generation", model="gpt2")  # 데모용

prompt = """You are a helpful classifier.
Task: Sentiment classification (Positive/Negative).

Examples:
Text: I loved the movie. Label: Positive
Text: It was a waste of time. Label: Negative

Now classify:
Text: The plot was engaging and the actors were great.
Label:"""

out = gen(prompt, max_new_tokens=5, do_sample=False)
print(out[0]["generated_text"])

이 예시는 실행 가능성을 우선한다. 실제 운영에서는 더 강력한 LLM과 프롬프트 가드, 출력 필터 같은 안전장치를 적용한다.

데이터와 비용이 제한된 초기 PoC에서는 Few-Shot으로 시작하고, 소량 라벨 성능의 한계가 드러나면 PEFT를 적용한다. domain shift가 크면 적응 기법을 병행하며, 더 높은 성능이 필요할 때 Full FT로 옮긴다. 이 과정과 함께 MLOps 기반의 재현성, 모니터링, 보안 체계를 구축한다.

전이학습파인튜닝도메인 적응퓨샷 러닝PEFT