Large Language Model Fine-tuning에서 In-Context Learning 능력 보존하기
Preserving In-Context Learning ability in Large Language Model Fine-tuning
TL;DR Highlight
논문은 파인튜닝으로 저하되는 ICL(In-Context Learning) 능력을 보존하는 기법을 개발하여 파인튜닝 후에도 새로운 task에 대한 few-shot 학습 성능을 유지했다.
Who Should Read
LLM을 특정 도메인에 파인튜닝하면서도 범용 추론 능력을 유지하고 싶은 ML 엔지니어. 파인튜닝 후 few-shot 성능이 떨어지는 문제를 겪고 있는 개발자.
Core Mechanics
- 파인튜닝(fine-tuning)을 하면 ICL(In-Context Learning, 예시 몇 개만 보고 새 task를 푸는 능력)이 손상되는 현상이 실제로 발생함
- ICL 능력은 사전학습(pre-training) 때 형성되는데, 파인튜닝 데이터가 이 패턴을 덮어쓰는 게 주요 원인
- 파인튜닝 데이터에 ICL 형식(few-shot 예시 포함)의 샘플을 혼합하면 ICL 능력 보존에 효과적
- 특정 레이어나 파라미터가 ICL에 더 중요하게 작동하며, 이를 선택적으로 보호하는 전략이 유효
- LoRA(적은 파라미터만 학습하는 기법) 같은 파라미터 효율적 학습법이 full fine-tuning보다 ICL 보존에 유리한 경향
- ICL 보존과 task 성능은 트레이드오프 관계이며, 데이터 혼합 비율 조정이 핵심 튜닝 포인트
Evidence
- ICL 형식 데이터를 혼합했을 때 few-shot 평가 벤치마크에서 full fine-tuning 대비 ICL 성능 유의미하게 회복 (논문 본문 수치 기반)
- LoRA 방식이 full fine-tuning 대비 ICL 벤치마크 점수 하락 폭을 줄이는 효과 확인
- 파인튜닝 후 ICL 성능이 baseline 대비 최대 수십 % 하락하는 문제를 데이터 혼합 전략으로 완화 가능함을 실험으로 검증
How to Apply
- 파인튜닝 데이터셋 구성 시, 타겟 task 데이터 외에 few-shot 예시 형식(질문-예시1-예시2-정답)으로 구성된 샘플을 10~30% 비율로 섞어보면 ICL 능력 보존에 도움이 됨
- full fine-tuning 대신 LoRA나 QLoRA를 쓰는 경우, ICL 성능 하락이 덜하므로 범용 추론이 중요한 서비스라면 파라미터 효율적 방법을 우선 고려
- 파인튜닝 후 few-shot 벤치마크(예: MMLU, BBH)로 ICL 능력을 주기적으로 체크해서, 성능 하락이 감지되면 ICL 형식 데이터 혼합 비율을 높이는 방식으로 대응
Code Example
# 파인튜닝 데이터에 ICL 형식 샘플 혼합 예시 (HuggingFace datasets 기준)
from datasets import concatenate_datasets, load_dataset
# 타겟 task 데이터
task_dataset = load_dataset("your_task_dataset")
# ICL 형식으로 변환하는 함수
def to_icl_format(examples, num_shots=3):
"""
few-shot 예시를 포함한 ICL 형식으로 변환
예: [예시1 Q&A] [예시2 Q&A] [예시3 Q&A] [실제 질문]
"""
icl_samples = []
data = examples # 실제 데이터에 맞게 수정
for i in range(num_shots, len(data)):
shots = data[i-num_shots:i]
shot_text = "\n".join([f"Q: {s['input']}\nA: {s['output']}" for s in shots])
query = f"{shot_text}\nQ: {data[i]['input']}\nA:"
icl_samples.append({"text": query, "label": data[i]['output']})
return icl_samples
# ICL 형식 데이터를 전체의 20% 비율로 혼합
# (실제 구현시 데이터 구조에 맞게 조정 필요)
print("ICL 데이터 혼합 비율: 20% 권장")
print("LoRA rank: 8~16 (full fine-tuning 대신 LoRA 사용 권장)")
# LoRA 설정 예시
from peft import LoraConfig, get_peft_model
lora_config = LoraConfig(
r=16, # rank
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
# model = get_peft_model(base_model, lora_config)Terminology
관련 논문
레이어 하나면 충분한가? 단일 Transformer 레이어 학습이 전체 파라미터 RL 학습과 동등한 성능
LLM의 RL 후처리 학습(post-training)에서 성능 향상의 대부분이 중간 레이어 소수에 집중되며, 단 하나의 레이어만 학습해도 전체 파라미터 학습과 비슷하거나 더 나은 결과를 낼 수 있다는 연구 결과. 이는 RL 학습 비용을 대폭 줄일 수 있는 가능성을 시사한다.
Black-Box LLM에서 지식 증류하기: Proxy-KD 기법 (2024)
GPT-4 같은 내부 구조에 접근할 수 없는 독점 LLM에서 작은 모델로 지식을 효과적으로 전달하는 Proxy-KD 기법을 소개하는 논문으로, 전통적인 White-Box 방식보다 성능이 높다는 점에서 주목할 만하다.
NanoEuler – 순수 C/CUDA로 처음부터 만든 GPT-2 규모 언어 모델
PyTorch나 autograd 없이 C와 CUDA만으로 GPT-2 수준의 LLM을 처음부터 구현한 교육용 프로젝트로, 역전파·BPE 토크나이저·FlashAttention까지 직접 손으로 작성했다.
Neural Particle Automata: 자기조직화 파티클 시스템을 학습하는 신경망 모델
고정된 격자 대신 움직이는 파티클 위에서 동작하는 Neural Cellular Automata의 확장 버전으로, 형태 생성·포인트 클라우드 분류·텍스처 합성 등 다양한 작업에서 자기조직화 동작을 학습할 수 있다.
PyTorch Training Loop 완전 해부: 각 줄이 하는 일과 순서를 바꾸면 생기는 문제
PyTorch 학습 루프의 각 코드 줄이 왜 그 위치에 있어야 하는지, 순서를 바꾸거나 빠뜨렸을 때 어떤 문제가 생기는지를 단계별로 설명한 심층 가이드다.
좋은 Verifier도 망가질 수 있다: Self-Improving VLM이 새로운 태스크에서 오히려 퇴보하는 현상
VLM 자가학습 루프에서 verifier가 특정 태스크에 맞지 않으면 학습할수록 오히려 성능이 떨어지는데, DPO 손실값은 멀쩡히 내려가서 눈치채기도 어렵다.