양자화란 무엇인가?
양자화(Quantization)의 핵심은 연속적인 값을 이산적인 값으로 변환하는 것입니다. 마치 아날로그 신호를 디지털 신호로 바꾸는 것과 같은 원리죠.
1. 연속적 vs 이산적: 실수에서 정수로
신경망의 가중치와 활성화 값은 원래 실수(real number) 형태입니다. FP32로 표현된 값은 3.141592, -0.00123, 2.71828처럼 소수점 이하로 매우 정밀하게 표현됩니다. 이론적으로는 무한히 많은 값을 표현할 수 있죠. 하지만 INT8은 정수(integer)만 표현합니다. -128부터 127까지, 딱 256개의 값만 사용할 수 있습니다.
양자화는 바로 이 과정입니다:
- 입력: 3.7, -1.2, 0.5, 2.9 같은 연속적인 실수 값들
- 출력: -128, -64, 0, 127 같은 이산적인 정수 값들
FP32 vs INT8: 표현 범위의 차이
FP32 (32비트 부동소수점):
- 표현 가능한 값의 개수: 약 2^32 = 42억 개
- 표현 범위: 약 -3.4×10^38 ~ 3.4×10^38
- 정밀도: 소수점 이하 약 7자리
- 예시: 3.1415927, -0.0000123, 1234567.89
INT8 (8비트 정수):
- 표현 가능한 값의 개수: 2^8 = 256개
- 표현 범위: -128 ~ 127 (signed) 또는 0 ~ 255 (unsigned)
- 정밀도: 정수만 가능, 소수점 없음
- 예시: -128, -64, 0, 127
차이가 극명합니다. FP32는 42억 개의 서로 다른 값을 표현할 수 있지만, INT8은 단 256개만 표현할 수 있습니다.
정보 손실은 불가피하지만 제어 가능
42억 개를 256개로 줄이는 과정에서 정보 손실은 피할 수 없습니다. 이를 양자화 오차(quantization error)라고 합니다. 예를 들어 볼까요? 다음과 같은 실수 값들이 있다고 가정합니다.
원본 FP32 값: [3.7, 3.8, 3.9, 4.0, 4.1, 4.2, 4.3]
이들을 INT8로 변환하면
양자화된 INT8 값: [4, 4, 4, 4, 4, 4, 4]
7개의 서로 다른 값이 모두 하나의 정수 4로 변환되었습니다. 원래 값들 간의 미세한 차이는 사라졌죠. 이것이 정보 손실입니다. 하지만 신경망은 이 손실에 놀랍도록 강인합니다. 왜일까요?
1. 신경망은 이미 노이즈에 강합니다
신경망 학습 과정에는 의도적으로 노이즈를 주입하는 여러 기법들이 사용됩니다.
드롭아웃(Dropout):
- 학습 중 랜덤하게 뉴런의 50%를 "꺼버립니다"
- 예: 100개 뉴런 중 50개를 무작위로 0으로 만듦
- 이는 엄청난 노이즈입니다. 절반의 정보가 사라지는 것이니까요. 그런데도 네트워크는 정상적으로 학습합니다.
데이터 증강(Data Augmentation):
- 이미지를 회전, 뒤집기, 밝기 조절 등으로 변형
- 원본 이미지의 픽셀 값이 ±20% 정도 변하기도 함
- 하지만 네트워크는 "고양이"를 여전히 "고양이"로 인식
배치 정규화(Batch Normalization):
- 미니배치마다 통계량(평균, 분산)이 달라짐
- 같은 입력이라도 배치 구성에 따라 정규화 결과가 다름
- 또 하나의 노이즈 소스
구체적 예시:
원본 가중치: [0.523, -0.741, 0.892, -0.321]
양자화 후: [0.520, -0.740, 0.890, -0.320]
오차: [0.003, -0.001, 0.002, -0.001]
드롭아웃(50%): [0.523, 0.000, 0.892, 0.000]
변화: [0.000, -0.741, 0.000, -0.321]
드롭아웃이 주는 변화(값 자체를 0으로)와 비교하면, 양자화 오차(0.001~0.003)는 훨씬 작습니다. 물론 드롭아웃은 학습 시에만 적용되고 추론 시에는 모든 뉴런을 사용하기 때문에, 양자화 오차와는 다른 종류의 노이즈입니다. 하지만 중요한 점은 드롭아웃으로 학습된 네트워크의 구조적 특성입니다.
드롭아웃과 양자화 오차의 관계
먼저 중요한 구분을 해야 합니다. 드롭아웃과 양자화 오차는 다른 종류의 노이즈입니다.
드롭아웃:
- 학습 시에만 적용됨
- 추론 시에는 모든 뉴런 사용
- 일시적이고 무작위적인 노이즈
양자화 오차:
- 추론 시에 영구적으로 존재
- 가중치가 실제로 변경됨
- 고정된 체계적 오차
그렇다면 왜 "드롭아웃을 견뎌낸 네트워크가 양자화에도 강하다"고 할 수 있을까요?
핵심 메커니즘: 중복성(Redundancy)의 학습
드롭아웃이 양자화에 도움이 되는 진짜 이유는 중복성을 강제로 학습시키기 때문입니다.
드롭아웃 없이 학습할 때:
입력 → 뉴런A(가중치 2.0) → 출력
뉴런B(가중치 0.1) ↗
뉴런A가 주로 일하고, 뉴런B는 거의 기여 안 함
→ 뉴런A에 의존적인 구조
만약 뉴런A의 가중치가 2.0 → 1.8로 변하면 출력이 크게 변합니다.
드롭아웃으로 학습할 때:
학습 중 무작위로:
- 50% 확률로 뉴런A를 끔 → 뉴런B만으로 학습
- 50% 확률로 뉴런B를 끔 → 뉴런A만으로 학습
결과:
뉴런A(가중치 1.2) → 출력
뉴런B(가중치 1.1) ↗
둘 다 비슷하게 기여
이제 뉴런A의 가중치가 1.2 → 1.15로 조금 변해도:
- 뉴런B가 1.1로 여전히 기여
- 전체 출력 = 1.15 + 1.1 = 2.25 (원래 2.3)
- 약 2% 차이 → 영향 작음
수학적 관점: 손실 함수의 평탄성(Flatness)
드롭아웃이 학습한 네트워크는 손실 함수의 평탄한(flat) 최소점에 도달합니다.
날카로운(Sharp) 최소점 (드롭아웃 없음):
Loss
|
| /\
| / \
|___/____\___ 가중치
가중치가 조금만 변해도 Loss가 크게 증가
평탄한(Flat) 최소점 (드롭아웃 있음):
Loss
|
| ____
| / \
|__/______\__ 가중치
가중치가 변해도 Loss는 비슷
양자화는 가중치를 조금 변화시키는데, 평탄한 최소점에 있으면 Loss 증가가 작습니다.
실험적 증거
실험 1: 드롭아웃 유무에 따른 양자화 성능
ResNet-50를 두 가지 방법으로 학습
- 드롭아웃 없음: 정확도 76.5%
- INT8 양자화 후: 73.2% (3.3%p 하락)
- 드롭아웃 0.5: 정확도 76.1%
- INT8 양자화 후: 75.4% (0.7%p 하락)
드롭아웃으로 학습한 모델이 양자화에 훨씬 강인합니다.
실험 2: 가중치 섭동(Perturbation) 테스트
각 가중치에 랜덤 노이즈를 추가:
$ w_{new} = w_{original} + ε × N(0,1) $
- 드롭아웃 없음: ε = 0.01에서 정확도 5%p 하락
- 드롭아웃 있음: ε = 0.01에서 정확도 1%p 하락
드롭아웃이 가중치 변화에 대한 견고성(robustness)을 학습시켰습니다.
정확하게는 드롭아웃 → 중복성 학습 → 가중치 섭동에 강인 → 양자화 오차에도 강인 즉, 드롭아웃 자체가 양자화 오차와 비슷하다기보다는, 드롭아웃이 학습시킨 네트워크의 구조적 특성(중복성, 평탄한 최소점)이 양자화에 유리하다는 것입니다.
추가: 다른 정규화 기법들도 유사한 효과
흥미롭게도, 드롭아웃뿐만 아니라
- 데이터 증강: 입력 변화에 강인 → 내부 표현도 강인
- L2 정규화: 가중치를 작게 유지 → 양자화 오차의 절대값도 작아짐
- 배치 정규화: 활성화 값 안정화 → 양자화 범위 예측 가능
이 모든 기법들이 네트워크를 robust하게 만들고, 그 결과 양자화에도 강인해집니다.
2. 양자화의 핵심: 적절한 매핑 찾기
양자화의 성공 여부는 "어떻게 매핑하느냐"에 달려 있습니다.
잘못된 매핑의 예:
FP32 범위 [-100, 100] → INT8 [-128, 127]로 직접 매핑
실제 값들이 [-2, 2] 사이에 몰려있다면?
→ 대부분의 값이 0 근처의 몇 개 정수로만 표현됨
→ 엄청난 정보 손실 발생
올바른 매핑의 예:
실제 값 범위 [-2, 2]를 확인
→ 이 범위를 INT8 [-128, 127] 전체에 매핑
→ 256개의 정수를 최대한 효율적으로 활용
→ 정보 손실 최소화
이처럼 실제 데이터 분포를 고려한 최적의 매핑을 찾는 것이 양자화의 핵심입니다. 그렇다면 구체적으로 어떻게 매핑할까요? 그 방법은 다음 글에서 다룰 Affine Quantization에 있습니다.
'Model Lightening > Model Compression' 카테고리의 다른 글
| AI 모델 양자화 기초 [5] - 실전: Convolutional Layer (0) | 2026.02.16 |
|---|---|
| AI 모델 양자화 기초 [4] - Scale과 Zero-point의 비밀 (0) | 2026.02.16 |
| AI 모델 양자화 기초 [3] - Affine Quantization의 수학적 원리 (0) | 2026.02.15 |
| AI 모델 양자화 기초 [1] - 왜 양자화가 필요한가 (0) | 2026.02.15 |
| 모델 압축과 모델 경량화 (0) | 2025.09.23 |