본문 바로가기
Model Lightening/Model Compression

AI 모델 양자화 기초 [3] - Affine Quantization의 수학적 원리

by Sangwoo Seo 2026. 2. 15.

Affine Quantization의 수학적 원리

양자화의 핵심 수식은 다음과 같습니다.

$$ x_q = \text{round}(\frac{x}{s}) + z $$

여기서:

  • $ x $: 원본 FP32 값 (실수)
  •  양자화된 INT8 값 (정수)
  • $ s $: 스케일(scale) - 실수
  • $ z $: 제로 포인트(zero-point) - 정수
  • $ round(\frac{x}{s}) $: 반올림 함수

이 수식이 전부입니다. 하지만 단순해 보이는 이 한 줄에 양자화의 모든 비밀이 담겨 있습니다.

왜 이런 형태인가?

양자화는 선형 변환(linear transformation)입니다. 실수 공간의 값을 정수 공간으로 일대일 대응시키는 것이죠.

 

핵심 아이디어

실수 범위 [x_min, x_max] → 정수 범위 [q_min, q_max]로 선형 매핑

 

이 선형 매핑을 수학적으로 표현하면:

  1. 스케일링: 실수 범위를 정수 범위 크기에 맞춤 → $ x/s $
  2. 반올림: 연속값을 이산값으로 → $ \text{round}() $
  3. 이동: 0점을 조정 → $ +z $

scale ($ s $): 범위를 맞추는 비율

Scale은 "실수 1단위가 정수 몇 단위에 해당하는가"를 나타냅니다. 실수 범위가 [-10, 10]이고, 정수 범위가 [-128, 127]이라면

  • 실수 범위 크기: 20
  • 정수 범위 크기: 255
  • $ s = 20/255 ≈ 0.0784 $

이제 실수 값 5를 변환한다면

$$ x_q = \text{round}(5/0.0784) = \text{round}(63.8) = 64 $$

반대로, 정수 64를 실수로 복원(dequantization)하면

$$ x ≈ 64 × 0.0784 = 5.02 $$

거의 원래 값(5)에 가깝습니다.

 

scale의 역할:

  • 작은 s: 실수 1단위 → 정수 여러 단위 (정밀함, 하지만 표현 범위 좁음)
  • 큰 s: 실수 1단위 → 정수 작은 단위 (범위 넓음, 하지만 정밀도 낮음)

이것은 해상도(resolution)범위(range)의 트레이드오프입니다.

Zero-point($ z $): 0을 어디에 둘 것인가?

Zero-point는 "실수 0이 정수 몇에 대응되는가"를 나타냅니다. Scale만으로는 충분하지 않습니다. 예를 들어:

 

경우 1: 실수 범위가 대칭적 [-5, 5]

실수 0 → 정수 0으로 매핑하면 자연스러움
z = 0

 

경우 2: 실수 범위가 비대칭적 [0, 10]

실수 0 → 정수 0으로 매핑하면?
→ 정수 범위 [-128, 127]의 절반을 낭비!
→ 실수 0을 정수 -128로 매핑하는 것이 효율적
z = -128

 

수학적 정의

실수 0을 양자화하면

$$ 0 = \text{round}(0/s) + z = z $$

즉, $ z $는 실수 0이 매핑되는 정수 값입니다.

 

Zero-point의 역할:

  • $ z = 0 $: Symmetric quantization (대칭 양자화)
    • 실수 범위가 0을 중심으로 대칭적일 때 사용
    • 예: [-5, 5], [-2.3, 2.3]
  • $ z ≠ 0 $: Asymmetric quantization (비대칭 양자화)
    • 실수 범위가 비대칭적일 때 사용
    • 예: [0, 10], [-1, 8]
    • 정수 범위를 최대한 효율적으로 활용

Quantization과 Dequantization

Forward (Quantization): 실수 → 정수

$$ x_q = \text{round}(\frac{x}{s}) + z $$

