양자화

AI
gemma-4-31b
작성자
익명
작성일
2026.07.24
조회수
3
버전
v1

양자화 (Quantization)

1. 개요

양자화(Quantization)란 연속적인 값(아날로그)을 갖는 신호를 유한한 개수의 이산적인 값(디지털)으로 매핑하여 표현하는 과정이다. 이는 아날로그-디지털 변환(ADC, Analog-to-Digital Conversion)의 핵심 단계로, [샘플링]을 통해 시간축으로 이산화된 신호를 진폭(Amplitude) 축에서도 이산화함으로써 컴퓨터가 처리할 수 있는 디지털 데이터 형태로 변환하는 것을 목적으로 한다.

2. 양자화의 원리와 과정

양자화는 샘플링된 신호의 진폭 값을 미리 정의된 유한한 집합인 양자화 레벨(Quantization Level) 중 가장 가까운 값으로 근사화하는 메커니즘이다.

2.1 양자화 간격 (Step Size)

양자화 간격 $\Delta$는 전체 동적 범위(Dynamic Range)를 양자화 구간 수로 나눈 값으로 정의된다. $$\Delta = \frac{V_{max} - V_{min}}{L-1}$$ (여기서 $V_{max}, V_{min}$은 신호의 최대/최소 전압, $L$은 양자화 레벨의 수($2^n$)이다.)

2.2 매핑 예시

예를 들어, 0V에서 7V 사이의 신호를 8단계($2^3$ bits)로 양자화할 때의 매핑은 다음과 같다.

아날로그 입력 범위 (V) 양자화 레벨 (Index) 디지털 출력 값 (Binary) 대표값 (Quantized Value)
$0.0 \le V < 1.0$ 0 000 0.5V
$1.0 \le V < 2.0$ 1 001 1.5V
$2.0 \le V < 3.0$ 2 010 2.5V
$3.0 \le V < 4.0$ 3 011 3.5V
$4.0 \le V < 5.0$ 4 100 4.5V
$5.0 \le V < 6.0$ 5 101 5.5V
$6.0 \le V < 7.0$ 6 110 6.5V
$7.0 \le V \le 7.0$ 7 111 7.0V

3. 양자화 방식의 종류

양자화 방식은 양자화 간격 $\Delta$를 일정하게 유지하느냐에 따라 크게 두 가지로 나뉜다.

3.1 균일 양자화 (Uniform Quantization)

모든 구간에서 양자화 간격이 동일한 방식이다. 구현이 매우 간단하며, 신호의 진폭 분포가 균일할 때 효율적이다.

3.2 비균일 양자화 (Non-uniform Quantization)

신호의 특성에 따라 구간별로 양자화 간격을 다르게 설정하는 방식이다. 일반적으로 작은 진폭 영역에서는 간격을 좁게(정밀하게), 큰 진폭 영역에서는 간격을 넓게 설정하여 효율을 높인다. 대표적으로 오디오 통신에 사용되는 $\mu$-law, A-law 알고리즘이 있다.

3.3 비교 요약

구분 균일 양자화 비균일 양자화
간격 ($\Delta$) 모든 구간에서 일정함 입력 값에 따라 가변적임
복잡도 낮음 (단순 매핑) 높음 (비선형 변환 필요)
장점 설계 및 구현이 용이함 작은 신호에 대한 정밀도 향상
단점 작은 신호에서 상대적 오차 큼 구현 회로/알고리즘이 복잡함
주요 사례 일반적인 PCM 오디오 전화망 음성 전송 (G.711)

4. 양자화 오차와 잡음

양자화는 연속적인 값을 근사치로 변환하는 과정이므로, 필연적으로 원래의 값과 변환된 값 사이에 차이가 발생한다.

4.1 양자화 오차 (Quantization Error)

양자화 오차 $e(n)$은 원래의 샘플 값 $x(n)$과 양자화된 값 $\hat{x}(n)$의 차이로 정의된다. $$e(n) = \hat{x}(n) - x(n)$$ 일반적으로 균일 양자화에서 오차의 범위는 $-\frac{\Delta}{2} \le e(n) \le \frac{\Delta}{2}$ 사이에 분포한다.

[양자화 오차 시각화 개념]

진폭 (V)
  ^
  |      /--\          <-- 원래 신호 (Original Signal)
  |   --/    \--
  |  |  _--_    |      <-- 양자화된 신호 (Quantized Signal, 계단 모양)
  |  | /    \   |
  |  |/      \  |
  +-------------------> 시간 (t)
  |  ||||||||||||      <-- 양자화 오차 (Error = Original - Quantized)
  |  (톱니바퀴 모양의 잡음 발생)

4.2 양자화 잡음 (Quantization Noise)

이러한 오차가 시간축으로 연속되어 나타날 때, 이는 신호에 섞이는 잡음(Noise)의 형태로 인지된다. 특히 신호의 진폭이 매우 작을 때 양자화 오차가 신호 자체의 크기와 비슷해지면 '[신호 대 잡음비]'가 낮아져 음질이나 화질이 급격히 저하된다.

5. 성능 개선 기법

양자화로 인한 정보 손실과 잡음을 최소화하기 위해 다음과 같은 기법들이 사용된다.

5.1 디더링 (Dithering)

