ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Paper Review] Effective Interplay Between Sparsity And Quantization: From Theory To Practice (ICLR 2025)
    Paper Review/Model Compression 2026. 3. 7. 15:40

    최근 딥러닝 모델들, 특히 대형 언어 모델(LLM)이나 비전 모델들의 크기가 기하급수적으로 커지고 있다. 이렇게 덩치가 큰 모델을 실제 서비스에 원활하게 사용하려면 연산량과 메모리 사용량을 줄이는 '경량화 및 압축' 기술이 필수적이다. 여기서 가장 대표적으로 사용하는 두 가지 강력한 무기가 바로 모델의 가중치 중 덜 중요한 것을 0으로 만들어버리는 Sparsity 기술과, 가중치를 표현하는 데이터의 비트 수(예: 32비트를 8비트 정수로)를 줄여버리는 양자화 기술이다. 이 두 가지 방법은 각각 독립적으로 사용했을 때 모델의 성능은 최대한 유지하면서도 메모리와 연산량을 획기적으로 줄여준다는 것이 수많은 연구를 통해 이미 증명되었다.

    그런데 여기서 아주 중요한 의문이 생긴다. "그럼 이 두가지 강력한 무기를 동시에 같이 쓰면 어떨까?"라는 의문이다. 그동안 많은 연구자들은 암묵적으로 이 두 기술이 서로 직교(Orthocognal)한다고, 즉 서로에게 간섭하지 않는다고 가정해 왔다. 다시 말해, Sparsity가 만드는 오차와 양자화가 만드는 오차 외에, 두 개를 같이 쓴다고 해서 추가적인 끔찍한 오류가 파생되지는 않을 거라 단순하게 믿었던 것이다.

    하지만 이 논문은 두 기법을 적용하는 '순서(Order)'가 엄청나게 중요하다는 사실을 증명해낸다. 만약 모델에 양자화를 먼저 적용하고, 그 다음에 Sparsity를 적용한다고 가정해보면, 양자화 과정에서 텐서 안의 값들이 압축되고 변형되면서, 원래는 아주 중요했던 요소들이 덜 중요한 것처럼 숫자의 상대적 크기가 훼손될 수 있다. 결국 그 뒤에 이어지는 Sparsity 알고리즘이 "어? 이 숫자는 작으니까 별로 안 중요한 값이네?"하고 핵심적인 가중치를 실수로 날려버리는 대참사가 일어날 수 있다. 또한, 설령 올바른 순서로 적용한다고 하더라도 두 기법이 합쳐지면서 얽히는 누적 오차가 모델의 정확도를 심각하게 떨어뜨릴 수 있다는 점을 꼬집고 있다.

    즉, 이 논문은 단순히 자원이 제한된 하드웨어 환경에서 모델의 배포 비용(Serving Cost)을 줄이기 위해 두 경령화 기법을 맹목적으로 섞어 쓰지 말라는 강력한 경고인 셈이다. 동시에 하드웨어 자원 효율성을 극대화하면서도 모델의 뼈대인 정확도를 잃지 않기 위해 이 두 가지 압축 기법을 어떻게 잘 조합해야 하는지 최적의 모범 답안을 제시한다.

    Introduction

    위에서 설명했 듯이 최근 딥러닝 모델들은 능력은 뛰어나나, 그 대가로 모델의 크기와 복잡도가 기하급수적으로 커져버렸다. 그리고 이를 해결하기 위한 2가지 기법인 Sparsity와 Quantization이 존재한다.

    Quantizatioin은 모델의 가중치를 32비트 소수점에서 16비트, 8비트, 심지어 그 이하의 블록 단위 정수형으로 깎아내면서도 성능을 유지하는 아주 훌륭한 방법이다. 그리고 또 다른 방법인 Sparsity, 즉 Pruning이다. 텐서 안에 있는 수많은 가중치 중에서 모델 정확도에 별로 영향을 주지 않는, 즉 크기(Magnitude)가 작은 값들을 아예 0으로 날려버리는 것이다. 이렇게 하면 메모리도 줄고 불필요한 연산도 건너뛸 수 있다.

    여기까지는 Model Compression 분야에 관심이 있다면 누구나 아는 상식일 것이다. 그런데 저자들은 여기서 "과연 이 두 가지 기법을 같이 사용하면 시너지가 날까?"라는 질문을 던진다. 기존의 수많은 연구자들이 암묵적으로 이 둘이 서로 '직교한다(Orthogonal)'고 믿어왔다. 직교한다는 건 수학적으로 서로 독립적이라는 의미이다. 즉, 양자화 때문에 생기는 오차와 Sparsity 때문에 생기는 오차가 서로 간섭하지 않고, 단순히 두 오차를 더한 것만큼만 성능이 떨어질 거라고 순진하게 생각했던 것이다.

    왜 다들 이런 착각을 했을까? 저자들은 과거의 연구들이 주로 CNN(합성곱 신경망)에 치중되어 있었기 때문이라고 지적한다. CNN은 활성화 함수(Activation)를 거친 값들 중에 튀는 값(Outlier)이 별로 없어서 양자화 오차에 아주 강한 편이다. 게다가 예전 연구들은 활성화 값은 내버려 두고 가중치(Weight)만 양자화하는 경우가 많았다. 그러다 보니 두 기법을 섞어 써도 운 좋게 에러가 크게 안 났던 것이고, 사람들은 여기서 둘은 섞어 써도 안전하다고 잘못된 결론을 내렸던 것이다.

    하지만 시대가 바뀌어 LLM 같은 거대 트랜스포머 모델이 등장하면서 상황이 완전히 달라졌다. 저자들은 이 논문을 통해 스파시티와 양자화가 결코 독립적이지 않으며, 섞어 썼을 때 끔찍한 연쇄 반응을 일으킬 수 있다는 것을 최초로 증명하겠다고 선언한다. 그 핵심 적인 이유는 바로 두 기법을 적용하는 순서(Order)값의 크기(Magnitude)의 관계 때문이다.

    만약 우리가 모델에 '양자화'를 먼저 적용하고, 그 다음에 '스파시티(가지치기)'를 적용한다고(Q-->S) 가정해 보자. 양자화는 연속적인 실숫값을 몇 개의 듬성듬성한 정수 구간(Bin)으로 우겨넣는 작업이다. 이 과정에서 원래는 미세하게 크기가 달랐던 중요한 가중치와 덜 중요한 가중치가 같은 값으로 뭉뜽그려지거나, 오히려 상대적인 크기가 뒤집혀버릴 수 있다. 이 상태에서 값의 크기를 기준으로 가지치기를 하는 스파시티 알고리즘이 들어오면 어떻게 될까? 원래는 모델에 꼭 필요했던 아주 중요한 가중치인데, 양자화 때문에 작아 보인다는 이유로 싹둑 잘려나가느느 대참사가 발생하는 것이다.

    반대로 대다수가 경험적으로 쓰는 방법인 '스파시티'를 먼저 하고 '양자화'를 나중에 하는 순서(S-->Q)는 어떨까? 저자들은 이 S-->Q 순서가 그나마 최적의 순서라는 것을 수학적으로 증명해 낸다. Sparsity로 안 쓴느 값들을 먼저 확실히 0으로 치워버린 다음, 살아남은 중요한 값들만 양자화를 하니깐 앞서 말한 대참사는 피할 수 있다. 하지만 저자들은 여기서 멈추지 않고, 아무리 최적의 순서(S-->Q)로 텐서를 압축하더라도 결국 두 기법이 내적(Dot-Product) 연산에서 만날 때 복합적인 추가 오차가 발생한다는 것을 수학적으로 계산해 냈다.

    결과적으로 이 논문은 아래 3가지를 보여준다.

    1. Sparsity와 Quantization은 Non-Orthogonal 관계라는 것을 수학적으로 증명해낸다.
    2. Sparsity를 먼저 하고 Quantization을 하는 것(S-->Q)이 무조건 옳다는 것을 증명하고, 잘못된 순서로 했을 때 오차가 얼마나 커지는지 수식으로 한계를 구함을 보여준다.
    3. LLaMA나 OPT 같은 최신 거대 언어 모델에 이 두 개를 최적의 순서로 같이 적용하더라도, 우리가 예상치 못했던 추가적인 오차 때문에 언어 모델의 성능 지표인 Perplexity가 최대 13%까지 나빠질 수 있다는 것을 실험으로 보여준다.

    Related Work

    먼저 논문 흐름대로 관련 연구들을 정리하고 넘어간다.

    가장 먼저 짚고 넘어가는 건 Quantization이다. 모델이 갈수록 거대해지니 메모리 사용량을 줄이고 연산 효율을 높이기 위해 데이터를 좁은 수치 형식으로 압축하는 연구들이 폭발적으로 늘어났다. 저자들은 양자화 기법을 데이터를 표현하는 '스케일링 팩터(Scaling Factor)'를 어떤 단위로 묶어서 적용하느냐에 따라 두 가지로 분류했다. 첫 번째는 FP32나 BFloat16처럼 개별 데이터 하나 하나가 부호, 가수, 지수를 갖는 '엘리멘트 단위(Element-wise) 스케일링' 방식이다. 두 번째는 여러 개의 값을 하나의 그룹으로 묶어서 스케일링 팩터를 공유하는 '블록 단위(Block-wise)' 스케일링 방식이다. 예를 들어 우리가 흔히 아는 INT8 양자화는 텐서 전체나 큰 볼록 단위로 스케일링을 공유한다. 최근 연구와 최신 하드웨어(예를 들어 NVIDIA의 차세대 Blackwell GPU가 지원하는 MXFP 포맷) 트렌드를 보면, 100개 이하의 아주 작은 요소들만 미세하게 묶어서 스케일링을 적용하는 방식이 8비트 미만의 극한의 양자화 환경에서도 성능을 아주 잘 유지한다는걸 강조하고 있다.

    그 다음으로는 Sparsity이다. 즉 Prunning이다. Sparsity는 텐서 안에 있는 요소들 중 덜 중요한 것들을 골라내어 아예 제거해 버리는 기술이다. 여기서도 크게 두 갈래로 나뉜다. 아무런 규칙 없이 중요도가 낮은 값을 무작위로 날려버리는 '비구조적(Unstructured) Sparsity'와 하드웨어에서 연산하기 좋게 특정 패턴(예: N:M Sparsity)을 가지고 가지치기를 하는 Structured Sparsity가 있다. 가지치기를 할 때 "어떤 값을 버릴 것인가?"를 결정하는 기준으로는 값의 절대적인 크기를 보는 크기 기반(Magnitude-based) 방식이 가장 널리 사용된다. 최근에는 재학습(Fine-Tuning) 과정 없이 한 번에 가지치기를 끝내버리는 원샷(One-Shot) 방식인 Sparse GPT나 Wanda 같은 기술들도 등장했지만, 저자들은 여전히 가지치기 이후에 미세하게 재학습을 거치는 것이 모델의 정확도 회복에 훨씬 더 큰 도움이 된다는 점을 짚어주고 있다.

    마지막으로 Sparsity와 Quantization의 결합(Combining sparsity and quantization) 부분이다. 과거의 수많은 연구자들도 이 두 기술을 같이 써보려는 시도를 했다. 어떤 사람들은 Sparsity를 먼저 하고 Quantization을 했고, 어떤 사람들은 Quantization을 먼저 하고 Sparsity를 했다. 그런데 저자들은 과거 연구들을 훑고 나니 아주 Ciritical한 정보 2가지가 빠져있던 것이다.

    첫 번째는 두 기법을 적용하는 '최적의 순서'에 대한 학계의 명확한 합의(Consensus)가 없었다는 점이다. 그저 이것저것 실험해 보고 좋은 걸 쓰거나, 아니면 두 기법이 전혀 서로 간섭하지 않는 독립적인(Orthogonal) 기술이라고 제멋대로 가정해 버린 것이다.

    두 번째는 가지치기로 인해 발생하는 에러와 양자화로 인해 발생하는 에러가 서로 어떻게 얽히고 설켜서 최종적으로 모델의 성능을 갉아먹는지에 대한 '수학적인 이해'가 전혀 없었다는 점이다.

    저자들인 이 두 가지 빈큼을 파고들어 최적의 순서에 대한 합의와, 가지치기와 양자화를 합쳤을 때 발생하는 에러에 대해 수학적으로 증명해낸다.

    Non-Orthogonalof Sparsity and Quantization

    저자들은 이 두 가지 압축 기술(Sparsity, Quantization)을 결합하는 과정을 '수학적 합성(Mathematical composition)이라고 부르며, 두 가지 관점에서 분석을 한다.

    첫 번째 관점은 '텐서 레벨(Tensor Level)'이다. 이건 가중치나 활성화 값들이 담겨 있는 텐서라는 그릇 자체가 두 압축 기술을 거치며 어떻게 변형되는지를 들여다 보는 것이다.

    두 번째 관점은 '내적 레벨(Dot-product Level)이다. 실제로 신경망이 순전파(Forward Pass)를 할 때 가중치와 활성화 값을 서로 곱하고 더하는 내적 연산을 수행하게 되는데, 이 계산 결과가 두 기법의 짬뽕으로 인해 어떻게 틀어지고 오차가 커지는지를 살펴보는 것이다.

    본격적으로 분석을 전개하기 전에, Quantization과 Sparsity를 수학적으로 아주 엄밀하게 정의한다.

    먼저 Quantization에 대한 정의를 살펴보자.
    여기서는 실제 하드웨어와 현업에서 아주 널리 사용하고 있는 '최댓값 스케일 기반의 블록 단위 양자화(Max-Scaled block-wise quantization) 방식을 채택했다. 이 방식은 텐서 안의 숫자들을 일정한 크기의 블록으로 묶은 다음, 그 블록 안에서 절댓값이 가장 큰 ' 대장' 숫자를 찾는 것으로 시작한다. 이 대장의 크기가 바로 전체 블록의 숫자들을 압축할 기준점, 즉 '스케일링 팩터(Scaling factor)'가 되는 것이다. 예를 들어 정수형(INT) 양자화를 한다고 치면, 블록 내의 모든 숫자들을 이 스케일링 팩터를 이용해 나눈 뒤, 가장 가까운 정수로 반올림하여 비트 수를 줄여버리는 식이다.
    $$x_i \xrightarrow{q} Q_m(x_i, scale)$$

    $$scale = \max(|x_1|, ..., |x_n|)$$

    $$s = \frac{scale}{2^{m-1} - 1}$$

    그 다음은 Sparsity이다.
    여기서는 가장 대중적이고 효과적인 '크기 기반(Magnitude-based Sparsity)'를 기준으로 삼고 있다. 방식은 아주 직관적이다. 텐서 안의 값들 중에서 절댓값이 가장 작은 녀석들, 다시 말해 모델의 최종 결과에 미치는 영향력이 가장 떨어지는 값들을 골라내서 가차 없이 0으로 만들어 버리는 것이다. 논문에서는 이것을 최근 GPU에서 많이 쓰이는 N:M 구조적 Sparsity는 물론이고, 전체에서 일정 비율을 날려버리는 일반적인 비구조적 Sparsity 모두에 적용할 수 있도록 일반화된 수식으로 깔끔하게 정의해 두었다.

    $$\tilde{x}_i := \begin{cases} 0 & \text{if } |x_i| < \xi \ x_i & \text{otherwise} \end{cases} \quad \text{for } i = 1, 2, ..., M$$

    $$N = \left\lfloor M \cdot \frac{p}{100} \right\rceil$$

    이제 이 두 가지 변환 함수를 적용하는 순서를 바꿔가며 수학적으로 합성을 해본다. 텐서에 양자화를 먼저 입히고 Sparsity를 씌우는 것과, Sparsity를 먼저 하고 양자화를 입히는 것이 텐서 레벨에서 어떤 치명적인 차이를 만들어내는지, 그리고 궁극적으로 두 변환이 만났을 때 내적 연산에 어떤 오차를 일으키는지 증명해 나가는 것이다.

    Tensor-Level Analysis

    먼저 저자들은 Transformation Error(변환 오차)을 통해 압축 과정에서 발생하는 '오차'라는 것을 수학적으로 아주 깔끔하게 세팅한다. 어떤 텐서 블록 x가 있을 때 여기에 압축 변환 함수 $f$를 적용한 결과를 $f(x)$라고 해보자. 이때 발생하는 변환 오차 $\epsilon_f(x)$는 단순히 원본 데이터에서 변환된 데이터를 뺀 값, 즉 $\epsilon_f(x) := x- f(x)$로 정의된다. 논문에서는 이 블록 단위의 오차들을 전부 더하면 결국 텐서 전체의 오차가 되기 때문에, 앞으로 블록 단위에서 증명할 정리들이 텐서 전체에도 똑같이 적용된다고 한다.

    Definition 3.4 Tensor-level orthogonality
    기존 연구자들이 Sparsity와 Quantization은 직교한다고 막연히 믿어왔던 것을 수학적인 부등식으로 엄밀하게 묶어 버린 것이다. 두 개의 압축 변환 $f$와 $g$가 서로 직교한다는 것은, 이 둘을 어떤 순서로 합성해서 적용하든 간에 각 기법이 원래 가지고 있던 오차의 합보다 더 큰 '추가적인 찌꺼기 오차'가 발생하지 않아야 한다는 의미이다. 이를 수식으로 표현하면 다음과 같다.
    $$|\epsilon_{g \circ f}(x)| \le |\epsilon_f(x)| + |\epsilon_g(x)| \quad \text{and} \quad |\epsilon_{f \circ g}(x)| \le |\epsilon_f(x)| + |\epsilon_g(x)|$$

    여기서 함수 합성 기호인 $\circ$를 주의 깊게 봐야 한다. $g \circ f$는 $f$를 먼저 적용하고 그 다음에 $g$를 적용한다는 의미이다. 즉, 순서를 어떻게 뒤집든 간에 결합된 총 오차가 각각의 오차($|\epsilon_f|$, $|\epsilon_g|$)를 단순 합산한 것보다 작거나 같아야만 두 기술이 '직교한다'고 부를 수 있다는 엄격한 기준을 세운 셈이다.

    이제 이 기준에 Sparsity와 Quantization을 올려보자.

    Theorem 3.5
    $$\forall x \in \mathbb{R}^n, |\epsilon_{q \circ s}(x)| \le |\epsilon_q(x)| + |\epsilon_s(x)|$$

    이 수식이 의미하는 방법은 다음과 같다.
    즉, Sparsity를 먼저 적용한 뒤 양자화를 적용($q \circ s$)했을 때 발생하는 총 오차가, 각각을 따로 적용했을 때의 오차 합을 절대 넘지 않는다는 것이다. 왜 그럴까? 우리가 앞에서 양자화의 scale은 블록 내에서 절댓값이 가장 큰 '대장' 요소로 결정된다고 배웠다. 그런데 크기 기반 Sparsity는 절댓값이 가장 '작은' 떨거지들만 0으로 날려버릴 뿐, 가장 큰 대장 요소는 절대 건드리지 않는다. 대장 요소가 살아남았으니 양자화의 기준점인 scale이 변하지 않고, 따라서 살아남은 요소들이 양자화될 때 겪는 오차 역시 Sparsity 적용 전과 완벽하게 똑같이 유지되는 것이다. 그래서 추가 오차가 생기지 않는 것이다.

    하지만 비극은 순서를 뒤집었을 때 시작된다.
    아래 정리 3.6은 양자화를 먼저 하고 Sparsity를 나중에하는 순서가 얼마나 위험한지를 수학적으로 보여준다.

    Theorem 3.6
    $$\exists x \in \mathbb{R}^n, |\epsilon_{s \circ q}(x)| > |\epsilon_q(x)| + |\epsilon_s(x)|$$

    위 식에서 볼 수 있듯이 부등호 방향이 반대로 뒤집혀서, 총 오차가 각각의 오차의 합보다 커지는 텐서 $x$가 반드시 존재한다는 것을 증명한 것이다. 양자화를 먼저 해버리면 미세하게 달랐던 값들이 같은 정수 칸에 뭉뚱그려지면서 값의 상대적인 서열이 망가져 버린다. 그 엉망진창이 된 서열을 보고 Sparsity가 가지치기를 해버리니, 원래는 남겨야 할 중요한 값을 쳐내버리거나 버려야할 값을 살려두는 대참사가 발생하면서 예상치 못한 '추가 오차'가 폭발해버리는 것이다.

    Theorem 3.7
    $$\forall x \in \mathbb{R}^n, |\epsilon_{s \circ q}(x)|_1 \le |\epsilon_q(x)|_1 + |\epsilon_s(x)|_1 + 2 \cdot step \cdot \frac{M - N}{M} \cdot n$$

    정리 3.7은 최악의 경우 추가 오차가 얼마나 커지는가?를 수식으로 계산해낸다.
    위 수식을 보면, 앞의 두 항은 원래 각자가 가진 오차의 합이고, 뒤에 붙은 $2 \cdot step \cdot \frac{M - N}{M} \cdot n$이라는 꼬리표가 바로 순서를 잘못 맞춰서 생기는 '추가 오차(Additional error)'의 최댓값(Upper bound)이다. 여기서 $\text{step}$은 양자화 1칸의 오차 크기이고, $frac{M-N}{M}$은 우리가 텐서에서 날려버린 가지치기 비율, 그리고 $n$은 블록의 크기이다.

    이 수식을 분석해보면, 우리가 겪게될 최악의 패널티가 입력 데이터가 무엇이냐에 따라 들쭉날쭉 변하는 것이 아니라, 우리가 설정한 양자화 비트 수나 Sparsity 비율과 같은 '설정값'에 의해서만 결정되는 상수 형태로 딱 떨어진다.

    즉, 저자들은 Sparsity와 Quantization은 Tensor level에서 Non-Orthogonal하고, 추가 오차를 발생시키지 않는 유일하고 완벽한 압축 순서는 Sparsity 먼저, Quantization 나중에 하는 순서뿐이라는 것을 증명해 냈다.

    Dot-Product-Level Analysis

    신경망에서 Forward Pass를 할 때 가장 많이 하는 연산이 바로 활성화 값($x$)과 가중치($w$)를 곱하는 내적 연산이다.
    보통 모델을 압축할 때 가중치에는 Sparsity와 Quantization을 둘 다 적용하지만, 활성화 값에는 양자화만 적용하는 경우가 많다. 이 조건 하에 수식 전개를 확인해 보자.

    내적 오차와 직교성의 새로운 정의

    먼저 내적 과정에서 발생하는 오차를 수학적으로 정의해보자.
    정의 3.8을 보면, 어떤 변환 함수 $f$가 있을 때 내적 오차 $\epsilon_f^D(x,w)$는 원본 $x$와 $w$를 곱한 진짜 정답에서 압축된 $x$와 압축된 $w$를 곱한 값을 뺸 것으로 정의한다.

    $$\epsilon_f^D(x, w) := \langle x,w \rangle - \langle f(x),f(w) \rangle$$

    만약 $x$에는 $f$(양자화)를 적용하고 $w$에는 $g$(다른 압축)를 적용했다면, 그 오차는 $\epsilon_{f,g}^D(x, w)$로 표기한다.

    이어서 Definition 3.9에서는 내적 레벨에서의 '직교성(Orthogonality)'을 정의한다. 텐서 레벨에서 했던 것과 맥락은 같다. 두 압축 기법을 섞어 썼을 때 발생하는 총 내적 오차가, 각각을 따로 적용했을 때 발생하는 내적 오차의 단순 합보다 작거나 같아야만 두 기법이 '직교한다'고 인정해 주겠다는 것이다.

    내적 레벨에서는 안전한 순서 조차 없다.

    앞서 텐서 레벨에서는 "가지치기를 먼저 하고 양자화를 나중에 하는 순서라면 추가 오차가 발생하지 않는다"라는 결론을 내렸다. 하지만 아래 정리가 앞선 결론을 깨버린다.

    $$\exists x,w \in \mathbb{R}^n, |\epsilon_{q,c}^D(x,w)| > |\epsilon_{I,s}^D(x,w)| + |\epsilon_q^D(x,w)|$$

    이 수식을 보면, 활성화 값($x$)에는 양자화($q$)를 하고, 가중치($w$)에는 Sparsity와 quantization의 합성($c$)을 적용한 내적 오차 ($|\epsilon_{q,c}^D|$)가, 단순히 Sparsity만 했을 때의 오차와 양자화만 했을 때의 오차를 더한 것보다 무조건 커지는 경우가 존재한다는 것을 증명한 것이다. 즉, **내적 레벨로 넘어오면 $ S \rightarrow Q$의 완벽한 순서로 압축하더라도 Sparsity와 Quantization는 절대 직교하지 않으며(Non-Orthogonal), 필연적으로 추가 오차를 뿜어낸다는 충격적인 선언이다.

    그렇다면 그 추가 오차의 정체는 무엇일까? 저자들은 이 추가 오차의 한계(Upper Bound)를 다음 수식으로 완벽하게 분해 해냈다.

    $$|\epsilon_{q,c}^D(x, w)| \le |\epsilon_{I,s}^D(x,w)| + |\epsilon_q^D(x,w)| + \underbrace{|\langle q(x), \tilde{\epsilon}c(w) \rangle|}{\epsilon_t} + \underbrace{|\langle \epsilon_q(x), \epsilon_s(w) \rangle|}_{\epsilon_i}$$

    여기서 우변의 첫 두항은 원래 각각 발생하는 기본 오차들이고, 뒤에 붙은 $\epsilon_t$와 $\epsilon_i$가 바로 두 압축 기술이 만나면서 비벼져서 생기는 '추가 오차(Additional error)' 덩어리들이다.

    • $\epsilon_t$ (전이 오차)
      이 항은 텐서 레벨에서 발생한 오차가 내적 레벨로 '전이(transfer)'되면서 생기는 오차이다 $q(x)$(양자화된 활성화 값) $\tilde{\epsilon}_c(w)$(가중치의 합성 교정 오차)가 내적되면서, 발생한다. 만약 우리가 최악의 순서인 $Q \rightarrow S$로 압축했다면, 아까 말했듯 중요한 가중치가 잘못 날아가버리게 되기 때문에 $\tiled{\epsilon}_c(w)$ 값이 엄청나게 커져서 $\epsilon_t$가 폭발하게 된다. 그나마 최적의 순서인 $ S \rightarrow Q$로 압축하면, 가지치기 된 녀석들의 양자화 오차 정도만 남기 때문에 이 값을 훨씬 작게 억누를 수는 있다.

    • $\epsilon_i$ (상호작용 오차)
      이 항은 활성화 값의 양자화 오차 $\epsilon_q(x)$의 가중치의 Sparsity 오차 $\epsilon_s(w)$가 직접 곱해지며 생기는(Interaction) 오차이다. 다만 오차 벡터끼리의 곱이므로 그 크기가 $\epsilon_t$보다는 상대작으로 작다.

    지금까지 수식으로 '둘을 섞어 쓰면 원래 오차의 합보다 더 큰 오차가 난다'고 증명했다. 이제 논문의 저자들은 이것을 실제 LLM(LlaMa나 OPT) 모델 실험으로 보여주기 위해 정의 3.11(Orthogonality Threshold, 직교성 임계값)을 도입한다.

    $$\text{Orthogonality Threshold} = E_M(M) + Err_Q(M) + Err_S(M)$$

    여기서 $E_M(M)$은 원본 모델의 성능(예: Perplexity) $Err_Q$는 양자화만 했을 때 나빠진 성능 수치, $Err_s$는 Sparsity만 했을 때 나빠진 성능 수치를 의미힌다. 이 셋을 단순히 더한 값이 바로 '직교성 임계값'이다.

    만약 과거 연구자들의 생각 처럼 두 기술이 직굘ㄹ 한다면, 두 개를 동시에 적용한 모델의 최종 Perplexity는 딱 저 임계값 만큼만 나와야한다. 하지만 저자들의 수학적 증명이 맞다면 두 기법의 상호작용으로 인한 추가 오차($\epsilon_t, \epsilon_i$) 때문에, 실제 모델의 Perplexity는 저 임계값을 훌쩍 넘어버리는 결과가 나올 수 밖에 없다.

    Experimentental Methodology And Results

    연구진들은 이 실험을 위해 언어 모델의 대표 주자인 OPT와 LLaMa 모델 제품군(125M부터 8B 파라미터까지)은 물론, 비전 분야의 핵심인 ViT와 ResNet까지 아주 광범위하게 도마 위에 올린다. 이 모델들이 가진 수많은 파라미터 중 약 99%를 차지하는 모든 선형(Linear) 계층과 합성곱(Convolution)계층에 압축을 가했다. 실험 세팅은 아주 현실적이다. 가중치(Weight)에서 Sparsity를 적용하고, 내적 연산 직전에 가중치와 활성화 값(Activation) 양쪽 모두에 양자호를 씌우는 방식을 택했다. 양자화 기법으로는 INT8을 비롯해 최신 하드웨어에서 주목받는 MXFP8/6, HBFP8/6 같은 블록 단위 스케일링 포맷들을 다양하게 사용했고, Sparsity 기법으로는 크기 기반의 50% 비구조적(Unstructured) 가지치기와 2:4 구조적(Structured) 가지치ㅏ기를 적용한 뒤 미세 조정(Fine-Tuning)을 거쳤다.

    첫 번째로 증명하고자 한 것은 바로 압축 순서의 중요성이다. 앞서 텐서 레벨 분석을 통해 Sparsity --> Quantization 순서가 덜 망가지는 안전한 길이라는 수학적 결론을 실험한 것이다.

    실험 결과는 수학적 예측과 일치했다. 모든 수치 형식과 Sparsity 유형에 걸쳐 S-->Q 순서가 Q-->S 보다 Perplexity가 일관되게 훨씬 낮고 훌륭하게 측정되었다. 양자화를 먼저 해버리면 미세한 값들의 상대적인 크기 순서가 뭉개져 버리고, 그 뭉개진 상태에서 크기 기반 Sparsity가 꼭 살려둬야 할 중요한 가중치를 멍청하게 날려버리는 대참사가 실제 실험 데이터로 완벽하게 입증된 셈이다

    두 번째는 Sparsity와 Quantization의 Non-orthogonality 증명이다. 앞서 연구진은 원본 모델의 에러에 'Sparsity만 했을 때의 추가 에러'와 'Quantization만 했을 때의 추가 에러'를 단순 합산하여 '직교성 임계값(Orthogonality threshold)'이라는 기준선을 만들었다.

    만약 과거의 믿음이 맞다면, 즉 두 기술이 직교한다면, 두 개를 동시에 적용한 모델의 최종 에러는 이 임계값을 넘지 않아야 한다. 하지만 OPT와 LLaMA 모델을 대상으로 한 실험 결과를 보면, 대다수의 설정에서 모델의 실제 Perplexity가 이 직교성 임계값을 훌쩍 뛰어넘어버렸다. 최적의 순서인 S --> Q로 조심스럽게 결합했음에도 불구하고, 두 기법이 내적 연산에서 만나 발생하는 수학적 상호작용 오차가 모델의 성능을 추가로 갉아먹는다는 사실이 적나라하게 드러난 것이다.

    물론 모델의 크기가 클수록, 그리고 압축 포맷이 정밀할수록(예: MXFP8)이 추가 오차를 견뎌내는 맷집이 좋긴 하지만, 본질적으로 두 기법은 결코 직교하지 않는다는 것이 명백해졌다. 흥미롭게도 ViT 같은 비전 모델은 초반엔 이 두 기법을 섞어 써도 임계값을 크게 넘지 않는 것처럼 보인다. 텍스트보다 이미지 데이터가 압축 에러에 더 강하기 때문이다. 하지만 연구진이 포기하지 않고 75% Sparsity나 4-bit 양자화처럼 압축 강도를 극한으로 끌어올리자, 결국 비전 모델에서도 이 숨어있던 비직교성의 끔찍한 추가 오차가 터져 나오며 정확도가 곤두박질치는 것을 확인했다.

    마지막으로 Ablation에서는 이 오차가 신경망의 계층(Layer)을 통과하며 어떻게 전파되는지를 현미경처럼 들여다 보았다. OPT-125M 모델의 중간 계층 출력을 뜯어보니, 초반 계층에서 발생한 미세한 압축 오차가 사라지기는커녕 깊은 계층으로 갈수록 눈덩이처럼 불어나며 누적된다는 것을 확인했다.

    하지만 여기서 재미있는 점은 S-->Q 순서로 압축했을 때가 Q-->S 순서로 압축했을 때보다 모든 중간 계층에서 오차 누적량이 눈에 띄게 적었다는 것이다. 양자화를 먼저 하는 잘못된 선택이 신경망 깊숙한 곳까지 얼마나 치명적인 독을 퍼뜨리는지 시각적으로 완벽하게 보여준 결과라고 할 수 있다.

    Discussion & Conclusion

    Discussion에서는 실제 현업(Practitioners)에 던지는 두 가지 핵심적인 통찰을 강조하고 있다.
    첫 번째 통찰은, 거대 언어 모델(LLM)의 메모리 사용량과 대역폭 요구량을 줄이기 위해 양자화와 스파시티를 써야만 하는 현 상황에서, 이 둘의 '순서'만 올바르게 맞춰도 성능 저하 위험 없이 모델의 정확도나 퍼플렉시티를 개선할 수 잇는 완벽히 안전한 방법을 수학적, 실험적으로 증명해 냈다는 점이다.

    두 번째 통찰은 우리가 앞서 정의했던 직교성 임계값(Orthogonality threshold)이 모델의 최종 성능을 꽤 정확하게 예측하는 지표로 쓰일 수 있다는 점이다. 수많은 압축 조합을 일일이 다 학습시켜 보지 않더라도, 이 임계값을 계산해 보면 최적의 압축 설정을 찾는 탐색 범위를 획기적으로 줄일 수 있다는 아주 실용적인 조언을 던져주고 있다.

    연구진은 성능과 하드웨어 이점 사이의 필연적인 Tradeoff에 대해서도 현실적인 가이드라인을 제시한다. 예를 들어 모델에 50%의 Sparsity를 먹이고 8비트나 6비트 양자화를 적용하면 메모리 발자국과 대역폭 요구량이 무려 8배에서 10.7배까지 획기적으로 줄어들게 된다. 일반적으로 8비트 최댓값 스케일 기반 양자화는 어떤 Sparsity 기법과 섞더라도 최적의 순서만 지킨다면 기존 FP32 모델을 완벽하게 대체할 수 있다고 권장한다. 물론 8비트 미만의 가혹한 양자화와 구조적 Sparsity를 섞으면 최적의 순서를 지켜도 모델이 민감하게 반응할 수 있지만, 엣지 디바이스 처럼 메모리 공간이 부족하고 연산 밀도가 중요한 환경이라면 약간의 성능 손실을 감수하고서라도 충분히 써볼 만한 조합이라고 덧붙이고 있다.
    (이 논문에서는 각 계층이나 텐서마다 압축률을 다르게 가져가는 Heterogeneous 압축 방식은 다루지 않았다. 성능 유지에는 좋겠지만 일반적인 GPU나 TPU 같은 상용 하드웨어에서는 오버헤드가 크고 구현이 비현실적이라서 훗날의 연구 과제로 남겨두었다.)

    연구진은 DNN에서 Sparsity와 Quantization이 어떻게 상호작용하는지 포괄적인 분석을 제공했고, 가지치기를 먼저 하고 양자화를 나중에 하는 순서가 추가 오차를 최소화하고 더 나은 모델 정확도를 산출하는 유일한 길임을 명백히 밝혔다. 무엇보다 수학적 분석과 OPT, LLaMA, ViT, ResNet을 아우르는 방대한 실험을 통해, 두 압축 기술이 결코 직교적(Orthogonal)이지 않으며 맹목적으로 결합해 쓸 경우 모델의 정확도에 치명적인 악영향을 미칠 수 있음을 알렸다. 결국 이 논문은 우리가 덩치 큰 모델을 압축할 때 정확도를 보존하면서도 하드웨어 효율을 최적화하려면 어떻게 해야 하는지에 대한 나침반이 되어준 셈이다.

Designed by Tistory.