본문 바로가기
ML 머신러닝/Quantization 양자화

[논문리뷰] ZeroQ: A Novel Zero Shot Quantization Framework

by 수현리 2024. 12. 24.

Zero Shot Quantization 기법 중 하나인 ZeroQ를 설명해보려고 한다.
 

Background

Quantization 양자화란 인공 신경망 모델의 정밀도를 낮추어 모델 크기 감소와 연산 효율을 꾀하는 것이다.
예를 들면 FP32로 저장된 weight을 int8의 정밀도로 바꾸면 32비트가 필요했던 정보가 8비트만 필요하게 된다.
 
단 정보량이 무조건 줄어들 수밖에 없기 때문에 accuracy 등과의 트레이드오프는 불가피하다.
그렇지만 인공 신경망 모델은 대체로 overparameterize 되어있다고 알려져 있기 때문에 양자화를 해도 그 손실이 크지 않다.
 
양자화 기법 중에서도 크게 두 가지로 나눠볼 수 있는데

Post-Training-Quantization(PTQ)와 Quantization-Aware Training (QAT)이 있다.
이름에서도 알 수 있다시피 PTQ는 이미 train이 된 모델을 양자화하는 것이고
QAT는 양자화를 고려해서 train하는 것이다.

 
QAT는 보통 pretrained된 모델을 가지고 fine-tuning 하는 과정을 거치게 되는데
이때 retrain할 때는 train 할 때 필요한 full dataset이 필요하다.
Zero shot quantization은 여기서의 문제점을 해결하고자 한다.
 
 

Idea

먼저 full dataset을 retrain할 때의 문제점은

1) 연산 비용과 시간이 costly하다
2) real world에서는 dataset이 private 하다 - medical, proprietary

 
즉 데이터셋이 민감한 개인 의료 정보이거나 기업의 소유라면 접근이 어려울 수 있다는 것이다.
 
zero shot quantization 줄여서 ZSQ 기법은 no data을 내세운다.
그래서 data-free quantization이라고도 한다.
 
그중에서도 level 1으로는 ZSQ + PTQ의 형태인 것이 있고
level 2로는 ZSQ + QAT의 형태인 것이 있는데 여기서의 차이는
level 2에서는 no data이지만 QAT의 아이디어처럼 finetuning을 한다는 것이다.
 
level 1 ZSQ + PTQ 기법 중에서도 ZeroQ를 알아볼 것이다.
 
 

Methods

ZeroQ에서 시사하는 두 가지 포인트는 다음과 같다.

1) Distilled Data
- real data가 아닌 synthetic 임의의 데이터셋으로 모델을 양자화한다.

2) Support mixed precision
- 양자화를 잘하려면 mixed precision 즉 여러 정밀도 조합을 고려하는 것이 필수적이다.

 
real data를 사용하지 못할 때 mixed precision 조합을 찾아내지 못한다는 문제점이 있는데 이를 해결한다.
 
아래에서 각 포인트를 더 잘 설명해 보겠다.
 

1) Distilled Data

기존의 real 데이터를 사용하지 못하면 두 가지 문제가 생긴다.
 
1. clipping을 못하게 된다.
clipping은 양자화에서 필수적인 단계이다.
양자화를 한다는 것은 기존의 데이터 정보 range를 비트 수에 맞춰진 range로 매핑시킨다는 것이다.

위 사진처럼 바꿔주는 것이 양자화인데 clipping은 여기서 기존 데이터의 range를 픽스해 주는 것이다.
그러려면 그 range를 알아야 되는데 기존의 data를 사용하지 않는다면 당연히 범위도 알 수가 없다.
 
 
 
2. Mixed-precision 조합을 찾을 수 없다는 문제가 생긴다.
mixed-precision이란 한 모델 안에서도 여러 정밀도를 사용한다는 것을 의미한다.
 
예를 들면 첫 번째 레이어는 2비트를 두 번째 레이어는 4비트를 사용하는 것이다.
 
보통 레이어의 sensitivity 민감도에 따라 이 비트 수를 정하게 된다.
이를 테면 어떤 레이어가 민감하다는 것은 여기서 담고 있는 정보가 전체 모델에서 중요하다는 것이다.
그런 레이어에 극단적인 양자화를 해버리게 되면 당연히 모델 성능이 떨어질 것이다.
그래서 민감도가 높은 레이어는 상대적으로 많은 비트 ex) 8 비트를 사용하고 낮은 레이어는 적은 비트 ex) 2 비트를 사용한다.
 
여기서 민감도를 어떻게 구하는지가 중요하다. 
 
 

Sensitivity 구하기

Sensitivity Ωi(k)Ω_i(k)KL divergence KL 발산으로 구한다.
i는 i번째 layer, k는 양자화에 사용하는 비트 수.
수식은 다음과 같다.
 

여기서 큰 M은 신경망 모델을 의미한다.
그래서 수식에 따른 기존 training dataset xjx_j 가 필요한데
zero shot quantization은 data free를 추구하기 때문에 민감도를 구할 수가 없다. 
 
그래서 Distilled Data라고 칭하는 새로운 데이터를 만들어낸다.
 
 

Distilled Data 구하기

Distilled Data는 기존 데이터의 BN 레이어에 인코딩 된 statistic을 바탕으로 기존 데이터 분포와 유사하게 만든다. 
 

 
왼쪽은 핵심 최적해를 구하는 수식, 오른쪽은 왼쪽 수식을 이용한 알고리즘이다.
 
1. 처음에 초기 데이터셋 xrx^r는 가우시안 분포에서 랜덤하게 생성한다.

 

