기본개념
양자화(Quantization)는 숫자의 정밀도(precision)를 낮추면서 모델을 최적화하고 경량화시킬 수 있는 기법입니다. 숫자의 정밀도가 낮춘다는 의미는 데이터의 자료형의 크기를 줄인다라고 볼 수 있습니다. 보통 딥러닝 모델의 매개변수를 구성하는 값들은 32비트 크기의 실수 자료형 숫자인데, 이를 8비트 크기의 정수 자료형 숫자로 전환하면서 경량화가 가능해집니다. 숫자의 정밀도가 낮아지면 아래와 같은 현상이 발생합니다.
- 계산속도 향상
- 메모리 사용량 감소
- 오차 발생 또는 증가
위와 같은 장점과 단점을 고려했을 때 적절한 낮은 정밀도 값으로 바꿀 수 있도록 하는 함수(Quantization Mapping)이 필요하게 됩니다. 그리고 양자화된 값을 복원(de-quantization) 과정을 거치게 되는데, 이를 위해 필요한 매개변수는 다음과 같습니다.
- 양자화 방식
- Quantized value (q) : 양자화 결과 값
- Scale factor (s) : 양자화 방식에 따라 달라지는 기울기 값
- Zero point (z) : 0의 양자화 후 위치
이를 식으로 간단히 표현하자면 아래와 같습니다.
q = round( x / s ) * s + z # 양자화
x_hat = q * s - z # 복원
Absmax Quantization
Absmax는 양자화했을 때 변환 값들의 범위가 좌우 대칭이 되도록 변환하는 방법입니다. 값이 -127 ~ 127 사이에 위치할 수 있도록 조정하며, 0을 항상 0으로 보내는 것이 효과적인 경우에 채택합니다. (예를 들어, 하이퍼볼릭 탄젠트 함수를 사용하는 경우) 적용 방식은 아래 처럼 사용할 수 있습니다.
s = max(abs(x)) / 127
z = 0
다만, 이 방법은 극단적인 값에 예민할 수 있어 이를 완화하기 위해 Clipping 라는 기술을 활용 가능합니다. Clipping 기술은 일정 범주를 넘어갈 경우 동일한 값으로 취급합니다. 예를 들어, -5 ~ 5 를 넘어가는 경우 5의 값을 활용하는 방식이죠. 다만, 이렇게 적절한 범주를 찾는 과정이 필요한데, 이를 calibration 라고 합니다.
Zero-point Quantization
Zero-point는 0을 고려하지 않고 전체 범위를 균일하게 변환하는 방법입니다. 데이터 분포가 비대칭적이거나 평균이 0 이 아닌 경우(예를 들어, ReLU를 사용하는 경우) 사용할 수 있습니다. 위와 다르게 -128 ~ 127 사이에 위치하도록 조정하는 방식이며, 식은 아래와 같이 사용할 수 있습니다.
s = (max(X) - min(X)) / 255
z = -128 - round(min (X) / s)
참고자료
[1] 조현수. "모델 최적화 및 경량화". boostcamp AI Tech.
'Note > Deep Learning' 카테고리의 다른 글
효율적인 딥러닝 학습을 위한 병렬화 기본 개념 정리 | Data, Tensor, Pipeline Parallelism (0) | 2024.12.30 |
---|---|
PEFT를 위한 AdapterFusion, QLoRA 훑어보기 (0) | 2024.12.27 |
딥러닝 모델 경량화를 위한 Knowledge Distillation 기본 개념 정리 | 지식 증류, KD (0) | 2024.12.25 |
딥러닝 모델 경량화를 위한 Pruning 기본 개념 정리 (0) | 2024.12.24 |
이미지 생성 모델 간단 정리하기 | GAN, Autoencoder, Diffusion (0) | 2024.12.09 |