[경량화 챌린지] 10일차 - Affine Quantization

ehghkwl·2025년 11월 24일

Lightweight Challenge

목록 보기
10/22
post-thumbnail

Affine Quantization

X: 실테 데이터
q: quantization된 목표 데이터

1. Scale(S) 구하기

X의 전체 범위를 q의 칸수로 나눈다. (예를 들어, X의 최대가 80, 최소가 -120이고, q가 uint4라면, X_max=80, X_min=-120, q_max=15, q_min=0이다. 아래 수식에 따라, S= 200/15로 13.333... 이다. 이는 q에서의 1칸은 X에서의 13.333...을 의미한다는것이다.)

2. Zero-point(Z) 구하기

이제 X_min이 q_min이 되도록, X_max가 q_max가 되도록 영점 조절을 해야된다.
q = round(X/S+Z) 수식이다. 이때, round함수는 q는 결국 정수값이 들어가야 하기 때문에 필요하다.
여기에 값을 대입해보면, 0 = (-120/13.33333 + Z), Z=9이다.
이는 X를 S로 나눈 후에, Z만큼 더하면 최소가 0, 최대가 15인 데이터로 변환된다는것을 의미한다.

해당 수식을 통해 quantization을 하는 것이 Affine Quantization이다. 하지만, round함수로 인해 de-quantization의 경우, 오차가 발생하게 된다.

3. De-quantization (검증)

X=-50의 q는 round(-3.75+9) = round(5.25) = 5이다. 이 값을 원래 X로 복원해보자.
X = S(q-Z) = 200/15 (5-9) = -53.333333로, 3.33333 오차가 발생한다. 이러한 오차들을 Quantization Error/Noise라고 한다. 이게 모여서 모델 성능을 낮추게 된다. (왜냐면 현재 quantization은 가중치만 int4고, 실제 추론할때에는 fp16으로 변환해서 추론하기 때문!)
오차를 줄이려면 결국, S와 N을 잘 선정해야하는데 이를 위해서 NF4와 같은 기술이 나왔다.

profile
안녕하세요.

0개의 댓글