Models & AlgorithmsEN

SDFT: 자기 증류로 망각 없이 학습하기

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

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 목표:

LSFT=E(x,y)D[logπθ(yx)]\mathcal{L}_\text{SFT} = -\mathbb{E}_{(x,y)\sim\mathcal{D}}[\log \pi_\theta(y|x)]

SDFT 목표:

LSDFT=ExD[logπθ(yx)]where yπθ(x,demos)\mathcal{L}_\text{SDFT} = -\mathbb{E}_{x\sim\mathcal{D}}[\log \pi_\theta(y|x)] \quad \text{where } y \sim \pi_\theta(\cdot|x, \text{demos})

차이점: $y$가 고정된 정답이 아니라 모델 자신이 생성한 출력.

3. 왜 SDFT가 효과적인가?

분포 유지의 중요성

python
SFT:  P_model → P_new_data (기존 분포 파괴)
SDFT: P_model → P_model + Δ (기존 분포 보존하며 개선)

자기 증류의 장점

측면SFTSDFT
학습 신호외부 데이터모델 자체 생성
분포 변화급격함점진적
기존 능력손실보존
보상 함수필요 없음필요 없음

RL과의 비교

강화학습도 on-policy지만:

  • RL: 보상 함수 필요 (설계 어려움)
  • SDFT: 보상 함수 불필요 (demonstration만 있으면 됨)

4. 실험 결과

연속 학습 성능

논문의 주요 실험 결과:

메트릭SFTSDFT
새 작업 정확도기준더 높음
기존 작업 유지급격히 저하대부분 유지
다중 작업 축적성능 퇴화지속적 개선

순차 학습 시나리오

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

핵심 구성요소

  1. Demonstration 조건화: 모델에 예시를 보여줌
  2. 자기 생성: 모델이 직접 출력 생성
  3. On-policy 학습: 생성된 출력으로 자기 학습

6. 한계와 고려사항

현재 한계

한계설명
Demonstration 품질좋은 예시가 필요
생성 비용매 학습 시 생성 필요
초기 모델 의존기본 능력이 있어야 증류 가능

적용 시 고려사항

  • Demonstration 선택: 대표적이고 다양한 예시 필요
  • 생성 다양성: Temperature 조절로 다양한 출력 유도
  • 학습률 조절: 너무 빠른 학습은 여전히 망각 유발

7. 실용적 시사점

언제 SDFT를 쓸까?

적합한 경우:

  • 모델을 지속적으로 업데이트해야 할 때
  • 새 도메인 적응이 필요하지만 기존 능력 유지 필요
  • 보상 함수 설계가 어려운 상황

부적합한 경우:

  • 완전히 새로운 능력 학습 (기존 모델에 관련 지식 없음)
  • 빠른 one-shot 적응이 필요한 경우

미래 전망

SDFT는 대규모 언어 모델의 지속적 업데이트에 핵심 기술이 될 수 있다.
  • 모델 업데이트: 새 지식 추가 시 전체 재학습 불필요
  • 도메인 적응: 특정 분야 특화 시 범용 능력 유지
  • 안전성: 기존의 안전 학습 결과 보존

핵심 정리

개념설명
Catastrophic Forgetting새 학습이 기존 지식을 덮어쓰는 현상
Off-policy (SFT)외부 데이터 분포로 학습 → 망각 유발
On-policy (SDFT)모델 자체 분포에서 학습 → 망각 방지
Self-Distillation모델이 스스로를 선생님 삼아 학습
Demonstration-conditioned예시를 조건으로 모델 출력 유도

참고 자료

더 많은 콘텐츠를 받아보세요

SNS에서 새로운 글과 튜토리얼 소식을 가장 먼저 받아보세요

이메일로 받아보기

관련 포스트