Content
요약
Quantization: 연속적인 데이터를 이산적인 값으로 표현하는 것.
Uniform vs Non-uniform: 균등한 구간으로 매핑 vs 비균등한 구간에 매핑
Symmetric vs Asymmetric: 0을 기준으로 대칭인 범위 vs 0을 기준으로 비대칭한 범위
Quantization이란?
Quantization 양자화란 대체로 연속적인, 큰 집합에 속하는 입력 값을 대체로 이산적인, 작은 집합에 속하는 출력 값으로 매핑하는 방법이다.

무슨 말인가 하면 위 그림 같은 간단한 계단 함수를 살펴보자.
x축 위의 실수값들이 y축의 정수값들에 매핑되었다.
수를 표현하기 위한 정보량이 줄어들었다.
이렇듯 Rounding 반올림과 Truncation 버림이 양자화의 대표적인 예시이다.
뉴럴 네트워크의 양자화는 중요하다.
그 이유는
1) 뉴럴 네트워크의 inference와 training은 계산 집약적이다.
그래서 연산의 효율이 중요한데 양자화는 연산량을 상당히 줄여준다.
weight와 activation을 표현하는 데 필요한 비트 수를 줄여주기 때문이다.
2) 둘째, 대부분의 모델은 매우 over-parameterized 되어있다. 파라미터가 과도하게 많다는 것이다. (파라미터는 weight이나 bias이다.)
다른 의미로는 양자화를 과감히 실행해도 매우 강건하다는 뜻이다.
따라서 파라미터들이 담긴 메모리 공간을 상당히 줄일 수 있다.
그럼 양자화를 왜 해야 되는지 알았으니 양자화를 어떻게 하는지 여러 기준에 따라 알아볼 것이다.
그전에 기본적으로 양자화 함수는 floating point의 실수를 더 낮은 정밀도, 이를 테면 8 bit 범위로 매핑한다는 것을 생각하자.
양자화 함수를 다음과 같이 정의한다.
양자화 함수 Q는 실수의 입력 r을 받는데 여기서 r은 activation이나 weight이 될 수 있다.
는 실수 scaling factor이고 는 정수 zero point다. 와 는 뒤에서 설명하겠다.
Int 함수는 실수를 rounding 해 정수값으로 만든다.
Uniform vs Non-uniform Quantization
Uniform Quantization은 전체 데이터 범위를 uniform 한 즉 균등한 간격으로 나눈다.
아래 그림을 보자.

오른쪽 non-uniform 양자화의 Q축을 보면 오렌지 점들이 균등하지 않은 간격으로 놓여있다.
입력 데이터들이 항상 균등한 간격으로 존재할 거란 보장이 없기 때문에 때에 따라 non-uniform 방식이 데이터를 더 효과적으로 represent 할 수 있다.
예를 들어 위 그래프의 r의 분포가 정규 분포처럼 0에 집약되어 있다면 non-uniform한 방식이 r의 분포를 더 잘 나타낼 것이다.
non-uniform 한 방식 중에서도 로그 변환을 사용한다면 식이 다음과 같을 수 있다.
입력 값 r의 크기가 작을 때 더 세밀하게 양자화되고, 큰 값은 더 큰 간격으로 양자화된다.
(은 로그 함수에 0을 넣지 않기 위해 사용된다.)
dequantization은 양자화의 반대 과정이라고 생각하면 되는데 이 역시 중요하며 나중에 설명하겠다.
아까의 Q(r) dequantization은 다음 식으로 찾을 수 있다.
여기서 되찾아진 은 rounding을 거쳤기 때문에 이전 과 항상 같다고는 할 수 없다.
Symmetric vs Asymmetric Quantization
아까 언급한 스케일링 팩터는 실수 의 범위를 나누는 역할을 한다.
분모 는 클리핑 범위라고 해서 입력 실수 범위의 양 끝 바운더리를 정한다.
분자 은 출력 정수 범위이다. 여기서 는 양자화 비트 수이다.
실수 FP를 정수 INT8로 양자화한다면 b는 8이 된다.
즉 스케일링 팩터는 입력 실수 범위/출력 정수 범위 비율이다.
그래서 스케일링 팩터를 정의하려면 클리핑 범위부터 정해야 하는데 이 것을 calibration 보정이라고 한다.
직관적인 방법은 클리핑 범위를 인풋 데이터의 min/max로 정하는 것이다. 즉 전체 범위를 모두 수용하는 것이다. i.e., and
이것은 asymmetric quantization 즉 비대칭적 양자화라고 한다. affine quantization이라고도 한다.
예를 들어 인풋 데이터의 가장 작은 값, 이고 제일 큰 값이 라면 0을 기준으로 클리핑 범위가 비대칭적이다.
아래 그림을 보면 더 직관적이다. 그림 오른쪽이 asymmetric이다.