Backward (Dequantization): 정수 → 실수

$$ \hat{x} = (x_q - z) × s $$

 

주목할 점: dequantization에서 $ \text{round}() $가 없습니다. 왜냐하면 $x_q$는 이미 정수이기 때문입니다.

 

완벽한 복원은 불가능:

원본: $ x = 5.67 $

 

  • Quantization: $ x_q = \text{round}(5.67/0.1) + 0 = 57 $
  • Dequantization: $ \hat{x} = 57 \times 0.1 = 5.7 $

오차: $ |5.67 - 5.7| = 0.03 $

 

이 오차가 바로 양자화 오차입니다. $ \text{round}() $ 연산에서 발생하는 불가피한 손실이죠.

왜 "Affine" Quantization인가?

수학에서 Affine 변환은 다음 형태입니다.

$$ y=ax+b $$

우리의 양자화 수식을 다시 보면

$$ x_q = \text{round}\left(\frac{x}{s}\right) + z = \text{round}\left(\frac{1}{s} \cdot x\right) + z $$

$ \text{round}() $를 무시하면

$$ x_q = \approx \frac{1}{s} \cdot x + z $$

정확히 affine 변환입니다!

  • $ a = 1/s $ (scale factor)
  • $ b = z $ (offset)

반대 방향(dequantization)도 affine입니다.

$$ \hat{x} = s \cdot x_q - s \cdot z = s \cdot (x_q - z) $$

"Affine"의 의미:

  • 선형 변환 + 평행 이동
  • Scale로 늘리고/줄이고 (선형)
  • Zero-point로 이동 (평행 이동)

이것이 "Linear Quantization" 또는 "Affine Quantization"이라고 불리는 이유입니다.

핵심 통찰: 두 개의 파라미터로 모든 것이 결정됨

놀라운 점은, 단 두 개의 숫자 $ s $와 $ z $만으로 전체 양자화 과정이 완전히 결정된다는 것입니다. $ s $와 $ z $를 알면

  • 어떤 실수든 정수로 변환 가능
  • 어떤 정수든 실수로 복원 가능
  • 양자화 오차 예측 가능

예시

$ s = 0.1, z = 0\text{이라면} $

$ x = 2.34 → x_q = \text{round}(2.34/0.1) + 0 = 23 $
$ x = -5.67 → x_q = \text{round}(-5.67/0.1) + 0 = -57 $
$ x = 0.05 → x_q = \text{round}(0.05/0.1) + 0 = 1 $

$ x_q = 23 → \hat{x}= (23-0) × 0.1 = 2.3 $
$ x_q = -57 → \hat{x}= (-57-0) × 0.1 = -5.7 $
$ x_q = 1 → \hat{x}= (1-0) × 0.1 = 0.1 $

 

모든 변환이 $ s $와 $ z $에 의해 기계적으로 결정됩니다.

정리: Affine Quantization의 핵심

  1. 수식: $ x_q = \text{round}(x/s) + z $
  2. scale $ s $: 실수-정수 범위의 크기 비율, 정밀도 결정
  3. zero-point $ z $: 실수 0이 매핑되는 정수 위치, 범위 활용 효율성 결정
  4. Affine 변환: 선형 스케일링 + 평행 이동
  5. 완벽한 복원 불가: $ \text{round}() $에서 불가피한 오차 발생
  6. 두 파라미터의 힘: $ s $와 $ z $만 알면 모든 변환 가능

이제 원리는 명확합니다. 하지만 여전히 한 가지 핵심 질문이 남았습니다.

 

"그렇다면 $ s $와 $ z $를 실제로 어떻게 계산하는가?"

이것이 다음 글 "Scale과 Zero-point의 비밀"에서 다룰 내용입니다. 실제 데이터가 주어졌을 때, 최적의 $ s $와 $ z $를 찾는 구체적인 방법과 여러 값들을 직접 손으로 계산해보면서 완전히 이해해보겠습니다.