
이미 학습(Training)이 끝나서 높은 정확도를 달성한 모델(예: FP32 부동소수점)을 추가 학습 없이(또는 아주 최소한의 보정 과정만) 정수형(예: int8, int4)으로 변환하여 추론 속도나 메모리 사용량을 줄이는 것이 PTQ의 목표임.
“추가 학습”이 없다는 것은, 오리지널 model의 parameter를 바꾸는 식의 Gradient Descent(Backprop) 같은 과정을 거치지 않는다는 뜻.
모델은 3개의 레이어로 구성: 레이어1 → 레이어2 → 레이어3.
이미 FP32로 학습되어 99% 정확도를 달성하고 있음.
가중치(Weights) 통계 수집
레이어1, 2, 3 각각의 FP32 가중치 텐서(예: Conv나 FC의 파라미터)에 대해, 를 조사하거나, 좀 더 발전된 방식으로는 퍼센타일 클리핑(Percentile Clipping), KL Divergence 등을 활용하여 적절한 클리핑 범위를 구함.
양자화 파라미터(Scale, Zero-Point) 계산
각 레이어의 FP32 가중치를, 위에서 구한 스케일과 제로포인트를 사용해 정수(int4) 값으로 변환.
이렇게 하면 가중치는 이미 정수 4비트 형태로 변환됨.
아직까지 활성화(Activation)는 FP32 상태로 둔 채, 가중치만 정수로 바뀐 상태에서 모델을 구동해볼 수 있음.
이제 레이어1에 입력이 들어가고, 레이어1의 정수 가중치와 곱해져서 중간 출력(활성화, 아직은 FP32)이 나옴.
레이어2, 레이어3도 마찬가지로 정수 가중치를 사용하여 중간 출력을 생성함.
레이어1 출력, 레이어2 출력, 레이어3 출력 각각에 대해 최소/최대값 (혹은 히스토그램, 퍼센타일 등) 추적.
이것이 활성화의 분포를 파악하는 과정임.
예: 레이어1의 활성화 범위가 정도 나왔다면, 이를 int8 (예: ) 범위에 매핑할 수 있도록 scale과 zero-point를 구함.
레이어2, 레이어3도 마찬가지로 해당 활성화 분포에 맞춰 scale/zero-point 계산.
"PTQ는, 사전 학습된 모델을 별도의 재학습 없이 정수로 변환하기 위해, 소량의 캘리브레이션 데이터로 가중치/활성화의 분포를 분석하여 (스케일, 클리핑 범위 등) 최적 파라미터를 구하고, 이 값에 맞춰 반올림해 정확도 손실을 최소화하는 과정이다."
“PTQ로 양자화된 모델의 추론은, 대개 (1) 입력을 정수화 → (2) 정수 가중치와 정수 연산 → (3) 결과 활성화도 정수로 다시 클리핑 → (4) 다음 레이어로 전달 … 식으로 진행하며, 필요 시 처음/마지막 단계에서만 FP로 변환한다.”