반응형

기본개념

양자화(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.

반응형