2. 다음 신경망의 각 Batch Normalization(BN) 레이어의 μi\mu_iσi\sigma_i를 가져온다.
(이건 training 후 저장된 정보이고 여기서 BN layer는 각 convolution layer 다음에 위치함을 상정한다.)
 
3. 모델 M을 forward propagate 순전파하면서 activation을 찾는다.
 
4. activation에서 μi~r{\tilde{\mu_i}}^r, σi~r{\tilde{\sigma_i}}^r를 구한다. 
 
5. 위의 최적해 식을 사용해서 기존 평균, 분산과 다시 구한 평균 분산의 차이를 최소화하는 loss 함수의 해를 구한다.
 
6. 역전파를 해서 데이터셋 xrx^r을 업데이트 해준다.
 
위의 과정 3-6을 여러 번 반복하면 최종적으로 기존 BN 레이어의 분포와 비슷한 새로운 Distilled dataset xrx^r를 구할 수 있다.
 
 

결국엔 Distilled data를 민감도 구하는 식에 넣는다.
어떤 i 번째 레이어를 비트 수 k로 양자화했을 때의 민감도 Ωi(k)\Omega_i{(k)}를 구할 수 있다.
민감도를 구하는 과정을 시각적으로 확인할 수 있다.
 
 

 
다음 그래프에서 집어넣는 input 데이터셋에 따른 각각의 레이어의 민감도를 확인할 수 있다.
왼쪽을 보면 distilled data가 가우시안 data보다 더 기존 training 때 사용됐던 data의 민감도를 따라가는 것을 볼 수 있다.
오히려 처음 3개의 레이어를 보면 빨간 선 가우시안 데이터 분포는 민감도 정보가 반대로 나타나서 신뢰할 수 없다.
 
오른쪽 그래프를 보면 비트 수가 늘어날수록 즉 2비트와 8비트보다 4비트와 8비트에서 민감도 그래프가 유사하게 나타나는 것을 확인할 수 있다. 
 
 

2) Mixed Precision

Mixed Precision을 하기 위해 각 레이어를 양자화했을 때의 민감도를 찾은 것이다.
어떤 레이어가 양자화했을 때 더 영향이 큰 가를 알기 위해서다. 
 
이 mixed precision을 찾기 위한 탐색 공간은

LL layermm개의 precision 선택지가 있다면 탐색 공간은 mLm^L이다. 
그래서 Resnet50 모델의 양자화 비트 옵션을 2비트, 4비트, 8비트 총 세 가지라고 한다면
3507.2×10233^{50}\approxeq7.2\times10^{23}이다. 아주 많다. 
 
이 탐색 공간을 줄이기 위해 파레토 프런티어를 사용한다.
 
 

파레토 프런티어 최적화

파레토 프런티어는 여러 가지 측면에서 최적화를 최적의 효율을 가진 선택지들의 경계선을 의미한다.
그래프를 보면 더 알기 쉽다. 
 

 
모델 사이즈를 제약 조건으로 두게 되면 오른쪽 그래프 상에서의 경계선이 나타난다. 
제약 조건을 둠으로써 모든 mLm^L 가능성을 고려 및 연산하지 않아도 되고 연산 복잡도는 O=mLO={mL}이 된다. 
 
식은 미리 정해놓은 특정 모델 사이즈 이하의 모든 mixed precision 조합을 확인한다. 
예를 들면 모델에 layer 당 100 개의 weight가 있고 4 layer가 있다고 하면.
모델 사이즈를 1600 bit로 제한하게 되면 평균적으로 이 모델은 4 bit의 정밀도를 가져야 한다. 100*4*4 = 1600.  
 
이론적으로 파레토 프런티어는 최적의 mixed precision 조합을 보장하지는 않지만
실험 결과 sota accuracy를 찾아낼 수 있었다. 
 
 

Experiment Results

accuracy와 model size 측면에서 ZeroQ는 기존 기법들에 비해 높은 accuracy를 달성할 수 있었다.
No D는 no data, No FT는 no finetuning을 의미한다. 
MP는 mixed precision을 뜻하며 평균적으로 4 비트로 맞추었다. 
 
다양한 실험결과와 ablation study도 있으나 일부만 가져왔다.
또 논문에서 강조하는 시사점이 있는데 연산 오버헤드가 매우 작다는 것이다. 
 
Model Resnet50으로 ImageNet 데이터셋을 훈련한다 했을 때 8개의 Tesla V100 gpu로 
한 에포크를 훈련할 때 100분이 걸린다.
그렇지만 ZeroQ를 적용하면 30초로 제로샷 양자화를 진행할 수 있다. 
이 30초는 3초-Distilled Data 생성하기, 12초-모든 레이어의 민감도 계산하기, 14초-파레토 프론티어 최적화 적용하기이다. 
 
그러니까 기존의 데이터셋을 가지고 재훈련하는 것보다 임의의 데이터셋을 만들어서 양자화를 했는데
시간이 매우 단축되고 모델 사이즈가 줄어들 뿐만 아니라 어느 정도의 정확도를 보장한다는 것이다. 
 
또한 기존 제로샷 기법들은 label에 기반해 임의의 dataset을 만들어낸다. 
이렇게 하면 object detection이나 image segmentation에 적용하기가 힘들다. 
왜냐하면 label에 의존한 정보로 인해 인식이 잘 안 될 수 있기 때문이다. 
 
 
 
 
 
출처
ZeroQ: A Novel Zero Shot Quantization Framework
Yaohui Cai, 2020
 
정확하지 않은 내용이 있을 수 있습니다.