「何倍圧縮」で規模を比べてはいけない——一つの主張を5回訂正した記録
요약
본 기사는 소형 언어 모델(LLM)의 압축 및 최적화 과정에서 발생한 여러 가지 오해와 잘못된 주장을 기록하고 있습니다. 특히, 어휘 크기 증가에 따른 이득을 측정할 때 '학습량'과 '압축 품질 손실' 같은 핵심 변수를 통제하지 않아 결론이 역전되는 과정을 보여줍니다.
핵심 포인트
- LLM 비교 시 학습량(스텝) 등 모든 조건을 동일하게 맞춰야 합니다.
- 단순히 배율만 늘린다고 해서 성능 향상을 기대할 수 없습니다. 품질 저하가 동반됩니다.
- 최적의 압축 임계값은 모델의 어휘 크기마다 다르게 설정되어야 합니다.
- 모델 비교 시 '배율' 같은 단일 지표에 의존하는 것은 위험합니다.
소형 언어 모델(LLM)을 직접 학습시키면서, 얼마나 작게 만들 수 있는지 3개월 동안 측정했습니다.
그 과정에서 '어휘 크기를 2배로 늘리면 이득이다'라는 하나의 주장을 5번 수정했습니다.
결국 부호가 반전되어 결론이 역전되었습니다.
원인은 하나입니다. '배율'(fp32 ÷ 파일 크기)로, fp32의 크기가 다른 모델들을 비교했기 때문입니다.
이 글은 그 5번의 기록입니다. 각 단계에서 '조건을 맞추는' 정도를 높일수록 이득이 매번 줄어듭니다.
| 단계 | 주장 | 잘못되었던 점 |
|---|---|---|
| 처음 | 배율 1.40배 · 품질 거의 동일 | 학습량이 4배 달랐음 |
| ... | 수정 5 | |
| 1.11MB 초과 시 +0.2~0.5%, 미만일 때 16,000이 유리 | ||
| — |
설정
직접 만든 소형 언어 모델입니다. 노트북 PC의 CPU만으로 학습했습니다(GPU 없음).
| 아키텍처 | d_model=144 / 4층 / tied embeddings |
| 본체 (임베딩 제외) | 959,760 파라미터 (어휘에 관계없이 일정) |
| 임베딩 | 어휘 × 144 |
| ... |
기준 비율(基準比) = 압축 후 ppl ÷ 압축 전 ppl. 같은 모델 내에서의 '압축으로 인한 품질 손실'입니다.
배율 = 해당 모델의 fp32 ÷ 파일 크기.
압축 파이프라인은, 임베딩 행의 동일시(코사인 유사도 cos 임계값으로 union-find) → 회전 → 계층별 비트 할당 → 비균일 대표 값 → 하위 VQ → 범위 부호입니다.
첫 번째 주장
어휘 16,000 (24,000 스텝)과 어휘 32,000 (6,000 스텝)을 나란히 놓고, 배율 12.678 → 17.810, 기준 비율 1.1147 → 1.1118로 작성했습니다. '품질은 거의 변하지 않으면서 배율만 늘어났다'고 적었습니다.
학습량이 4배 달랐습니다. 비교가 되어 있지 않았습니다.
수정 1: 학습량을 맞추자 품질의 대가가 나타난다
어휘 32,000을 24,000 스텝으로 재학습했습니다(12.76시간). 임계값도 저장 형식도 통일했습니다.
| 어휘 16,000 | 어휘 32,000 | |
|---|---|
| 대표 행 | 10,423 / 16,000 (34.9% 감소) | 13,671 / 32,000 (57.3% 감소) |
| ... | 18.8755 (1.439배) |
| 기준 비율 | 1.11621 | 1.17110 (+4.92%) |
배율은 1.44배로 늘어나지만, 품질의 대가가 +4.92% 있습니다. '거의 무료'가 아니었습니다.
여기서 부산물처럼 하나의 생각이 무너졌습니다. 같은 32,000 어휘에서 6,000 스텝 → 24,000 스텝으로 하면 대표 행은 14,441 → 13,671로 줄어드는 반면, 기준 비율은 1.11893 → 1.17110으로 악화합니다. 학습이 진행될수록 남은 행이 더 많은 정보를 담당하기 때문에, 같은 임계값으로 모았을 때의 손실이 커집니다. 대표 행의 수는 동일시 비용의 대리 지표가 될 수 없습니다.
수정 2: 품질을 맞추려면 양쪽 모두의 임계값 곡선이 필요했다
한쪽의 곡선만 가지고는 '같은 품질에서 어느 쪽이 이득인지' 말할 수 없습니다. cos를 적용하여 양쪽의 곡선을 그렸습니다(총 13개, 측정 편차 없음).
| 어휘 32,000 | file | 배율 | 기준 비율 |
|---|---|
| 동일시 없음 | 1,976,859 | 11.2659 | 1.08719 |
| ... |
| 어휘 16,000 | file | 배율 | 기준 비율 |
|---|---|
| 동일시 없음 | 1,224,107 | 10.6650 | 1.08944 |
| ... |
여기서도 생각이 무너졌습니다. 최적 임계값은 어휘에 따라 달라집니다. 어휘 16,000에서는 cos 0.98이 최적이었지만, 어휘 32,000에서는 0.96에서도 아직 성능 향상이 계속되고 있었습니다. 0.98을 상수라고 생각했던 것이 잘못이었습니다.
가장 가까운 두 지점(기준 비율 1.13936과 1.14775)으로 비교했을 때, 순수 이득은 +17.7%입니다. 품질 차이 0.736%는 레이트 곡선에서 흡수되었기 때문에 아직 잠정치입니다.
수정 3: 정말로 일치하는 지점에서 측정하기
16,000 쪽의 곡선을 cos 0.92 / 0.90까지 늘리자, 품질이 거의 완벽하게 일치하는 조합을 만들 수 있었습니다.
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
| 맞춘 지점 | 어휘 16,000 | 어휘 32,000 | 품질 차이 | 용량 차이 | 순수 |
|---|---|---|---|---|---|
| 기준 대비 1.1553 | cos0.92: 14.7258 | cos0.99: 17.9503 | +0.013% | +21.90% | +21.88% |
| 기준 대비 1.18 근처 | cos0.90: 15.1207 | cos0.97: 19.5152 | +0.217% | +29.06% | +28.79% |
| 동일시 없음 | 10.6650 | 11.2659 | −0.207% | +5.63% | +5.89% |
첫 번째 줄은 품질 차이 0.013%입니다. 측정 시스템의 변동(ppl 0.0077%, 용량 0.0105%)보다 크므로 유의미합니다.
세 번째 줄에서 메커니즘을 파악했습니다. 동일시를 적용하지 않았을 때 어휘가 2배인 이득은 +5.9%에 불과합니다. 동일시와 결합하면 +21.9%입니다. 즉,
어휘 수를 크게 하는 것의 이득은 거의 모두 '단어의 동일시(word identity)'에서 나오고 있습니다.
임베딩 비율 자체가 높아지는 것(70.6% → 82.8%)으로 인한 이득은 전체의 4분의 1여도 채 되지 않았습니다.
수정 4: 배율로 모델 간 비교해서는 안 된다
이것이 본론입니다.
먼저 전제 확인부터 합니다. 어휘를 넘나드는 ppl의 절대값은 비교할 수 없습니다(31.3391 vs 37.9006). 토큰 잘리는 방식이 다르기 때문에 1토큰당 난이도가 다릅니다. 그래서 평가 창 자체를 디코딩하여 문자당 비트 수로 환산했습니다.
| 압축 전 품질 | bits/char | bits/byte |
|---|---|---|
| 어휘 16,000 (24,000 워드) | 3.2615 | 1.4502 |
| 어휘 32,000 (24,000 워드) | 3.1969 | 1.4420 |
어휘 32,000 모델이 1.98% 더 좋습니다. ppl을 보고
이유도 측정할 수 있습니다. 어휘 32,000은 임베딩(embedding)이 4,608,000으로 2배 많기 때문에, 1MB 미만을 달성하려면 동일시(identity)를 $\cos 0.90$까지 강화하는 것 외에는 방법이 없고, 32,000행은 9,078행(잔존 28.4%)까지 압축됩니다. 과도하게 압축할 때의 손실이 어휘가 크다는 이점을 상쇄합니다. 반대로 1.2MB 근처라면 32,000은 $\cos 0.985$ 정도의 온화한 동일시로 충분하여, 이점이 남습니다.
어휘 32,000을 재학습하는 것이 무의미했던 것은 아닙니다. 1.1MB 이상을 목표로 한다면 32,000이 정답입니다. 다만 표방하고 있는 1MB 미만(988,556 B) 영역에서는 32,000보다 16,000이 올바릅니다.
무엇을 잘못했는가
배율은 모델 내부의 지표입니다. 분모($fp32$)가 다른 모델을 넘나들 때, 분모의 차이가 이득으로 보입니다. -
대리 지표는 대리일 뿐입니다. 대표 행의 수는 동일시 비용을 나타내지 않으며, 배율은 실제 바이트를 나타내지 않습니다. 같은 함정에 두 번 빠졌습니다. -
조건을 맞추는 정도가 높아질수록 이득이 줄었습니다. 학습량 $\rightarrow$ 임계값 $\rightarrow$ 품질 $\rightarrow$ 분모 $\rightarrow$ 영역 순으로 맞춰나가면서, 마지막에 부호가 반전했습니다. -
처음에 크게 보였던 효과일수록, 맞추지 못한 항목이 많습니다. 1.40배는, 맞추지 못한 것이 4가지나 있는 상태의 수치였습니다.
마지막 줄을 5번 다시 쓰기 전에 멈출 방법은 현재로서는 찾지 못했습니다. 적어도 '이 비교에서 맞춰지지 않은 것은 무엇인가'를 표로 만들어 기사에 붙이는 정도밖에 생각해내지 못했습니다.
추가: 그 이후의 검증
이 글을 작성한 후, 어휘를 4,000과 8,000까지 늘리고, 어휘별로 계층적 비트 할당(hierarchical bit allocation)도 다시 선택하는 다른 검증을 진행했습니다. 조건이 다르므로, 위의 표의 수치는 대체하지 않았습니다.
- 어휘 16,000과 32,000의 유리함이 바뀌는 경계점은 약 1,223,000 B로 옮겨갔습니다. 위에서 언급한 '약 1,106,000 B'는 이 글을 작성했을 시점의 할당에서의 경계점입니다. 경계점은 할당하는 방식에 따라 움직입니다. - 1MB 근처에서 32,000보다 16,000이 유리하다는 방향성은 바뀌지 않습니다.
- 다만 어휘 8,000까지 포함하면, 학습 후에 양자화(quantization)하는 동일한 절차로 비교했을 때, 약 914,000~1,035,000 B 범위에서는 8,000이 가장 좋은 값이었습니다 (그보다 작으면 4,000).
위에서 표방했던 988,556 B는, 양자화를 염두에 두고 학습한 어휘 16,000의 모델(QAT)을, 이 글 이후에 만든 저장 형식(헤더 압축 및 배율의 6bit 격자)으로 채운 값입니다. bits/char는 3.2903입니다. 6bit 격자는 저장할 때만 적용한 것이지, 격자를 보면서 재학습한 것은 아닙니다.
이 연구 전체(무엇을 시도했고 무엇이 실패했는지. 총 11회 예정)는 note에 연재하고 있습니다 →
13MB의 AI를 1MB로 만든 기록
논의 (Discussion)

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn ML의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기