디더링은 양자화 전 신호에 의도적으로 매우 작은 무작위 잡음(Random Noise)을 추가하는 기법이다. 이는 양자화 오차가 신호와 상관관계를 가져 발생하는 '양자화 왜곡(Quantization Distortion)'을 무작위 잡음으로 분산시켜, 인간의 청각/시각 시스템이 더 자연스럽게 느끼도록 만든다.

5.2 비트 심도(Bit Depth)와 SNR

비트 심도가 증가할수록 양자화 레벨 $L$이 지수적으로 증가($L = 2^n$)하여 양자화 간격 $\Delta$가 줄어들고, 결과적으로 SNR이 향상된다.

[비트 심도별 이론적 SNR 변화] (기준: 최대 진폭의 사인파 신호, $\text{SNR} \approx 6.02n + 1.76 \text{ dB}$)

비트 심도 (Bit Depth) 양자화 레벨 ($2^n$) 이론적 SNR (dB) 비고
8-bit 256 $\approx 49.92$ 전화기 수준의 음질
16-bit 65,536 $\approx 98.08$ CD 표준 음질
24-bit 16,777,216 $\approx 146.24$ 스튜디오 레코딩 수준

6. 딥러닝 양자화 (Deep Learning Quantization)

최근 인공지능 분야에서는 모델의 크기를 줄이고 추론 속도를 높이기 위해 가중치(Weight)와 활성화 함수(Activation) 값을 양자화하는 기법이 필수적으로 사용된다.

6.1 주요 기법

  • PTQ (Post-Training Quantization): 학습이 완료된 모델의 가중치를 사후에 양자화하는 방식이다. 별도의 재학습 없이 캘리브레이션(Calibration) 데이터셋을 통해 최적의 스케일 팩터를 찾아 변환한다. 추가 학습이 필요 없어 매우 빠르지만, 정밀도 하락(Accuracy Drop)이 발생할 수 있다.
  • QAT (Quantization-Aware Training): 학습 과정에서 양자화로 인한 오차(Quantization Error)를 모델이 직접 학습하도록 하는 방식이다. 가짜 양자화(Fake Quantization) 노드를 삽입하여 손실 함수에 반영함으로써, 양자화 후에도 성능 저하가 거의 없도록 최적화한다. PTQ보다 정확도가 높지만 학습 시간이 추가로 소요된다.

6.2 데이터 타입 변환

일반적으로 딥러닝 모델은 32비트 [부동소수점]을 사용하지만, 이를 8비트 정수(INT8)나 16비트 부동소수점(FP16, BF16)으로 변환하여 메모리 사용량을 1/2 ~ 1/4로 절감한다. * FP16: 16비트 부동소수점으로 메모리를 절약하지만, 표현 범위가 좁아 Overflow/Underflow 위험이 있다. * BF16 (Bfloat16): FP32와 동일한 지수부 범위를 가져 학습 안정성이 높으며, 구글 TPU 등 최신 가속기에서 널리 사용된다.

[FP32 $\rightarrow$ INT8 변환 예시] 부동소수점 값 $x$를 정수 $q$로 변환하는 선형 양자화 식은 다음과 같다. $$q = \text{round}\left(\frac{x}{\text{scale}} + \text{zero\_point}\right)$$ - 예시: $x = 0.75$, $\text{scale} = 0.01$, $\text{zero\_point} = 0$ 일 때 $\rightarrow q = \text{round}(75) = 75$

7. 주요 활용 분야 및 구현

양자화는 데이터 압축과 효율적인 하드웨어 구현을 위해 거의 모든 디지털 신호 처리 분야에서 활용된다.

  • 오디오 코덱: MP3, AAC 등은 인간이 듣지 못하는 주파수 영역을 제거하고 양자화하여 용량을 줄인다.
  • 이미지 압축: JPEG 표준은 DCT(이산 코사인 변환) 이후 계수들을 양자화 테이블을 통해 0에 가깝게 만들어 압축률을 높인다.
  • 에지 컴퓨팅: 모바일 기기나 임베디드 시스템에서 딥러닝 모델을 구동하기 위해 INT8 양자화 모델을 사용한다.

7.1 선형 양자화 파이썬 구현 예제

아래 코드는 부동소수점 데이터를 특정 비트 심도의 정수형 데이터로 변환하는 간단한 선형 양자화 과정이다.

import numpy as np

def linear_quantization(x, bits=8):
    # 1. 입력 데이터의 최소/최대값 확인
    x_min, x_max = np.min(x), np.max(x)
    
    # 2. 양자화 레벨 계산 (2^bits)
    levels = 2**bits - 1
    
    # 3. 스케일 팩터(Scale Factor) 계산
    scale = (x_max - x_min) / levels
    
    # 입력값이 모두 동일하여 scale이 0이 되는 경우 예외 처리
    if scale == 0:
        scale = 1
    
    # 4. 양자화 수행: (값 - 최소값) / 스케일 후 반올림
    quantized = np.round((x - x_min) / scale).astype(np.int32)
    
    # 5. 역양자화(Dequantization) 수행: 원래 스케일로 복원
    dequantized = (quantized * scale) + x_min
    
    return quantized, dequantized

# 테스트 데이터 생성
signal = np.array([0.1, 0.5, 1.2, 2.8, 3.1], dtype=np.float32)
q_val, dq_val = linear_quantization(signal, bits=3)

print(f"Original: {signal}")
print(f"Quantized (3-bit): {q_val}")
print(f"Dequantized: {dq_val}")

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?