SDFT: 자기 증류로 망각 없이 학습하기
복잡한 강화학습 없이, 모델이 스스로를 선생님 삼아 새로운 기술을 배우면서도 기존 능력을 유지하는 방법.

SDFT: 자기 증류로 망각 없이 학습하기
복잡한 강화학습 없이, 모델이 스스로를 선생님 삼아 새로운 기술을 배우면서도 기존 능력을 유지하는 방법.
TL;DR
- 문제: 기존 SFT는 새로운 것을 배우면 이전 것을 잊음 (Catastrophic Forgetting)
- 해결: SDFT (Self-Distillation Fine-Tuning) - 자기 증류 미세조정
- 핵심: 모델이 demonstration을 조건으로 받아 스스로 학습 신호 생성 (On-policy)
- 결과: 망각 없이 여러 기술을 순차적으로 학습 가능
1. 왜 SFT는 망각을 유발하는가?
Supervised Fine-Tuning의 한계
기존 SFT 방식의 문제:
python
학습 데이터 분포 ≠ 모델의 현재 출력 분포| 특성 | SFT | 문제점 |
|---|---|---|
| 학습 방식 | Off-policy | 정답 데이터만 보고 학습 |
| 분포 차이 | 큼 | 모델 출력과 학습 데이터 괴리 |
| 결과 | 망각 | 새 데이터로 기존 분포 덮어씀 |
Off-policy vs On-policy
Off-policy (SFT):
python
모델 출력: "The cat sat on the..."
정답 레이블: "A feline rested upon the..."
→ 모델의 자연스러운 출력 무시하고 강제 학습On-policy (SDFT):
python
모델 출력: "The cat sat on the mat."
학습 신호: 모델 자신의 출력에서 생성
→ 현재 분포를 유지하면서 개선2. SDFT: 자기 증류 미세조정
핵심 아이디어
모델에게 시연(demonstration)을 보여주고, 그 지식을 기반으로 모델 스스로가 학습 데이터를 생성하게 한다.
작동 방식
python
1. Demonstration 제공
[예시 입력] → [예시 출력]
2. 모델이 조건부 생성
π(y|x, demonstrations)
3. 생성된 데이터로 자기 학습
모델 출력 → 학습 신호수식으로 표현
기존 SFT 목표:
SDFT 목표:
차이점: $y$가 고정된 정답이 아니라 모델 자신이 생성한 출력.
3. 왜 SDFT가 효과적인가?
분포 유지의 중요성
python
SFT: P_model → P_new_data (기존 분포 파괴)
SDFT: P_model → P_model + Δ (기존 분포 보존하며 개선)자기 증류의 장점
| 측면 | SFT | SDFT |
|---|---|---|
| 학습 신호 | 외부 데이터 | 모델 자체 생성 |
| 분포 변화 | 급격함 | 점진적 |
| 기존 능력 | 손실 | 보존 |
| 보상 함수 | 필요 없음 | 필요 없음 |
RL과의 비교
강화학습도 on-policy지만:
- RL: 보상 함수 필요 (설계 어려움)
- SDFT: 보상 함수 불필요 (demonstration만 있으면 됨)
4. 실험 결과
연속 학습 성능
논문의 주요 실험 결과:
| 메트릭 | SFT | SDFT |
|---|---|---|
| 새 작업 정확도 | 기준 | 더 높음 |
| 기존 작업 유지 | 급격히 저하 | 대부분 유지 |
| 다중 작업 축적 | 성능 퇴화 | 지속적 개선 |
순차 학습 시나리오
python
작업 순서: Task A → Task B → Task C
SFT 결과:
- Task A: 90% → 60% → 40% (계속 하락)
- Task B: — → 85% → 55%
- Task C: — → — → 80%
SDFT 결과:
- Task A: 90% → 88% → 86% (거의 유지)
- Task B: — → 85% → 83%
- Task C: — → — → 82%5. 구현 개념
Pseudo-code
python
def sdft_training_step(model, input_x, demonstrations):
# 1. Demonstration을 조건으로 모델 출력 생성
with torch.no_grad():
# In-context learning으로 출력 생성
y_generated = model.generate(
input_x,
context=demonstrations,
temperature=1.0
)
# 2. 생성된 출력으로 학습 (on-policy)
loss = -model.log_prob(y_generated, given=input_x)
return loss핵심 구성요소
- Demonstration 조건화: 모델에 예시를 보여줌
- 자기 생성: 모델이 직접 출력 생성
- On-policy 학습: 생성된 출력으로 자기 학습
6. 한계와 고려사항
현재 한계
| 한계 | 설명 |
|---|---|
| Demonstration 품질 | 좋은 예시가 필요 |
| 생성 비용 | 매 학습 시 생성 필요 |
| 초기 모델 의존 | 기본 능력이 있어야 증류 가능 |
적용 시 고려사항
- Demonstration 선택: 대표적이고 다양한 예시 필요
- 생성 다양성: Temperature 조절로 다양한 출력 유도
- 학습률 조절: 너무 빠른 학습은 여전히 망각 유발
7. 실용적 시사점
언제 SDFT를 쓸까?
✅ 적합한 경우:
- 모델을 지속적으로 업데이트해야 할 때
- 새 도메인 적응이 필요하지만 기존 능력 유지 필요
- 보상 함수 설계가 어려운 상황
❌ 부적합한 경우:
- 완전히 새로운 능력 학습 (기존 모델에 관련 지식 없음)
- 빠른 one-shot 적응이 필요한 경우
미래 전망
SDFT는 대규모 언어 모델의 지속적 업데이트에 핵심 기술이 될 수 있다.
- 모델 업데이트: 새 지식 추가 시 전체 재학습 불필요
- 도메인 적응: 특정 분야 특화 시 범용 능력 유지
- 안전성: 기존의 안전 학습 결과 보존
핵심 정리
| 개념 | 설명 |
|---|---|
| Catastrophic Forgetting | 새 학습이 기존 지식을 덮어쓰는 현상 |
| Off-policy (SFT) | 외부 데이터 분포로 학습 → 망각 유발 |
| On-policy (SDFT) | 모델 자체 분포에서 학습 → 망각 방지 |
| Self-Distillation | 모델이 스스로를 선생님 삼아 학습 |
| Demonstration-conditioned | 예시를 조건으로 모델 출력 유도 |
참고 자료
- 논문: Self-Distillation Enables Continual Learning
- 프로젝트 페이지: https://self-distillation.github.io/SDFT.html
- 저자: Idan Shenfeld, Mehul Damani, Jonas Hübotter, Pulkit Agrawal (MIT CSAIL)
이메일로 받아보기
관련 포스트

AI Models
Gemma 4 — 구글이 Apache 2.0으로 풀어놓은 오픈 모델의 새 기준
Gemma 시리즈 최초 Apache 2.0 라이선스. Chatbot Arena 전체 3위. 31B Dense, 26B MoE(3.8B 활성), E4B/E2B 에지 모델까지. AIME 89.2%, Codeforces ELO 2150, 256K 컨텍스트, 멀티모달.

Models & Algorithms
TurboQuant 실전 — llama.cpp와 HuggingFace에서 KV Cache 압축하기
llama.cpp turbo3 빌드, HuggingFace 통합, 메모리 계산기, 최적 설정 가이드. 70B 모델 536K 컨텍스트 실현.

Models & Algorithms
TurboQuant 완전 해부 — Google의 KV Cache 극한 압축 알고리즘
PolarQuant + Lloyd-Max로 KV Cache를 3비트까지 압축. 리트레이닝 없이 4.6배 메모리 절약, 정확도 손실 제로.