어휘를 두 배로 늘려도 의미는 1.39배에 불과하다
요약
소규모 언어 모델의 규모와 학습량을 변화시키며 임베딩 공간의 중복성을 측정했습니다. 어휘를 두 배로 늘려도 독립적인 의미는 1.39배 증가에 그치는 등, 단순한 크기 증가는 효율적이지 않음을 보여줍니다. 또한, 학습은 말을 분화시키는 것이 아니라 같은 역할을 하는 말들을 통합(수렴)하는 경향이 있음을 발견했습니다.
핵심 포인트
- 어휘를 두 배 늘려도 독립적인 의미는 1.39배 증가에 그친다.
- 학습 과정은 단어를 분화시키기보다 같은 기능을 가진 단어들을 통합한다.
- 모델 학습 초기 단계에서 임베딩 중복성을 측정하면 효용을 과소평가할 수 있다.
소규모 언어 모델을 직접 학습시키면서, 얼마나 작게 만들 수 있는지 3개월 동안 측정했습니다.
그 과정에서, 어휘(語彙)를 두 배로 늘려도 '독립적인 의미'의 수는 1.39배에 불과하다는 측정이 나왔습니다.
이 글은 방법론 설명이 아니라, 규모와 학습량을 변화시켰을 때 어떤 일이 일어났는지에 대한 측정 기록입니다.
실제 구현 내용은 별도의 글로 작성했습니다.
설정
직접 만든 소규모 언어 모델입니다. 노트북 PC의 CPU만으로 학습했습니다(GPU 없음).
| 아키텍처 | d_model=144 / 4층 / tied embeddings |
| 본체 | 959,760 파라미터 |
| 학습 데이터 | 청공문고・Wikipedia・코드 (약 42%) |
| 평가 | dev를 10만 토큰 단위로 나누어, 짝수 단위로 설정을 정하고 홀수 단위로 확인
|
평가를 두 개로 나눈 것은 100개가 넘는 조건을 시도했기 때문입니다. 같은 데이터를 보면서 계속 설정을 고르면,
그 데이터에만 강한 설정이 완성됩니다. 공개할 수치는 모두 홀수 쪽(40 배치)입니다.
측정한 것
임베딩 행을 코사인 유사도로 동일시하고, 대표 행으로 정리합니다 (cos ≥ 0.98인 최근접 이웃을 union-find).
이때 몇 개의 행이 사라지는지를 두 가지 축을 움직여 측정했습니다.
어휘: 16,000과 32,000 (본체는 고정하고 토크나이저만 교체) -
학습량: 같은 run의 도중 체크포인트
결과 1: 어휘를 두 배로 늘려도 대표 행은 1.385배에 그친다
| 어휘 16,000 | 어휘 32,000 |
|---|---|
| 임베딩 | 2,304,000 |
| ... | |
| 어휘가 2.00배 증가해도, 대표 행은 1.385배에 불과합니다. |
늘어난 어휘 중 상당수는 기존 의미의 중복이며, 임계값을 바꾸지 않고 같은 기준으로 기계적으로 회수되고 있습니다.
'어휘를 늘린다'는 조작이 실질적으로 무엇을 증가시키고 있는지를 보여주는 수치라고 생각합니다.
결과 2: 학습은 말을 분화시키는 것이 아니라 통합한다
여기는 예상과 달랐습니다.
학습 초기에는 임베딩이 초기값에서 벗어나지 않아, 행들끼리 비슷하게 남아 있습니다.
학습이 진행되면 분화하여, 동일시할 수 있는 행은 줄어들 것이라고 생각했습니다. 반대였습니다.
| 어휘 | 스텝 | 대표 행 | 축소율 |
|---|---|---|---|
| 16,000 | 12,000 | 12,240 | 23.5% |
| ... | |||
| 두 계열 모두 단조롭게 계속 감소하며, 끝에서도 아직 떨어지고 있습니다. |
학습은 같은 역할을 하는 말을 같은 방향으로 모읍니다. 수렴(convergence)이란 분화가 아니라 통합이었습니다.
실무상의 함의가 하나 있습니다. 학습이 끝나지 않은 모델에서 임베딩의 중복성을 측정하면, 효용을 과소평가합니다. 반대로, 충분히 학습된 모델일수록 압축할 수 있습니다.
교란 변수(confounding)를 분리하는 데도 사용되었습니다. 32,000 어휘는 6,000 스텝밖에 돌리지 않았지만,
16,000 어휘를 두 배인 12,000 스텝을 돌아도 축소율은 23.5%입니다.
학습량이 절반인데도 축소율이 2배 이상이므로, 어휘의 효과는 진짜이며 오히려 과소평가되고 있습니다.
방법론: 오차를 바이트로 환산하여 구현 전에 걸러내기
인코딩 방식을 생각해낼 때마다 구현하고 재학습까지 거치면, 한 안당 몇 시간이 걸립니다.
그래서 '양자화 오차를 1% 줄이려면 몇 바이트를 지불할 수 있는지'라는 시세를 실측해 두었고,
후보의 가능성을 그 시세와 비교하여 떨어내는 필터(篩)를 만들었습니다.
이번 6가지 지점(어휘도 학습량도 다름)에서, 이 시세를 하위 바이트 수로 나눈 계수가 갖춰졌습니다.
k = 0.001447 B / (하위 값 × 오차 1%) 변동폭 ±1%
어휘도 학습량도 다른 지점에서 2% 이내에 수렴했으므로, '시세는 하위 바이트 수에 비례한다'는 가정이
처음으로 실증된 형태입니다. 덕분에 교차 조건이 하나의 식으로 정리되었습니다.
이득% × 하위 값 ≥ 부대 데이터의 증가분 × 691.3
여기서 주의할 점이 하나 있습니다. 순수한 '인덱스 비트당 시세'로 계산하면,
배치(配備)에서 측정한 ppl 기준 시세의 1.9배 과대가 됩니다. 판정에는 후자를 사용해야 합니다.
전자로 계산하면 이기는 것처럼 보이는 안이, 실제로 적용하면 지게 됩니다.
실패한 예측: 2단계 VQ를 세 번 추적하다 중단하기까지
마지막으로 잘 되지 않았던 이야기를 적습니다. 이쪽이 더 도움이 될 수도 있습니다.
2단계 VQ(Residual VQ)는 1단계의 양자화 오차를 또 다른 코드북으로 추가로 양자화하는 방식입니다.
오차는 확실히 줄어들지만, 심볼 테이블(symbol table)이 2개 필요하게 됩니다.
첫 번째 측정(어휘 16,000개)에서는 dim16의 잔여 VQ가 순수하게 -0.85%로 마이너스였습니다.
하지만 심볼 테이블 용량은 행 수에 관계없이 일정하기 때문에, 규모가 커지면 희석되어 역전될 것이라고 예측하고, 어휘를 32,000개로 두 배 늘려 재측정했습니다.
| 단계 | 심볼 테이블 증가분 | 어휘 16,000개 | 어휘 32,000개 |
|---|---|---|
| dim8 256+256 | 6,144 B | +0.28% | +0.25% |
| ... |
규모의 이점은 심볼 테이블 증가분에 거의 비례했습니다.
희석되는 것은 심볼 테이블뿐이므로, 증가분이 작은 단계일수록 규모로부터 얻는 것이 없습니다.
가장 조건이 좋은 dim8은 16k→32k로 겨우 +221 B밖에 움직이지 않아, 파일 비율로는 오히려 하락했습니다.
그 이유도 측정할 수 있었습니다.
| 단계 | 이득 변화 (16k→32k) | 하위 값 변화 |
|---|---|
| dim8 | 0.74배 | 1.386배 |
| ... |
하위 값이 1.386배가 되어도, 이득이 0.74~0.85배로 줄어들기 때문에, 곱은 거의 늘어나지 않습니다.
'심볼 테이블이 일정하기 때문에 규모가 커지면 역전될 것이다'라는 추론은, 지불하는 측만 보고 있었습니다.
최상의 dim8에서 +0.25%. 이는 실행 간 변동성(용량 0.05%, ppl 0.17%)보다 크기 때문에 측정상으로는 유의미하지만, 형식 변경에 5파일 분의 수정과 검증 비용을 지불할 만큼은 아닙니다. 중단했습니다.
일반화하면 다음과 같습니다.
규모가 희석시키는 것은 부대 데이터(ancillary data)뿐이며, 인코딩 이득 자체는 규모와 함께 감소합니다.
'규모를 키우면 역전될 것이다'라고 말할 때는, 가치 측면도 규모와 함께 어떻게 변하는지를
함께 측정하지 않으면 판단을 그르칩니다. 저는 이것으로 3번 왕복했습니다.
요약
어휘가 2배가 되어도, 독립적인 의미는 1.39배에 불과하다. 임베딩의 중복성은 규모와 함께 증가한다. -
학습은 단어를 통합시킨다. 미수렴 모델로 측정하면 중복성을 과소평가하게 된다. -
오차를 바이트로 환산하는 필터는 유효하지만,
시장의 해석을 잘못하면 1.9배 과대 평가된다. -
규모가 희석시키는 것은 부대 데이터뿐이다. 이득 측면도 함께 측정하지 않으면, 규모 의존적 예측은 틀린다.
이 연구 전체(무엇을 시도했고 무엇이 실패했는지, 총 7회)는 note에 연재하고 있습니다 →
13MB의 AI를 1MB로 만든 기록
논의 (Discussion)

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