
Flint: 추론 능력을 저해하지 않고 추론 과정을 압축하는 방법
요약
추론 과정의 핵심 연산 및 검증 구간은 유지하고 서사적 구간을 압축하는 '섹션 인식 압축(Section-aware compression)' 기법을 제안합니다. 이 방식은 토큰 사용량을 1.7배 이상 줄이면서도 기존 SFT 모델보다 높은 성능을 기록하며, 프롬프트를 통해 압축 효율을 조절할 수 있습니다.
핵심 포인트
- 섹션 인식 압축은 연산/검증 구간을 유지하여 성능 저하를 방지함
- 단순 평면적 압축은 모델을 무한 루프에 빠뜨리는 부작용 발생
- 프롬프트를 통해 압축 모드와 일반 모드를 스위치처럼 전환 가능
- 학습 데이터는 모델 자체의 분포와 유사하게 유지하는 것이 중요
요약(TLDR): 저는 Qwen3.5-4B와 gemma-4-12b를 자기 증류(self-distilled)된 압축 추론 흔적(reasoning traces)으로 학습시켰습니다. 압축은 섹션 인식(section-aware) 방식으로 이루어졌습니다(연산 및 검증 구간은 유지하고, 채우기/서사/전환 구간은 삭제 또는 압축). 이 모델들은 2~3배 적은 토큰을 사용하면서도 원본 모델과 대등하거나 종종 큰 차이로 능가합니다. 전체 연구, 모델 및 코드는 공개되어 있습니다. 섹션 인식 압축, 시각화
안녕하세요! 지난 몇 달 동안 저는 추론 압축(reasoning compression)을 탐구해 왔습니다. 데이터셋을 구축하고, (많은) LoRA를 학습시키고, 벤치마크를 수행했으며, 마침내 제가 발견한 내용을 정리했습니다.
제 연구의 주요 결과는 다음과 같습니다:
평면적 압축(Flat compression)은 탐욕적 디코딩(greedy decoding)을 실패하게 만듭니다. 전체 흔적을 압축된 스타일로 압축하고 이를 학습시키면, 모델이 Temperature 0에서 GSM8K 문제의 93%에 대해 루프(loop)에 빠지게 됩니다(정확도 0.03). 이는 종종 정답에 도달한 직후에 발생합니다. 동일한 체크포인트가 루프 실패에서 추출된 하위 집합에 대해 Temperature 1.0에서 0.90의 점수를 기록하는 것으로 보아, 모델이 무언가를 잊어버린 것이 아니라 단지 종료(terminate)하는 데 실패하고 있음을 알 수 있습니다.
섹션 인식 압축(Section-aware compression)은 효과적이며, 압축되지 않은 SFT(Supervised Fine-Tuning)보다 성능이 뛰어납니다. 모델이 연산하고 검증하는 구간(자신의 언어로)은 유지하고 그 사이의 서사(narration)만 압축/삭제하면, 정확도가 상승합니다. 압축되지 않은 SFT 대조군 대비 GSM8K에서 +0.15의 상승을 보였으며, 추론 토큰은 약 1.7배 적게 사용했습니다. 모델은 연산 구간을 "작업 기억(working memory)"뿐만 아니라 종료를 위한 앵커(anchor)로 해석합니다.
시스템 프롬프트가 무엇을 "의미"하는지는 학습에 따라 달라집니다. 원본 모델에게 "단계별로 생각해보세요(please reason step by step)..."는 더 깊이 생각하라는 의미이지만, 압축 학습된 모델에게는 효율성 트리거(efficiency trigger)로 작용합니다(프롬프트 사용 시 ~1.5k 토큰에서 0.82, 미사용 시 ~3.4k 토큰에서 ~0.63). 프롬프트와 함께 학습하면 프롬프트에 대한 의존성이 생성되므로(MATH-500에서 확인됨), 가장 효과적인 레시피는 다음과 같습니다: 프롬프트 없이 순수하게(bare) 학습시키고, 서비스할 때는 프롬프트를 사용하는 것입니다. 여러분은 압축을 하나의 스위치처럼 만들 수 있습니다.
압축된 스타일을 설명하는 정체성 프롬프트 (identity prompt)를 사용하여 학습시키면 해당 동작이 프롬프트에 결합됩니다. 즉, 프롬프트가 켜져 있으면(prompt on) 간결한 추론(concise reasoning)이 이루어지며, 약 1.9k 토큰 내외에서 0.80의 성능을 보입니다. 프롬프트가 꺼져 있으면(prompt off) 모델은 정상적인 정확도로 약 4.1k 토큰까지 다시 압축을 해제(decompress)합니다. 더 강력한 교사 모델(teacher)을 사용하는 것은 상황을 더 악화시켰습니다. 더 큰 모델을 사용하여 추적(traces)을 분할하거나 변환하면 더 깨끗한 데이터(더 많은 린트 패스(lint passes))를 생성하지만, 압축되지 않은 SFT(Supervised Fine-Tuning)보다 성능이 낮은 모델이 만들어졌습니다. 중요한 것은 추적(traces)이 모델 자체의 분포(distribution)와 가깝게 유지되어야 한다는 점입니다. "코드 세금(code tax)"은 도메인이 아니라 데이터를 따릅니다. Qwen의 코드 추적은 거의 모두 계산(computation)이므로, 섹션 인식 압축(section-aware compression)이 거의 영향을 미치지 않았으며, 압축 학습은 코드 사고 과정을 길게 만들고 HumanEval/MBPP에서 약 0.13의 비용을 발생시켰습니다. Gemma의 경우 동일한 레시피를 적용했을 때 코드가 가장 많이 압축되었으며, HumanEval 성능은 거의 두 배로 뛰었습니다 (0.31 -> 0.57). 모델은 학습된 도메인별 추적 길이(per-domain trace lengths)를 재현합니다. 이는 전이(transfer)됩니다. gemma-4-12b-it (파라미터 3배, 다른 제품군/토크나이저)에 대해 전체 파이프라인을 다시 실행한 결과: 원본의 3,753 토큰에서 0.57을 기록한 것과 비교하여, 1,679 토큰에서 0.86의 GSM8K 성능을 보였습니다. 또한 압축된 버전은 탐욕적(greedy) 방식뿐만 아니라 모든 샘플링 온도(sampling temperature)에서 승리했습니다. 이 모든 과정은 의도적으로 소규모로 진행되었습니다 (각 암(arm)당 322-648개의 학습 행, 각 암당 약 1.5개의 3090 GPU 시간). 덕분에 약 15개의 암으로 구성된 절제 연구(ablation) 그리드를 저렴하게 수행할 수 있었지만, 이는 또한 이 수치들이 반드시 최적은 아님을 의미합니다. 현재 약 1.5k 행 규모의 암이 대기 중이며, 25k-30k 행 규모의 빌드가 계획되어 있습니다. 여유 컴퓨팅 자원이 있고 이를 대규모로 실행하는 것을 보고 싶다면 연락해 주세요! 제안과 토론에 열려 있으니, 여기에 댓글을 남기거나 저에게 연락해 주세요! 모든 내용은 여기서 확인하실 수 있습니다: 전체 글 🤗 모델 + 데이터셋 (메인 컬렉션) 🤗 절제 연구 암 코드 (파이프라인 + 실험 저널) /u/marcodsn 님이 r/LocalLLaMA에 제출함 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/OpenAI Codex (search)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기