[Paper Review] Pruning vs Quantization: Which is better?
[Background]
- 가지치기(Pruning) -
신경망의 가중치나 뉴런을 제거하여 모델을 경량화하는 기술이다. 불필요한 가중치를 제거하면 모델의 연산량과 메모리 사용량을 줄일 수 있어 추론 속도를 향상하고 하드웨어 자원 사용을 최적화할 수 있다.
종류
- Unstructured Pruning(비구조적 가지치기)
개별적인 가중치 단위로 제거하는 방법. 높은 압축률을 달성할 수 있지만 가중치가 불규칙하게 제거되므로 하드웨어에서 병렬 연산을 최적화하기 어렵다. - Structured Pruning(구조적 가지치기)
뉴런, 필터, 채널, 레이어 단위로 제거하는 방법. 하드웨어 최적화에 유리하여 실제 모델 경량화에 더 많이 사용된다. - Semi-structured Pruning(반구조적 가지치기)
가중치를 일정한 패턴으로 제거하는 방법. 하드웨어 가속기에서 병렬 처리가 가능하도록 최적화한다.
하지만 너무 많은 가중치를 제거하면 모델 성능이 크게 감소할 수 있다. 또한 Pruning을 적용하면 제거된 가중치를 다시 사용할 수 없도록 하는 Mask가 필요한데 이 Mask를 저장하는 데 추가적인 메모리 오버헤드가 발생할 수 있다.
- 양자화(Quantization) -
신경망에서 사용되는 부동소수점(FP32 또는 FP16) 연산을 정수(INT8, INT4) 연산으로 변환하여 모델의 크기를 줄이고 연산 속도를 향상시키는 기술이다. 양자화는 딥러닝 모델을 경량화하는 가장 일반적인 방법 중 하나이며 하드웨어에서 최적화하기에도 용이하다.
종류
- 적용 방식에 따른 분류
- Post-Traning Quantization(PTQ, 학습 후 양자화)
훈련된 모델을 양자화하는 방식으로 추가적인 학습없이 가중치와 연산을 저비트로 변환한다. - Quantization-Aware Traing(QAT, 양자화 인식 학습)
양자화를 고려하여 모델을 처음부터 훈련하는 방식. PTQ보다 성능 저하가 적지만 추가적인 학습 비용이 발생한다.
- Post-Traning Quantization(PTQ, 학습 후 양자화)
- 데이터 표현 방식에 따른 분류
- Integer Quantization(정수 양자화)
가중치와 활성화를 정수값으로 변환하여 계산 속도를 향상 - Symmetric Quantization(대칭 양자화)
가중치와 활성화 값이 대칭적인 범위에서 동일한 스케일을 사용하여 변환한다. - Asymmetric Quantization(비대칭 양자화)
가중치와 활성화 값의 범위가 다를 경우, 별도의 오프셋을 적용하여 변환한다. - Low-bit Quantization(저비트 양자화)
FP32 -> INT8, INT4, INT2로 변환하여 메모리 사용량을 대폭 줄인다. - Mixed Precision Quantization(혼합 정밀도 양자화)
가중치와 활성화 값의 일부는 INT8, 일부는 INT4로 변환하여 정확도와 성능의 균형을 맞춘다. 예를 들어, 중요한 층은 FP16을 유지하고 덜 중요한 층은 INT8을 사용할 수 있다.
- Integer Quantization(정수 양자화)
하지만 낮은 비트로 변환할수록 정보 손실이 발생하여 정확도가 감소할 수 있고 일부 하드웨어는 대칭적 양자화만 지원하여 비대칭 양자화 모델을 실행하기 어려울 수 있다. 또한 모델이 양자화에 적합하게 훈련되지 않았을 경우, 양자화 후 성능이 크게 저하될 수 있다.
- 연구 배경 -
최근 딥러닝의 발전으로 컴퓨터 비전, 기계 번역, 음성 인식 등에서 인간 수준의 성능을 초과하는 성과가 나오고 있다. 하지만 이 딥러닝 모델의 실제 응용에서는 효율성이 매우 중요하다. 모바일 및 클라우드 플랫폼에서 모델의 지연 시간 감소 및 효율성 향상을 위해 모델 압축을 수행하는 것이 필수적이다.
본 논문에서는 딥러닝 모델 압축에서 일반적으로 사용되는 Pruning과 Quantization을 비교한다.
[Summary]
[Comparison on statistical distributions]
본 논문에서는 실험을 진행하기에 앞서 실험을 위한 가정을 다음과 같이 세웠다.
- FP16을 기본 데이터 타입으로 가정
FP16은 추론 과정에서 일반적으로 사용되며 대부분의 딥러닝 모델은 FP16을 사용해도 정확도 손실이 크지 않다. 따라서 모든 비교 실험에서 FP16을 기준으로 Pruning과 Quantization 성능을 측정한다. - Pruning과 Quantization 비교 기준
50% sparsity pruning은 INT8 quantization과 비교.
75% sparsity pruning은 INT4 quantization과 비교.
동일한 압축 비율에서 Pruning과 Quantization의 성능을 비교한다. - Pruning 방법으로는 Magnitude Pruning을 사용
Magnitude Pruning : 값이 작은 가중치를 제거하는 방식
기존 연구들에서 Magnitude Pruning이 다른 Pruning 기법들보다 성능이 안정적이라는 점을 확인했으며 이 연구에서도 해당 방법을 사용하여 실험하였다.
Pruning은 특정 가중치를 0으로 만드는 방식이므로 모델을 저장할 때 0인 가중치를 무시하는 masking 기법을 사용해야 하지만 본 연구에서는 mask 저장으로 인한 추가적인 메모리 오버헤드는 고려하지 않고 이론적인 압축 비율만 비교한다. - Quantization 방법으로는 Symmetric Uniform Quantization을 사용
가중치 양자화에는 대부분 Symmetric Uniform Quantization(대칭적 균등 양자화)이 사용된다. 가중치의 평균제곱오차를 최소화하도록 양자화 범위를 결정한다.
Pruning과 Quantization의 오차를 비교하기 위해 "신호 대 잡음비(SNR, Signal-to-Noise Ratio)"를 사용하여 모델 성능을 평가한다.
SNR
$$SNR_{dB} = 10log_{10} (\frac{E[W^{2}]}{E[(W-F(W))^{2}]})$$
- $W$는 원래 가중치 값
- $F(W)$는 Pruning 또는 Quantization을 적용한 후의 값
- SNR 값이 클수록 원래 데이터와의 차이가 적으므로 성능이 좋다고 판단할 수 있다.
다음은 가중치가 정규분포를 따른다고 가정할 때의 비교 결과이다.
이 그래프는 Pruning과 Quantization의 오차를 나타낸 그래프이다.
Quatization의 경우, 양자화된 값 사이에서 오차가 진동하며 오차 범위가 비교적 완만하다. Pruning은 많은 가중치를 0으로 설정하기 때문에 본질적으로 많은 값을 0으로 반올림한 것과 같아 더 높은 오차를 유발한다.
하지만 이상치가 많아지면 오히려 Pruning이 더 좋은 성능을 보인다.
Heavy-tailed Distribution에서의 변화
이 그림은 이상치가 많은 데이터 분포인 Heavy-tailed Distribution에서 시뮬레이션을 수행했다. Pruning의 경우, Kurtosis(첨도) 증가에 영향을 거의 받지 않았다. 반면, Quantization의 경우 Kurtosis증가에 따라 급격히 감소하였다. 양자화는 이상치가 많을 때 큰 영향을 받지만 가지치기는 이상치에 영향이 적은 것을 확인하였다.
따라서 전반적인 정규분포를 따를 때 양자화가 항상 가지치기보다 성능이 우수하지만 이상치가 많은 분포에서는 낮은 비트일 때 가지치기가 더 유리할 수 있다.
위 결과는 가중치가 정규분포임을 가정하고 한 실험이다. 아래는 실제 신경망 가중치에 대해 동일한 분석을 수행하면 나오는 결과이다.
위 실험 결과, 정규분포를 가정한 실험과 유사한 결과를 얻을 수 있었다. 대부분의 경우, 양자화가 유리하였고 낮은 비트 수이거나 가지치기 비율이 높을수록 가지치기가 양자화보다 유리한 경우가 많았다.
[Per-layer comparison]
Post-Training Quantization
Post-Training Quantization 기법은 모델을 레이어 단위로 압축하는 방법이다. 각 레이어마다 개별적으로 양자화를 수행하는 방식으로 특정 레이어에서 출력 활성화값의 평균제곱오차를 최소화하는 것을 최적화 목표로 설정한다. 손실함수로써 MSE를 사용하는 것이 계산적으로도 효율적인 방법이지만 이 섹션에서는 MSE 대신 SNR을 사용하여 실험을 진행한다. SNR은 MSE의 정규화된 형태이므로 동일한 평가 척도로 활용될 수 있다.
PTQ의 오차
양자화 된 가중치를 사용할 때, 출력 활성화값의 평균제곱오차는 아래 식으로 표현된다.
$$E(w) = ||X\delta w - Xw_{orig}||^{2}_{2}$$
$X$ : 입력 데이터
$w_{orig}$ : 원래 가중치
$w$ : 양자화된 가중치
$\delta$ : 양자화 스케일
이 문제는 혼합 정수 이차 프로그래밍(Mixed-Integer Quadratic Programming) 문제로 변환될 수 있다.
$$\tilde{E}(w) = \frac{1}{2}w^{T}Pw-q^{T}w $$
여기서 행렬 $P$와 $q$의 정의는 다음과 같다.
$$P = 2\delta^{2}X^{T}X, q = 2(w^{T}_{orig}X^{T})X\delta$$
또한 최적화 과정에서 불필요한 상수를 제거하면 다음과 같이 정의될 수 있다.
$$ c = ||Xw_{orig}||^{2}_{2}, \tilde{E}(w) = E(w) - c $$
위 문제의 하한을 찾는 것은 다항 시간 내에 불가능 한 NP-Hard 문제이다. 따라서 최적화 문제의 하한을 찾기 위해 정수 제약 조건을 완화하는 방식(Relaxing Integer Constraint)을 사용한다. 원래는 가중치가 정수 값을 가져야 하지만 이를 완화하여 가중치가 0과 1 사이의 연속적인 값도 가질 수 있도록 허용한다.
$$w_{i}(w_{i}-1)\geq 0$$
또한 하한을 구하기 위해 완화된 문제(Relaxed Problem)의 쌍대 문제(Dual Problem)를 고려한다.
$$L(\lambda) = max-\gamma$$
제약 조건 :
$$s.t.\begin{bmatrix}
P-diag(\lambda) & q+\frac{1}{2}\lambda \\
(q+\frac{1}{2}\lambda)^{T} & \gamma \\
\end{bmatrix} \geq 0, \lambda \geq 0$$
$\lambda$ : 라그랑주 승수 벡터
$\gamma$ : 최적화된 쌍대 변수
쌍대 문제에서 하한을 구하기 위해 SDP(Semi-Definite Programming) 기법을 사용해 최적해를 근사한다. 본 논문에서는 CVX solver를 사용한다.
Post-training pruning
가지치기에서도 양자화와 마찬가지로 동일한 최적화 문제로 나타낼 수 있다.
$$E = \underset{\hat{w}}{min}||X\hat{w}-Xw_{orig}||^{2}_{2}$$
◎ 제약 조건
$||\hat{w}||_{0} \leq s$$
$X$ : 입력 데이터 행렬
$w_{orig}$ : 원래의 가중치 벡터
$\hat{w}$ : 가지치기가 적용된 새로운 가중치 벡터
$s$ : 0이 아닌 가중치의 개수
||\hat{w}||_{0} : Zero-norm -> 벡터에서 0이 아닌 원소의 개수
즉, Zero-norm으로 가지치기 후 남아있는 가중치의 개수를 $s$ 개 이하로 제한하는 최적화 문제를 정의한다. 하지만 Zero_norm은 비블록이고 미분 불가능한 함수이므로 최적해를 직접 구하기 어려워 이를 해결하기 쉬운 형태로 변환해야 한다.
따라서 희소성 마스크 개념을 도입하여 문제를 변형한다.
$$ E(w) = \underset{w,m}{min}||X(m\bigodot w)-Xw_{orig}||^{2}_{2} $$
◎ 제약 조건
$||m||_{1} = s$
$-m\bigodot l \leq \hat{w} \leq m\bigodot u$
$l,u > 0, m_{i} \in \left\{ 0,1 \right\} $
$m\bigodot w$ : 원소별 곱 -> 가지치기된 가중치를 표현
$||m||_{1} = s$ : 희소성 마스크 $m$에서 1인 원소의 개수를 제한
$-m\bigodot l \leq \hat{w} \leq m\bigodot u$ : 가지치기되지 않은 가중치는 특정 범위를 유지해야 한다.
$m_{i} \in \left\{ 0,1 \right\} $ : $m$은 0또는 1의 값을 가질 수 있음
즉, 희소성 마스크를 추가하여 어떤 가중치를 제거할지 결정하는 문제로 변환한다.
가지치기의 최적해를 구할 때는 Branch-and-Bound 방법을 사요한다. 이는 NP-hard 정수 최적화 문제를 해결하는 기법으로 문제를 작은 하위 문제로 나누고 최적해를 찾을 수 없는 경우 가지를 쳐서 제거하는 방법이다. 본 논문에서는 Gurobi solver를 사용하였다.
이제 두 방법을 Post-Training 환경에서 비교할 수 있게 되었다.
진행한 각 실험에서 여러 신경망의 개별 레이어를 분석하고 입력 데이터 배치를 주고 두 방법을 각각 적용한 후 비 압축 레이어의 출력과 활성화값 사이의 오차를 최소화하는 방식으로 최적화를 수행한다. 또한 각 방법에 대해 두 개의 신호 대 잡음비(SNR) 값의 범위를 제공한다.(첫 번째 값 : 휴리스틱 방법을 사용한 경우의 성능, 두 번째 값 : 오차의 하한 또는 전역 최적해를 기반으로 한 SNR 상한)
실험은 대표적인 10개의 레이어를 선택해서 수행한다.
- 9개의 합성곱 레이어
- 3x3 합성곱 1개
- Point-wise 합성곱 8개
- MobileNet-V2, EfficientNet-lite, ResNet-18의 일부 레이어에서 선택
- 1개의 완전 연결 레이어(Fully-connected Layer)
- ViT(Vision Transformer)에서 선택
전역 최적해를 찾는 것은 계산 비용이 많이 들어 실험에서는 특정 부분을 쪼개서 진행하였다. 3x3 합성곱 레이어는 4개의 입력 채널을 한 덩어리로 묶어 분석하였고 완전 연결 레이어 및 Point-wise 합성곱에서는 36개의 입력 피처를 한 덩어리로 묶어 분석하였다.
결과
그림의 각 사각형은 양자화와 가지치기의 성능 범위를 나타낸다. 사각형의 크기가 클수록 해당 기법의 성능이 다양한 결과를 가질 수 있음을 의미한다. 각 덩어리 별로 결과를 분석하고 이를 대각선과 비교한다.
- 사각형이 대각선을 가로지르는 경우 : 최적화 방법에 따라 양자화와 가지치기의 성능이 달라질 가능성이 있다.
- 사각형이 대각선 위에 있는 경우 : 가지치기가 양자화보다 확실히 성능이 우수하다.
- 사각형이 대각선 아래에 있는 경우 : 양자화가 가지치기보다 확실히 성능이 우수하다.
전반적으로 양자화 방법이 우수한 성능을 보여주지만 극단적인 압축률에서는 비슷한 성능을 보여주었다.
[Full-model comparision]
이번엔 양자화와 가지치기를 적용한 모델을 추가로 미세 조정하는 경우를 분석한다. 미세 조정에서는 가지치기가 더 많이 사용되고 미세 조정을 통해 모델이 크게 변경될 수 있기 때문에 가지치기와 양자화의 성능 차이가 존재할 가능성이 있다.
두 방법을 공정하게 비교하기 위해 양자화는 QAT(Quantization-Aware Training, 양자화 인식 학습)을 적용하고 가지치기는 Gradual Sparsity Increase(점진적 희소성 증가) 방법을 적용한 가지치기를 사용한다. 자세한 내용은 본 논문의 참고자료를 확인하길 바란다.
실험 설정
4가지 태스크에서 4가지의 서로 다른 모델을 사용하여 실험을 수행한다.
- 이미지 분류
- 모델 : ResNet18, ResNet50, MobileNet-V2, MobileNet-V3-small, EfficientNet-lite, ViT
- 데이터셋 : ImageNet
- 의미론적 분할
- 모델 : DeepLab-V3
- 데이터셋 : Pascal VOC
- 객체 탐지
- 모델 : EfficientDet
- 데이터셋 : MS COCO
- 언어 모델 미세 조정
- 모델 : OPT-350
- 데이터셋 : WikiText-103
모든 모델에 대해 동일한 미세 조정 에포크 수를 적용하여 공정한 비교를 수행한다.
결과
동일한 압축률에서 가지치기가 양자화보다 높은 정확도를 제공하는 경우가 거의 없다.
또한 본 논문에서 미세 조정 시간을 2배로 늘려 추가 실험을 진행하였는데 이 경우에는 가지치기가 더 많은 성능 향상을 보였다. ResNet50의 경우 높은 압축률에서 가지치기가 더 유리해지는 경향이 존재하지만 나머지의 경우에는 여전히 양자화가 더 좋은 성능을 유지하였다.
추가적으로 본 논문은 양자화와 가지치기를 모두 적용하는 방법에 대한 실험도 진행하였다. 양자화된 모델에 가지치기를 적용하여 그냥 양자화된 모델과 비교하였을 때 얼마나 더 효율적으로 압축되었는지를 실험하였다.
실험 결과, 경미한 수준의 가지치기는 양자화와 함께 사용하였을 때 성능이 향상되었다. 하지만 가지치기를 추가하는 데 따른 추가적인 메모리 오버헤드는 고려하지 않은 실험이므로 이를 참고하여 고려해야 한다.
[Discussion & Results]
논의
본 논문의 추가적인 논의와 한계점은 다음과 같다.
- 가지치기의 다른 유형
본 논문에서는 비구조적 가지치기를 다루었지만 반구조적 및 구조적 가지치기도 존재한다. 여러 가지 가지치기 방법이 존재하지만 본 논문에서는 비구조적 가지치기가 일반적으로 가장 높은 성능을 보이며, 양자화보다 비구조적 가지치기가 더 나은 경우는 거의 없었다고 주장한다. 하지만 반구조적 및 구조적 가지치기가 하드웨어 가속에 유리한 가능성이 있다는 점을 고려해야 한다. - Quantized Tensors에서의 자연적 희소성
양자화된 가중치는 자연스럽게 0을 많이 포함하고 있을 수 있다. 애초에 양자화된 모델 자체가 일부 가지치기가 적용된 효과를 가지므로 추가적인 가지치기가 항상 필요하지 않을 수 있다. - 압축된 모델에서 학습된 표현
가지치기 후 미세 조정과 QAT 후 미세 조정을 비교했을 때 모델이 학습하는 방식이 달라질 수 있다. 가지치기후 미세 조정은 원래 모델의 표현을 회복하는 방향으로 학습되지만 양자화후 미세 조정은 새로운 패턴을 학습하려는 경향이 있다. 이에 따른 성능 차이가 발생한 것일 수 있다. - 하드웨어 구현 고려사항
본 논문은 하드웨어 최적화를 고려하지 않고 이론적인 압축률과 정확도를 비교했다. 하지만 실제 하드웨어에 적용할 때는 추가적인 고려가 필요하다. 메모리 사용량 및 저장 오버헤드를 고려하였을 때 가지치기는 어떤 가중치가 0인지를 나타내는 마스킹이 추가적으로 필요하지만 양자화는 필요하지 않다. 이런 저장 공간 및 메모리 효율 측면에서 양자화가 더 유리하다. 연산량 감소 및 하드웨어 가속을 고려하였을 때 가지치기를 적용하면 가중치가 0인 연산을 생략하면 속도가 빨라질 수 있지만 비구조적 가지치기는 가속기 최적화가 얼엽다는 점에서 속도 향상이 적을 수 있다. 반면 양자화는 가지치기에 비해 하드웨어 지원이 훨씬 잘 되어 있어 실제 연산 속도를 개선할 가능성이 높다. - 가지치기와 양자화의 사회적 영향
압축은 전력 소비 감소 및 배포 비용 절감 측면에서 긍정적인 영향을 미치지만 두 압축 방법 모두 편향 문제를 유발할 가능성이 있다. 특정 데이터에서 성능이 저하될 수 있고 이로 인해 특정 그룹에 대한 불공정한 결과를 생성할 가능성이 존재한다. - 연구의 한계
따라서 해당 연구는 다음의 한계를 가진다.- 하드웨어 최적화 고려 부족
- 양자화와 가지치기를 함께 사용하는 경우에 대한 연구 부족
- 비정형 양자화에 대한 고려 부족
결론
본 논문은 비구조적 가지치기와 양자화를 실험을 통해 비교 분석하였고 두 압축 방법 중 어느 것이 더 우수한 성능을 보이는지 입증하고자 하였다. 실험을 통해 가지치기가 양자화보다 우수한 경우가 거의 없다는 것을 증명하였고 Post-Training 실험에서 대부분의 경우 양자화가 가지치기보다 우수한 성능을 보인다는 것을 입증하였다. 전체 미세 조정을 수행하여도 양자화가 가지치기보다 우수한 성능을 유지하였다. 이는 양자화가 가지치기보다 더 정확한 표현을 유지할 수 있다는 것을 증명한다.
본 논문은 가지치기(Pruning)와 양자화(Quantization) 방법 중 어느 방법이 신경망 모델을 압축하는 데 더 효과적인지 분석하고 입증한 연구이다. 논문에서는 최대한 공정한 비교를 위해 동일한 실험 환경을 구성하고자 했으나, 실제 하드웨어 성능과 배포 환경을 고려한 추가적인 실험이 포함되었다면 더욱 완성도 높은 연구가 되었을 것으로 보인다. 모델 압축은 실생활 적용 및 제한된 하드웨어 환경에서의 배포를 위해 중요한 요소이므로, 실제 사용 환경에서의 실험이 더욱 의미 있을 것이다. 그럼에도 불구하고, 본 연구는 가지치기와 양자화 기법의 성능 차이에 대한 명확한 비교를 제공하여, 딥러닝 모델 압축 방법에 대한 궁금증을 해소했다는 점에서 가치 있는 연구라고 생각한다.