Preserving In-Context Learning ability in Large Language Model Fine-tuning
TL;DR Highlight
A study on how to preserve ICL (in-context learning — performing new tasks with just a few examples) ability that breaks during fine-tuning.
Who Should Read
Researchers and engineers who need to fine-tune LLMs for specific tasks while preserving their general few-shot learning capabilities.
Core Mechanics
- Fine-tuning on task-specific data often catastrophically degrades a model's in-context learning (ICL) ability — a form of catastrophic forgetting
- ICL capability is stored in a distributed way across attention layers — task-specific fine-tuning overwrites these distributed representations
- Key finding: fine-tuning with diversity in the fine-tuning data preserves ICL better than fine-tuning on homogeneous task-specific data
- LoRA fine-tuning preserves ICL significantly better than full fine-tuning because it limits the parameter update space
- Adding a small fraction (~10%) of general instruction-following examples to the task-specific fine-tuning data substantially preserves ICL ability
- The paper proposes an ICL preservation regularization term that can be added to any fine-tuning objective
Evidence
- Full fine-tuning on task-specific data: ICL performance dropped by 31% on average across held-out tasks
- LoRA fine-tuning: ICL performance dropped by only 9% — significantly better preservation
- Adding 10% general data to fine-tuning mix: ICL performance preserved within 5% of baseline while maintaining task-specific performance
How to Apply
- When fine-tuning: always use LoRA or PEFT methods rather than full fine-tuning if preserving ICL matters for your use case — the rank constraint acts as a natural regularizer.
- Mix in ~10% of diverse general instruction-following data (e.g., from FLAN or Alpaca datasets) into your task-specific fine-tuning data — this simple trick significantly preserves ICL.
- Evaluate ICL preservation explicitly in your fine-tuning pipeline: before and after fine-tuning, test the model on held-out few-shot tasks unrelated to your fine-tuning domain.
Code Example
# Example of mixing ICL format samples into fine-tuning data (based on HuggingFace datasets)
from datasets import concatenate_datasets, load_dataset
# Target task data
task_dataset = load_dataset("your_task_dataset")
# Function to convert to ICL format
def to_icl_format(examples, num_shots=3):
"""
Convert to ICL format including few-shot examples
e.g., [Example1 Q&A] [Example2 Q&A] [Example3 Q&A] [Actual Question]
"""
icl_samples = []
data = examples # Modify to match actual data structure
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
# Mix ICL format data at 20% ratio of the total dataset
# (Adjust to match data structure in actual implementation)
print("ICL data mixing ratio: 20% recommended")
print("LoRA rank: 8~16 (LoRA recommended over full fine-tuning)")
# LoRA configuration example
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
Related Papers
Show HN: Neural Particle Automata
고정된 격자 대신 움직이는 파티클 위에서 동작하는 Neural Cellular Automata의 확장 버전으로, 형태 생성·포인트 클라우드 분류·텍스처 합성 등 다양한 작업에서 자기조직화 동작을 학습할 수 있다.
The annotated PyTorch training loop
PyTorch 학습 루프의 각 코드 줄이 왜 그 위치에 있어야 하는지, 순서를 바꾸거나 빠뜨렸을 때 어떤 문제가 생기는지를 단계별로 설명한 심층 가이드다.
When Good Verifiers Go Bad: Self-Improving VLMs Can Regress on New Tasks
VLM 자가학습 루프에서 verifier가 특정 태스크에 맞지 않으면 학습할수록 오히려 성능이 떨어지는데, DPO 손실값은 멀쩡히 내려가서 눈치채기도 어렵다.
The Role of Feedback Alignment in Self-Distillation
LLM이 스스로를 가르칠 때, 피드백을 모델의 추론 흐름에 단계별로 맞추면 GRPO보다 16점 이상 수학 추론 성능이 오른다.
Tiny hackable CUDA language model implementation
CUDA로 작성된 GPT(Generative Pretrained Transformer) 미니멀 구현체로, 텍스트뿐 아니라 모든 바이트 스트림을 학습할 수 있어 LLM 내부 구조를 직접 뜯어보고 싶은 개발자에게 유용하다.
CS336: Language Modeling from Scratch
Stanford에서 운영하는 LLM 전 과정 구현 강의로, 토크나이저부터 데이터 수집, 트랜스포머 구현, 분산 학습, RL 기반 정렬까지 직접 코딩하며 배운다. 이론이 아닌 구현 중심이라 실제로 LLM이 어떻게 작동하는지 깊이 이해하고 싶은 개발자에게 가장 체계적인 커리큘럼 중 하나다.