Project NEUROVERSE
목차

기초 이론 편 · 5부 AI 모델은 얼마나 크고, 어떻게 줄일까? — 5.2

양자화와 프루닝 — 모델을 작게 만드는 법

숫자를 덜 정밀하게 저장하거나(양자화), 덜 중요한 연결을 잘라내거나(프루닝), 작은 모델이 큰 모델을 따라 배우게(증류) 합니다.

앞 장에서 필요한 메모리는 가중치 개수 × 숫자 하나의 크기라고 했습니다. 그럼 줄이는 방법은 두 가지입니다. 숫자 하나를 작게 저장하거나, 숫자의 개수를 줄이거나.

가중치 16개예요. 흐린 막대가 원래 값, 진한 막대가 줄인 뒤의 값이에요. 두 슬라이더를 움직여보세요.

양자화: 숫자를 덜 정밀하게

사진을 생각해보세요. 원래 사진은 1600만 가지가 넘는 색을 쓰는데, 이걸 16가지 색만 쓰도록 바꾸면 파일은 훨씬 작아지고, 멀리서 보면 꽤 비슷해 보입니다. 가까이 보면 색이 계단처럼 뭉개지고요.

양자화(quantization) 가 이것입니다. 가중치 하나를 16비트로 저장하면 아주 세밀한 값을 표현할 수 있습니다. 이걸 4비트로 줄이면 표현할 수 있는 값이 16가지뿐이라, 각 가중치를 가장 가까운 값으로 반올림합니다.

위젯에서 비트 수를 줄여보면:

  • 8비트: 원래 값과 거의 차이가 없어요(평균 차이 0.002).
  • 4비트: 막대가 살짝 어긋나지만 대체로 비슷해요(0.025). 크기는 16비트의 4분의 1입니다.
  • 2비트 이하: 값이 크게 뭉개져요(2비트 0.136, 1비트 0.486). 이 정도면 모델이 제대로 작동하기 어렵습니다.

그래서 로컬에서 큰 모델을 돌릴 때는 4비트 전후가 많이 쓰입니다. 크기를 많이 줄이면서 품질 손해는 비교적 작은 지점이기 때문입니다.

프루닝: 덜 중요한 연결 잘라내기

프루닝(pruning) 은 가지치기라는 뜻입니다. 0에 가까운 가중치는 계산 결과에 영향을 별로 못 주니까, 아예 0으로 만들어서 없는 셈 치는 것입니다. 위젯에서 “잘라낼 비율”을 올려보면, 작은 것부터 사라집니다. 25%를 잘라도 차이는 작지만(0.019), 75%를 자르면 큰 값까지 잘려서 차이가 커져요(0.179).

어느 연결이 “덜 중요한지”를 고르는 방법은 여러 가지입니다. 값이 작은 것부터 자르는 게 가장 단순한 방법이고, 실제로 자르고 손실이 얼마나 변하는지 재보는 방법도 있습니다. 7xz.dev의 Lab이 바로 이런 실험(뉴런을 잘라보고 손실 변화를 재기)을 하는 곳입니다.

증류: 큰 모델이 작은 모델을 가르치기

증류(distillation) 는 방향이 다릅니다. 큰 모델을 줄이는 대신, 작은 모델을 새로 학습시키는데, 정답 대신 큰 모델의 답을 보고 따라 배우게 합니다. 큰 모델이 “다음 토큰은 김치찌개 38%, 뭐 27%…”처럼 내는 확률까지 따라 하게 하면, 정답 하나만 볼 때보다 더 많은 걸 배울 수 있습니다. 요즘 나오는 작은 모델 중에는 이렇게 큰 모델에게 배운 것들이 많습니다.

더 깊게 · 왜 4비트까지 줄여도 꽤 괜찮을까

가중치 하나하나는 결과에 아주 조금씩만 영향을 줍니다. 수천억 개가 함께 계산되니까, 각각에 생긴 작은 반올림 오차는 서로 상쇄되기도 합니다. 그래서 꽤 많이 줄여도 전체 결과는 크게 안 변하는 경우가 많습니다.

다만 모든 가중치가 똑같이 중요한 건 아닙니다. 아주 크거나 특별히 중요한 일부 값을 덜 줄이고 나머지를 많이 줄이는 방법들이 쓰입니다. 그리고 너무 줄이면(2비트 이하) 성능이 확 떨어지는 지점이 옵니다. 위젯의 1비트가 그 극단입니다.

정리

  • 양자화: 숫자 하나를 덜 정밀하게 저장합니다. 4비트 전후가 크기와 품질 사이에서 많이 쓰입니다.
  • 프루닝: 덜 중요한(보통 0에 가까운) 연결을 잘라냅니다.
  • 증류: 작은 모델이 큰 모델의 답을 따라 배우게 합니다.
  • 셋 다 “조금 덜 정확해지는 대신 훨씬 작고 빠르게” 만드는 방법입니다.

이 장을 복사합니다. ChatGPT나 Claude 같은 AI에 붙여넣고 그대로 보내면 AI가 다 읽었다고 답합니다. 그다음 궁금한 걸 물어보세요.