코드 생성 성능을 향상시키는 놀라울 만큼 단순한 자기 증류 기법
1 week ago
8
-
Simple Self-Distillation(SSD) 은 대형 언어 모델이 교사 모델이나 강화학습 없이 스스로 생성한 코드를 다시 학습해 성능을 높이는 방법
-
Qwen3-30B-Instruct 모델의 LiveCodeBench v6 pass@1 점수를 42.4%에서 55.3%로 향상시키며, 특히 어려운 문제 구간에서 +15.3pp 개선
- SSD는 코드 생성 중 정확도와 탐색 간 충돌을 완화하며, 문맥에 따라 꼬리 확률을 억제하고 유용한 다양성을 유지
- 단순한 온도 조정이나 디코딩 정책 변경만으로는 동일한 효과를 재현할 수 없으며, SSD는 모델 내부 분포 자체를 재형성
- 외부 데이터나 검증 없이 적용 가능한 간단한 후처리 학습 절차로, LLM 코드 생성 품질 향상에 실질적 대안을 제시함
단순 자기 증류(Simple Self-Distillation, SSD)
-
SSD(Simple Self-Distillation) 은 대형 언어 모델(LLM)이 교사 모델, 검증기, 강화학습 없이 스스로 생성한 코드 출력을 이용해 성능을 향상시키는 방법
- 모델이 특정 온도(temperature) 와 절단(truncation) 설정으로 샘플을 생성하고, 그 결과를 표준 지도 미세조정(SFT) 으로 다시 학습
- 외부 라벨 데이터, 보상 모델, 실행 환경이 전혀 필요하지 않음
-
Qwen3-30B-Instruct 모델의 LiveCodeBench v6 pass@1 점수를 42.4% → 55.3% 로 향상 (+12.9pp, +30% 상대 향상)
- 특히 어려운 문제(hard split) 에서 가장 큰 개선(+15.3pp)
- Qwen 및 Llama 계열의 4B, 8B, 30B 모델 전반에서 일반화
- SSD는 정확도-탐색(precision-exploration) 충돌을 완화하는 방식으로 작동
- 코드 생성 중 일부 토큰은 높은 정확도를 요구(“lock”), 일부는 다양한 탐색을 요구(“fork”)
- SSD는 문맥에 따라 불필요한 꼬리 분포를 억제하면서 유용한 다양성은 유지
1. 연구 배경
- 고품질 지도 신호(예: 사람 작성 코드)가 부족해 LLM 코드 생성 성능 향상에 제약 발생
- 기존 접근법의 한계
-
교사 모델 기반 증류: 교사 모델의 성능 한계 상속
-
강화학습(RL): 보상 모델 및 실행 기반 검증 필요, 불안정함
-
비지도 대안(예: 다수결, 엔트로피 최소화): 장기 학습 시 붕괴 위험
- SSD는 외부 데이터나 검증 없이 모델 자체 출력만으로 개선 가능함을 입증
2. SSD 방법론
-
데이터 합성
- 주어진 문제 프롬프트 집합 X에 대해, 모델 pθ에서 온도 Ttrain과 절단 설정 ρtrain(top-k, top-p) 으로 샘플링
- 생성된 출력(y)은 검증 없이 그대로 학습 데이터(DSSD) 로 사용
- 대부분의 경우 N=1 (문제당 한 샘플) 로 충분
-
학습
- 표준 교차 엔트로피 손실로 지도 미세조정 수행
- L(θ) = −E(x,y)∼DSSD Σ log pθ(yt | x, y<t)
-
추론
- 학습된 모델 pθ*을 평가 온도 Teval과 절단 설정 ρeval로 디코딩
3. 실험
-
모델 구성
-
Llama-3.1-8B-Instruct, Qwen3-4B/30B (Instruct, Thinking) 등 5개 모델
- 2개 계열(Llama, Qwen), 3개 규모(4B, 8B, 30B), 2가지 추론 스타일(Instruct, Thinking)
-
데이터
-
rSTARcoder 데이터셋의 경쟁 프로그래밍 문제 약 10K개 사용
-
정답 검증 없이 단순 문법 필터링만 적용
-
학습 설정
-
Megatron-LM 기반, 8×B200 GPU 사용
- AdamW 옵티마이저, 최대 시퀀스 길이 65,536
- Instruct 모델 2,500 step, Thinking 모델 300 step
-
평가
-
LiveCodeBench v6 (LCB v6) 를 주요 벤치마크로 사용
-
pass@1, pass@5, 난이도별(Easy/Medium/Hard) 세분화 평가
4. 주요 결과
-
전반적 성능 향상
- Qwen3-30B-Instruct: 42.4% → 55.3% pass@1 (+12.9pp)
- Qwen3-4B-Instruct: +7.5pp, Llama-8B: +3.5pp
- Thinking 모델도 +2~3pp 향상
-
난이도별 개선
- Qwen3-30B-Instruct: Easy +6.5pp / Medium +14.2pp / Hard +15.3pp
- Thinking 모델에서도 Hard 구간에서 가장 큰 향상
-
다양성 유지
- pass@5 향상이 pass@1보다 큼 → 생성 다양성 유지 및 향상
- 예: Qwen3-30B-Instruct pass@5 +18.1pp (Hard +23.0pp)
-
도메인 일반화
- 경쟁 프로그래밍 외 수학·일반 코드·이해 과제에서도 성능 유지
5. 디코딩 정책 비교
-
온도 조정만으로는 SSD 효과 재현 불가
- Base 모델의 온도 스윕 결과: pass@1 변화폭 1.5–3.0pp 수준
- SSD는 동일 조건에서 +11.8pp(Qwen3-30B-Instruct) 향상
- 특히 Hard 문제와 pass@5에서 격차가 가장 큼
- SSD는 모델 내부 분포 자체를 변화시켜 단순 디코딩 조정으로는 대체 불가
6. 하이퍼파라미터 상호작용
-
훈련 온도(Ttrain) 와 평가 온도(Teval) 의 곱 Teff = Ttrain × Teval이 성능을 결정
- Teff ≈ 1.2 부근에서 최고 성능
- Ttrain이 높을수록 Teval 변화에 민감해짐
-
절단(truncation) 을 추가하면 성능 상한 상승
- 최적 설정: Ttrain=2.0, Teval=1.1, top-k=10 → pass@1 49.7% (+7.3pp)
- 절단은 저확률 꼬리 제거로 추가 개선 제공
7. SSD 작동 원리
-
정확도-탐색(Precision–Exploration) 충돌
-
Lock: 문법적으로 정답이 거의 고정된 위치 → 낮은 온도 필요
-
Fork: 여러 해법이 가능한 위치 → 높은 온도 필요
- 단일 온도로 두 요구를 모두 만족시키기 어려움
-
SSD의 역할
-
Lock에서는 꼬리 확률을 억제해 정밀도 강화
-
Fork에서는 상위 후보 간 확률을 평탄화해 탐색 다양성 유지
- 결과적으로 문맥 의존적 분포 재형성 수행
8. 실험적 검증
-
모의 환경 실험
- Fork 1회 + Lock 3회 구조의 단순 환경에서 SSD 적용
- SSD 후 성공 확률 상승, 최적 온도 범위 확장
- 학습과 디코딩이 서로 보완적임을 확인
-
실제 모델 분석
- SSD 후 상위 토큰 누적 확률 증가, 꼬리 확률 감소
- 높은 Teval에서도 유효한 상위 후보 수 증가, 엔트로피 상승
- 즉, SSD는 꼬리 제거와 상위 분포 확장을 동시에 달성
9. 이론적 분석
- SSD 학습 손실은 세 가지 항으로 분해됨
-
Support Compression: 꼬리 확률 제거
-
Within-Support Reshaping: 상위 분포 재형성
-
Alignment to Base Model: 원 모델과의 정렬 유지
-
Lock에서는 첫 번째 항이 지배적 → 꼬리 제거
-
Fork에서는 두 번째 항이 작동 → 상위 분포 평탄화
- 전체 엔트로피는 감소하지만, 유용한 탐색 엔트로피는 유지
- 단순 디코딩 조정은 이러한 문맥별 재형성을 수행할 수 없음
10. 비정상 데이터 실험
-
Ttrain=2.0, 절단 없음으로 생성된 데이터의 62%가 의미 없는 잡음(gibberish)
- 그럼에도 불구하고 SSD 적용 후
- pass@1: 42.4% → 48.1% (+5.7pp)
- pass@5: 53.5% → 64.0% (+10.5pp)
- Hard 문제에서 +7.3pp / +13.8pp 향상
- 이는 SSD가 정답 품질이 아닌 분포 구조 학습을 통해 개선을 이끌 수 있음을 보여줌
결론
-
Simple Self-Distillation(SSD) 은
- 외부 교사나 검증 없이 모델 자체 출력만으로 코드 생성 성능을 향상
-
정확도-탐색 충돌을 완화하며, 분포 재형성을 통해 일반화된 개선 달성
- SSD는 후처리(post-training) 단계에서 적용 가능한 간단하면서도 강력한 방법으로,
LLM 코드 생성 품질 향상에 실질적 대안을 제시함
-
Homepage
-
개발자
- 코드 생성 성능을 향상시키는 놀라울 만큼 단순한 자기 증류 기법