그럼 symmetric 대칭적 양자화를 하려면 어떻게 해야할까.
클리핑 범위를 가 되게끔 잡으면 된다. 그림 왼쪽처럼이다.
그리고 보통 나 를 로 결정한다. 즉 실수 범위에서 절대값이 제일 큰 수를 바운더리로 고른다는 것이다.
Which one to use?
1) Asymmetric을 고를 때
Asymmetric은 대체로 symmetric보다 범위를 잘 표현한다. (= tighter clipping range)
이건 activation이나 weight이 imbalanced일 때 중요하다. (즉 skewed range일 때)
예를 들면 ReLU 함수는 0~양수의 값으로 activation을 도출한다.
여기서 symmetric quantization을 한다면 클리핑 범위가 로 잡혀 불필요한 음수 범위가 포함되게 된다.
2) Symmetric을 고를 때
symmetric 방식은 양자화 함수를 간소화할 수 있다.
왜냐면 양자화 함수의 제로 포인트가 0이 되기 때문이다.
제로 포인트는 양자화 된 범위를 shift 옮겨서 양자화 전 0의 위치가 그대로 0이게 해준다. bias, offset 처럼 생각하면 된다.
그런데 이미 대칭을 상정한 symmetric 방식의 클리핑 범위는 shift 해줄 필요가 없는 것이다.
그래프를 보면 왼쪽의 symmetric 그래프는 0의 위치가 변하지 않았다.
그래서 식이 다음과 같이 된다.
이렇게 가 0으로 간소화된 식은 연산 비용을 줄여줄 수 있다. 또 직관적이다.
+(Asymmetric에서 Z는 데이터에 독립적인 static 항으로 bias에 흡수되거나 accumulator를 초기화할 때 사용될 수 있다.) ??? what is this..
Symmetric - Scaling Factor 구하기
스케일링 팩터를 정할 때 두 가지 방법이 있다.
"full range"로 하면 는 이다.
INT8 전체 범위인 에 매핑된다.
"restricted range"로 하면 는 이다.
한정된 범위인 에 매핑된다.
여기서도 당연히 full range 방법이 입력 데이터를 더 정확히 표현한다.
문제와 해결법
Symmetric과 Asymmetric quantization 모두 자주 쓰이지만 이렇게 min/max로 바운더리를 정하는 접근은 outlier 이상치 데이터에 취약하다.
이상치 데이터까지 포함해 불필요하게 범위를 늘릴 수도 있고 그로 인해 양자화 resolution이 낮아질 수 있다.
해결법 1)
데이터의 min/max를 사용하는 것이 아니라 percentile 백분위 값을 사용하는 것이다.
즉 제일 작고/ 큰 값을 쓰는 게 아니라 i 번째로 작고/ 큰 데이터를 사용한다.
해결법 2)
실제 값과 양자화된 값 사이의 KL divergence 발산 (i.e., information loss)을 줄이는 와 를 선택하는 것이다.
+) TensorRT는 KL divergence, MSE 최소화, percentile 등을 사용한다.
출처:
A Survey of Quantization Methods for Efficient Neural Network Inference
'ML 머신러닝 > Quantization 양자화' 카테고리의 다른 글
[논문리뷰] ZeroQ: A Novel Zero Shot Quantization Framework (7) | 2024.12.24 |
---|---|
[ML] 모델 경량화 방법 3가지: Pruning, Weight Quantization, Low-Rank Matrix/Tensor Decomposition (3) | 2024.07.28 |