[논문 리뷰] 39. A Survey of Quantization Methods for Efficient Neural Network Inference
양자화 관련해서 공부를 시작해보려고 서베이논문 체크
추상적인 수학적 계산이 디지털 컴퓨터에서 계산으로 적응되자마자, 해당 계산에서의 수치 값을 효율적으로 표현, 조작, 그리고 전달하는 문제가 등장
수치 표현 문제와 밀접한 관련이 있는 문제는 양자화 문제로, 연속적인 실수 값을 어떻게 고정된 이산 값 집합으로 분배해야 비트 수를 최소화하고 동시에 관련 계산의 정확성을 극대화할 수 있는지에 관한 것
이러한 양자화 문제는 메모리나 계산 자원이 심각하게 제한될 때 특히 중요하며, 최근 몇 년간 컴퓨터 비전, 자연어 처리 및 관련 분야에서 신경망 모델의 놀라운 성과로 인해 주목받고 있음
부동소수점 표현에서 4비트 이하로 표현되는 저정밀 고정 정수 값으로 이동하면 메모리 사용량과 지연 시간이 16배로 줄어들 가능성이 있으며, 실제로 이러한 응용에서 4배에서 8배의 감소가 종종 실현
(1) 양자화 과정
실수 범위 결정:먼저 변환하려는 실수 값의 최소값과 최대값을 결정
예를 들어, 임베딩 값이 1.0에서 3.0사이에 분포한다고 가정
양자화 레벨 수 설정:사용할 이산 값의 개수(레벨 수)를 설정
예를 들어, 4비트를 사용한다면 2^4=16개의 레벨을 사용할 수 있음
양자화 간격 계산:실수 범위를 양자화 레벨 수로 나눠 각 레벨 간의 간격(step size)을 계산
예: step size=최대값−최소값레벨 수=3.0−1.016=0.125
실수 값 매핑:실수 값을 가장 가까운 이산 값으로 매핑합니다.
예: 1.21.2는 (1.0,1.125,1.25,… )(1.0,1.125,1.25,…) 중 가장 가까운 1.1251.125로 매핑
저장 형식 변경:매핑된 이산 값을 정수 형식(예: 0,1,2,…0,1,2,…)으로 변환해 저장
(2) 양자화 예제
1. 실수 값의 범위:[1.0,3.0] 사이의 실수 값들: 1.2,1.8,2.5
2. 양자화 레벨:4비트 양자화를 적용하므로, 16개의 레벨을 사용합니다.
이산 값: [1.0,1.125,1.25,…,3.0]
양자화 간격:각 레벨 간의 간격은 0.125
실수 값 매핑:1.2→1.125(가장 가까운 값),1.8→1.875, 2.5→2.5 (정확히 해당 레벨).
정수 값 변환:1.125→1, 1.875→7, 2.5→12.
결과적으로, 1.2,1.8,2.5는 정수 값 1,7,12로 변환되어 컴퓨터가 효율적으로 처리할 수 있음
지난 10년간, 다양한 문제에 대한 신경망(Neural Networks, NNs)의 정확도가 크게 향상
이는 종종 매우 과대 매개변수화된(over-parameterized) 모델을 통해 이루어짐
그러나 이러한 과대 매개변수화된 (따라서 매우 큰) 신경망 모델의 정확도는 상당히 증가했지만, 모델의 크기 자체가 너무 커서 많은 자원이 제한된 환경(resource-constrained environments)에서는 이를 배포할 수 없는 문제가 발생
이로 인해 자원 제약 환경에서 저전력 소비와 높은 정확도로 실시간 추론을 요구하는 퍼베이시브(pervasive) 딥러닝을 실현하는 데 어려움
퍼베이시브 딥러닝은 실시간 지능형 헬스케어 모니터링, 자율주행, 오디오 분석, 음성 인식과 같은 광범위한 응용 분야에 중요한 영향을 미칠 것으로 기대
효율적이고 실시간으로 동작하는 신경망을 최적의 정확도로 구현하려면, 신경망 모델의 설계, 학습, 배포 방식을 재구상해야 함
이를 해결하기 위해, 지연 시간(latency), 메모리 사용량(memory footprint), 에너지 소비(energy consumption) 등을 고려하면서도 최적의 정확도/일반화(trade-off between accuracy and generalization)를 제공하기 위한 많은 연구
(a) 효율적인 신경망(NN) 모델 아키텍처 설계
한 가지 연구 방향은 신경망 모델 아키텍처를 마이크로 아키텍처(e.g., depth-wise convolution이나 low-rank factorization 같은 커널 유형) 및 매크로 아키텍처(e.g., residual이나 inception 같은 모듈 유형) 측면에서 최적화하는 데 중점
여기서의 고전적인 기술들은 주로 수작업 검색을 통해 새로운 아키텍처 모듈을 찾는 데 의존했으며, 이는 확장성이 부족함
이에 따라, 모델 크기, 깊이, 또는 너비와 같은 주어진 제약 조건 하에서 적절한 신경망 아키텍처를 자동으로 찾기 위한 AutoML(Automated Machine Learning) 및 NAS(Neural Architecture Search) 방법을 설계하려는 새로운 연구 방향이 등장
(b) 신경망 아키텍처와 하드웨어의 공동 설계(Co-designing NN architecture and hardware together)
최근 또 다른 연구 방향은 특정 대상 하드웨어 플랫폼에 맞게 신경망 아키텍처를 조정하거나 공동 설계(co-design)하는 것
이는 신경망 구성 요소의 오버헤드(지연 시간 및 에너지 소비 측면)가 하드웨어에 따라 달라지기 때문에 중요
예를 들어, 전용 캐시 계층(cache hierarchy)을 갖춘 하드웨어는 대역폭 의존 작업(bandwidth bound operations)을 이러한 캐시 계층이 없는 하드웨어보다 훨씬 효율적으로 실행할 수 있음
신경망 아키텍처 설계와 마찬가지로, 아키텍처-하드웨어 공동 설계의 초기 접근 방식은 전문가가 신경망 아키텍처를 적응시키거나 변경하는 수작업 방식이었으며, 이후 AutoML 및 NAS 기술을 활용한 자동화 방식으로 발전
(c) Pruning
신경망의 메모리 사용량과 계산 비용을 줄이는 또 다른 접근법은 pruning를 적용하는 것
pruning에서는 작은 중요도(saliency)를 가지는 뉴런을 제거하여 희소한 계산 그래프(sparse computational graph)를 생성
여기서 작은 중요도를 가지는 뉴런이란 제거해도 모델 출력 또는 손실 함수에 미치는 영향이 최소화되는 뉴런을 의미
pruning은 크게 비구조적 가지치기(unstructured pruning)와 구조적 가지치기(structured pruning) 로 나눌 수 있음
비구조적 가지치기를 통해서는 작은 중요도를 가진 뉴런을 발생 위치에 상관없이 제거
이러한 접근법은 매우 공격적인 가지치기를 수행할 수 있어 신경망 매개변수의 대부분을 제거하면서도 모델의 일반화 성능에 거의 영향을 미치지 않음
그러나 이 접근법은 희소 행렬 연산(sparse matrix operations)을 초래하며, 이는 가속화가 어려우며 일반적으로 메모리 제약(memory-bound)이 있다는 점
반면에, 구조적 가지치기를 통해 매개변수 그룹(예: 전체 컨볼루션 필터)을 제거
이는 레이어의 입력 및 출력 형태와 가중치 행렬을 변경하여 여전히 밀집 행렬 연산(dense matrix operations)을 허용
하지만 공격적인 구조적 가지치기는 종종 모델의 정확도 저하를 초래
높은 수준의 가지치기 및 희소성을 유지하면서도 최첨단 성능(state-of-the-art performance)을 유지하는 학습 및 추론은 여전히 미해결 문제
d) 지식 증류(Knowledge Distillation)
모델 증류(Model Distillation) [3, 95, 150, 177, 195, 207, 269, 270]는 대형 모델을 훈련시킨 후 이를 소형 모델을 훈련시키는 교사 모델로 사용하는 방법입니다. 학생 모델을 훈련할 때 "하드(hard)" 클래스 레이블 대신 교사 모델이 생성한 "소프트(soft)" 확률을 활용하는 것이 주요 아이디어입니다. 이러한 확률은 입력에 대한 추가 정보를 포함할 수 있습니다. 그러나 많은 증류 관련 연구에도 불구하고, 증류 단독으로 높은 압축 비율을 달성하는 것은 여전히 주요 과제입니다. 양자화 및 프루닝이 INT8 이하의 정밀도로 4배 이상의 압축 비율을 유지할 수 있는 반면, 증류는 공격적인 압축에서는 종종 무시할 수 없는 정확도 저하를 겪습니다. 하지만 증류를 양자화 및 프루닝과 결합하면 큰 성공을 보여주었습니다 [195].
e) 양자화(Quantization)
마지막으로, 양자화는 NN 모델의 훈련 및 추론 모두에서 일관되게 성공을 보여준 접근법입니다. 수치 표현(numerical representation)과 양자화(quantization)의 문제는 디지털 컴퓨팅이 등장했을 때부터 존재했지만, 신경망은 이를 개선할 독특한 기회를 제공합니다. 본 양자화 서베이는 주로 추론에 초점을 맞추고 있지만, 양자화의 중요한 성공 중 하나는 NN 훈련에서도 발견되었습니다 [10, 35, 57, 130, 247]. 특히 **절반 정밀도(half-precision)**와 혼합 정밀도(mixed-precision) 훈련의 돌파구는 AI 가속기에서 처리량을 한 차원 높였습니다. 그러나 절반 정밀도 이하로 내려가는 것은 상당한 튜닝 없이는 매우 어렵습니다. 최근 양자화 연구는 주로 추론에 초점을 맞추고 있으며, 본 논문의 초점도 여기에 있습니다.
f) 양자화와 신경과학(Neuroscience)
NN 양자화와 느슨하게 연관되어 있거나, 일부 연구자들에게는 동기 부여로 작용하는 신경과학 연구는, 인간의 뇌가 정보를 연속적 형태가 아니라 이산적(quantized) 형태로 저장한다고 제안합니다 [171, 236, 240]. 이러한 아이디어의 인기 있는 근거는, 연속적 형태로 저장된 정보는 물리적 환경(예: 열적 잡음, 감각적 잡음, 외부 잡음, 시냅스 잡음 등)에서 항상 존재하는 잡음에 의해 결국 손상된다는 점입니다 [27, 58]. 반면, 이산적 신호 표현은 이러한 저수준 잡음에 대해 더 강인할 수 있습니다. 또한 이산적 표현은 제한된 자원에서의 높은 효율성과 더 높은 일반화 능력을 제공합니다 [128, 138, 242]. 신경과학 문헌에 대한 자세한 검토는 [228]을 참고하십시오.
본 논문의 목표와 구조
이 연구의 목표는 양자화에 사용되는 현재의 방법론과 개념을 소개하고, 이 연구 분야의 도전 과제와 기회를 논의하는 것입니다. 본 논문은 관련 작업 대부분을 다루려 했지만, NN 양자화라는 광범위한 분야에서 짧은 서베이 논문의 페이지 제한 내에서 모든 작업을 논의하는 것은 불가능합니다. 따라서 누락된 논문이 있을 수 있음을 미리 양해 바랍니다.
본 논문의 구조는 다음과 같습니다. 섹션 II에서는 양자화의 간략한 역사를 소개하며, 섹션 III에서는 양자화의 기본 개념을 다룹니다. 이 기본 개념은 대부분의 양자화 알고리즘과 공유되며, 기존 방법을 이해하고 배포하는 데 필요합니다. 이후 섹션 IV에서는 최신 기법(특히 저정밀/혼합 정밀 양자화)을 포함한 고급 주제를 논의합니다. 섹션 V에서는 하드웨어 가속기(특히 엣지 프로세서)에서의 양자화 영향을 논의하며, 마지막으로 섹션 VII에서는 요약 및 결론을 제공합니다.
II. 양자화의 일반 역사 (GENERAL HISTORY OF QUANTIZATION)
Gray와 Neuhoff는 1998년까지의 양자화 역사에 대한 훌륭한 서베이를 작성하였습니다 [76]. 이 논문은 탁월하며 전체를 읽어볼 가치가 있습니다. 그러나 독자의 편의를 위해 주요 내용을 간략히 요약하겠습니다. 양자화는 큰 (종종 연속적인) 값 집합에서 작은 (종종 유한한) 값 집합으로 입력 값을 매핑하는 방법으로, 긴 역사를 가지고 있습니다. 반올림과 절단은 그 전형적인 예입니다. 양자화는 미적분학의 기초와 관련이 있으며, 관련된 방법들은 1800년대 초반(그리고 그 이전)에도 볼 수 있습니다. 예를 들어, 1800년대 초반의 대규모(당시 기준) 데이터 분석을 위한 최소제곱법 및 관련 기법에서 이를 확인할 수 있습니다 [225]. 양자화에 대한 초기 연구는 1867년으로 거슬러 올라가는데, 여기서는 적분 계산을 근사화하기 위해 이산화가 사용되었습니다 [206]. 이후 1897년에는 Shappard가 적분 결과에 미치는 반올림 오류의 영향을 조사하였습니다 [220].
더 최근에는 디지털 신호 처리에서 양자화가 중요한 역할을 해왔습니다. 디지털 신호 처리는 신호를 디지털 형태로 표현하는 과정에서 반올림을 포함하는 경우가 일반적입니다. 또한, 양자화는 실수 값 숫자에 대한 계산을 유한 정밀 산술로 구현하는 수치 해석과 수치 알고리즘 구현에서도 중요한 역할을 합니다.
1948년, 디지털 컴퓨터가 등장하던 무렵에 Shannon은 통신의 수학적 이론에 대한 기념비적인 논문을 작성하였습니다 [215]. 이 논문에서 양자화의 효과와 이를 코딩 이론에서 사용하는 방법이 공식적으로 제시되었습니다. 특히, Shannon은 손실 없는 코딩 이론에서, 동일한 비트를 사용하는 것은 관심 있는 사건이 비균일한 확률을 가질 때 비효율적이라고 주장했습니다. 그는 사건의 확률에 따라 비트 수를 변화시키는 것이 더 최적의 접근 방식이라고 제안했으며, 이 개념은 현재 **가변 비율 양자화(variable-rate quantization)**로 알려져 있습니다. 특히, Huffman 코딩은 이 아이디어에 의해 동기가 부여되었습니다 [109].
1959년의 후속 연구에서 [216], Shannon은 왜곡-비율 함수(distortion-rate functions, 코딩 후 신호 왜곡의 하한을 제공)를 소개했으며, 벡터 양자화(vector quantization)라는 개념을 도입했습니다(이는 Section IV-F에서 간략히 논의됨). 이 개념은 확장되어 실제 통신 응용에서 실용적으로 발전하였습니다 [53, 55, 67, 208]. 이 시기의 신호 처리에서 양자화에 대한 다른 중요한 역사적 연구에는 [188]이 포함되며, 여기에서는 펄스 코드 변조(Pulse Code Modulation, PCM) 개념(샘플링된 아날로그 신호를 근사화/표현/인코딩하기 위해 제안된 펄싱 방법)을 소개하였습니다. 또한, 고해상도 양자화(high-resolution quantization)에 대한 고전적인 결과도 있습니다 [14]. 이러한 주제들에 대한 자세한 논의를 원한다면 [76]을 참고하십시오.
양자화는 연속적인 수학적 양을 포함하는 문제에 대해 수치적 근사를 사용하는 알고리즘에서 약간 다르게 나타납니다. 이 분야 역시 긴 역사를 가지고 있으며, 디지털 컴퓨터의 출현으로 새롭게 관심을 받게 되었습니다. 수치 해석에서 중요한 개념은 **적정성(well-posedness)**이었으며, 이는 지금도 여전히 중요한 개념입니다. 대략적으로 설명하자면, 문제가 적정하다는 것은 (1) 해가 존재하고, (2) 그 해가 유일하며, (3) 그 해가 합리적인 위상에서 입력 데이터에 대해 연속적으로 의존함을 의미합니다. 이러한 문제는 종종 **양호조건 문제(well-conditioned problem)**라고도 불립니다.
이와 같이 주어진 양호조건 문제에 대해 작업하더라도, 특정 알고리즘이 그 문제를 "정확히" 해결하는 방식이 이상화된 의미에서 소음을 포함한 반올림 및 절단 오류의 특성에 의해 실제로는 좋지 않은 성능을 보이는 경우가 종종 있었습니다. 이러한 반올림 오류는 예를 들어 IEEE 부동소수점 표준과 같이 유한한 비트로 실수를 표현하는 것과 관련이 있습니다. 또한, 절단 오류는 반복 알고리즘이 실제로 수행될 수 있는 반복 횟수가 유한하기 때문에 발생합니다. 후자는 "정확한 산술(exact arithmetic)"에서도 중요하며, 연속 수학의 대부분의 문제는 유한한 수의 기본 연산의 순서로 해결될 수 없기 때문입니다. 이러한 문제는 양자화와 관련이 있습니다.
이러한 문제들은 **알고리즘의 수치적 안정성(numerical stability)**이라는 개념으로 이어졌습니다. 예를 들어, 알고리즘 \( f \)가 입력 데이터 \( x \)를 "진짜" 해인 \( y \)로 매핑하려고 시도한다고 해보겠습니다. 그러나 반올림 및 절단 오류로 인해 알고리즘의 출력은 실제로는 \( y^* \)라는 다른 값이 됩니다. 이 경우, 알고리즘의 **전진 오차(forward error)**는 \( \Delta y = y^* - y \)이고, **후진 오차(backward error)**는 \( \Delta x \)로서, \( f(x + \Delta x) = y^* \)를 만족하는 가장 작은 값입니다. 즉, 전진 오차는 정확한 해 또는 진짜 해와 알고리즘이 출력한 값 사이의 차이를 알려주며, 후진 오차는 실제로 알고리즘이 정확히 해결한 입력 데이터가 무엇인지를 알려줍니다. 알고리즘의 전진 오차와 후진 오차는 문제의 조건 수(condition number)와 관련이 있습니다. 이러한 문제들에 대한 자세한 논의는 [237]을 참고하시기 바랍니다.
A. 신경망에서의 양자화 (Quantization in Neural Nets)
수천 편의 논문이 이 주제들에 대해 작성되었을 것이며, 최근의 신경망 양자화 연구가 이전 연구들과 어떻게 다른지 궁금할 수 있습니다. 분명히, 최근에 제안된 많은 "새로운 알고리즘"들은 과거 문헌의 연구와 강한 연관성을 가지며, 일부 경우에는 본질적으로 과거 연구의 재발견에 해당합니다. 그러나 신경망은 양자화 문제에 독특한 도전과 기회를 제공합니다.
첫째, 신경망의 추론과 훈련 모두 계산 집약적입니다. 따라서 숫자 값을 효율적으로 표현하는 것이 특히 중요합니다. 둘째, 현재 대부분의 신경망 모델은 과매개변수화되어 있으므로, 정확도에 영향을 주지 않고 비트 정밀도를 줄일 기회가 충분히 있습니다. 그러나 매우 중요한 차이점 중 하나는, 신경망이 공격적인 양자화와 극단적인 이산화에 대해 매우 강인하다는 점입니다. 여기서 새롭게 생긴 자유도는 관련된 매개변수의 수와 관련이 있으며, 즉, 우리가 과매개변수화된 모델을 다루고 있다는 점입니다. 이는 우리가 적정 문제(well-posed problem)를 해결하고 있는지, 전진 오차(forward error) 또는 후진 오차(backward error)에 관심이 있는지 등과 같은 문제에 직접적인 영향을 미칩니다.
최근 양자화 연구의 동인이 되는 신경망 응용에서 단일한 적정 문제 또는 양호조건 문제(well-conditioned problem)가 해결되고 있는 것은 아닙니다. 대신, 분류 품질, 당혹도(perplexity) 등을 기반으로 한 일종의 전진 오차 메트릭에 관심이 있습니다. 그러나 과매개변수화로 인해, 이러한 메트릭을 정확히 또는 근사적으로 최적화하는 매우 다양한 모델들이 존재합니다. 따라서, 양자화된 모델과 원래 비양자화된 모델 사이에 높은 오차/거리가 존재하면서도 여전히 매우 우수한 일반화 성능을 달성할 수 있습니다. 이러한 추가적인 자유도는 대부분의 고전 연구에는 존재하지 않았으며, 고전 연구는 대체로 신호를 크게 변화시키지 않는 압축 방법을 찾거나 "정확한" 계산과 "이산화된" 계산 간의 차이를 강하게 제어하는 수치 방법에 초점을 맞추었습니다. 이 점이 바로 신경망 양자화를 위한 새로운 기술을 연구하는 주요 원동력이 되어 왔습니다.
마지막으로, 신경망 모델의 계층 구조는 추가적인 차원을 탐구할 수 있는 기회를 제공합니다. 신경망의 서로 다른 계층들은 손실 함수에 서로 다른 영향을 미치며, 이는 양자화에 있어 혼합 정밀도 접근법(mixed-precision approach)을 고무시킵니다.
---
### III. 양자화의 기본 개념
이 섹션에서는 III-A에서 공통 표기법과 문제 설정을 간략히 소개한 후, III-B부터 III-F까지 양자화의 기본 개념과 방법을 설명합니다. 이후 III-G에서는 다양한 미세 조정 방법을 논의하며, III-H에서는 확률적 양자화에 대해 다룹니다.
#### A. 문제 설정과 표기법
신경망(NN)이 학습 가능한 매개변수 {W₁, W₂, ..., W_L}을 가지고 있다고 가정하며, 이 매개변수들의 조합을 θ로 나타냅니다. 일반성을 잃지 않고, 우리는 감독 학습 문제에 초점을 맞춥니다. 여기서 명목적인 목표는 다음과 같은 경험적 위험 최소화 함수를 최적화하는 것입니다:
\[
L(θ) = \frac{1}{N} \sum_{i=1}^{N} l(x_i, y_i; θ), \tag{1}
\]
여기서 (x, y)는 입력 데이터와 해당 레이블이며, \( l(x, y; θ) \)는 손실 함수(예: 평균 제곱 오차 또는 교차 엔트로피 손실), \( N \)은 데이터 포인트의 총 개수입니다. 또한 i번째 층의 입력 숨겨진 활성화는 \( h_i \), 출력 숨겨진 활성화는 \( a_i \)로 나타냅니다. 우리는 훈련된 모델 매개변수 θ가 부동소수점 정밀도로 저장되어 있다고 가정합니다.
양자화의 목표는 매개변수(θ)와 중간 활성화 맵(즉, \( h_i, a_i \))의 정밀도를 낮은 정밀도로 줄이면서도 모델의 일반화 능력과 정확성에 미치는 영향을 최소화하는 것입니다. 이를 위해 부동소수점 값을 양자화된 값으로 매핑하는 양자화 연산자를 정의해야 합니다. 이 내용은 다음에서 설명됩니다.
---
#### B. 균일 양자화 (Uniform Quantization)
먼저, 신경망(NN)의 가중치와 활성화를 유한한 값 집합으로 양자화할 수 있는 함수를 정의해야 합니다. 이 함수는 부동소수점 실수 값을 입력으로 받아 낮은 정밀도의 범위로 매핑합니다. 이는 그림 1에서 예시로 보여집니다. 양자화 함수로 널리 사용되는 선택지는 다음과 같습니다:
\[
Q(r) = \text{Int} \left( \frac{r}{S} \right) - Z, \tag{2}
\]
여기서 \( Q \)는 양자화 연산자이고, \( r \)은 실수형 입력(활성화 또는 가중치), \( S \)는 실수형 스케일링 계수, \( Z \)는 정수형 영점입니다. 또한, Int 함수는 반올림 연산(예: 근접한 정수로 반올림 또는 절단)을 통해 실수 값을 정수 값으로 변환합니다. 본질적으로 이 함수는 실수 \( r \)을 정수 값으로 매핑합니다.
이 양자화 방법은 결과적으로 양자화된 값(즉, 양자화 수준)이 균일한 간격을 가지기 때문에 **균일 양자화**라고 불립니다(그림 1, 왼쪽). 반면에, 비균일 양자화는 양자화 값이 반드시 균일한 간격을 가지지 않을 수 있으며, 이는 III-F에서 더 자세히 다룰 예정입니다.
양자화된 값 \( Q(r) \)로부터 실수 \( r \)을 복원하는 작업은 흔히 **역양자화(dequantization)**라고 불리며, 다음과 같이 표현됩니다:
\[
\tilde{r} = S(Q(r) + Z). \tag{3}
\]
복원된 실수 값 \( \tilde{r} \)은 반올림 연산으로 인해 원래 \( r \)과 정확히 일치하지 않을 수 있습니다.
#### C. 대칭 양자화와 비대칭 양자화 (Symmetric and Asymmetric Quantization)
균일 양자화에서 중요한 요소 중 하나는 식 (2)에서의 **스케일링 계수 \( S \)**의 선택입니다. 이 스케일링 계수는 주어진 실수 범위 \( r \)을 여러 구간으로 나눕니다([113, 133] 참고):
\[
S = \frac{\beta - \alpha}{2^b - 1}, \tag{4}
\]
여기서 \([α, β]\)는 클리핑 범위를 나타내며, 이는 실수 값을 제한하는 경계 범위입니다. \( b \)는 양자화 비트 너비를 의미합니다. 따라서 스케일링 계수를 정의하려면 먼저 클리핑 범위 \([α, β]\)를 결정해야 합니다. 이 범위를 선택하는 과정을 **캘리브레이션(calibration)**이라고 합니다.
간단한 선택 방법은 신호의 최소/최대 값을 클리핑 범위로 사용하는 것입니다. 즉, \( α = r_{\text{min}}, \, β = r_{\text{max}} \)로 설정합니다. 이 접근 방식은 클리핑 범위가 원점에 대해 대칭적이지 않을 수 있으므로 **비대칭 양자화**로 간주됩니다(그림 2, 오른쪽 참고).
대칭 양자화는 대칭 클리핑 범위를 선택하여 \( α = -β \)로 설정할 수 있습니다. 널리 사용되는 선택 방법은 신호의 최소/최대 값을 기반으로 \( -α = β = \max(|r_{\text{max}}|, |r_{\text{min}}|) \)로 정의하는 것입니다.
비대칭 양자화는 대칭 양자화에 비해 더 좁은 클리핑 범위를 가지는 경우가 많습니다. 이는 특히 ReLU 활성화 함수 이후처럼 항상 비음수 값을 가지는 활성화와 같이 가중치 또는 활성화가 불균형한 경우에 중요합니다.
반면, 대칭 양자화를 사용하면 식 (2)의 영점 \( Z \)를 \( 0 \)으로 설정할 수 있으므로 양자화 함수가 단순화됩니다:
\[
Q(r) = \text{Int} \left( \frac{r}{S} \right). \tag{5}
\]
여기에는 스케일링 계수 \( S \)를 선택하는 두 가지 방법이 있습니다:
1. **"전체 범위" 대칭 양자화**: \( S = \frac{\max(|r|)}{2^{n-1}} \) (바닥 내림 모드)로 설정하여 INT8의 전체 범위 \([-128, 127]\)를 사용합니다.
2. **"제한된 범위" 대칭 양자화**: \( S = \frac{\max(|r|)}{2^{n-1} - 1} \)로 설정하여 \([-127, 127]\) 범위만 사용합니다.
예상대로, 전체 범위 방식이 더 높은 정확성을 제공합니다. 대칭 양자화는 주로 가중치 양자화에 널리 사용됩니다. 이는 영점 제거가 추론 중 계산 비용을 줄이고, 구현을 더 단순화하기 때문입니다[255]. 그러나 비대칭 활성화에서 발생하는 상수 항은 편향에 흡수되거나 누산기의 초기값으로 사용할 수 있습니다[15].
대칭 및 비대칭 양자화 모두에서 신호의 최소/최대 값을 사용하는 것이 일반적입니다. 하지만 이 방법은 활성화에 존재하는 이상치(outlier)에 민감할 수 있습니다. 이상치는 불필요하게 범위를 증가시켜 양자화 해상도를 낮출 수 있습니다.
이를 해결하기 위한 한 가지 방법은 최소/최대 값 대신 백분위수를 사용하는 것입니다[172]. 즉, 가장 큰/작은 값 대신 \( i \)번째로 큰/작은 값을 \( β/α \)로 사용합니다. 또 다른 방법은 실수 값과 양자화 값 간의 KL 발산(즉, 정보 손실)을 최소화하도록 \( α \)와 \( β \)를 선택하는 것입니다[176]. 다양한 모델에서 다른 캘리브레이션 방법을 평가한 [255]를 참고하시기 바랍니다.
---
**요약 (대칭 양자화 대 비대칭 양자화)**:
대칭 양자화는 대칭 범위를 사용하여 클리핑을 분할합니다. 이는 구현이 더 간단하며, 식 (2)에서 \( Z = 0 \)으로 설정됩니다. 그러나 범위가 대칭적이지 않거나 치우친 경우에는 비대칭 양자화가 더 적합합니다.
---
#### D. 범위 캘리브레이션 알고리즘: 정적 대 동적 양자화 (Range Calibration Algorithms: Static vs Dynamic Quantization)
지금까지 우리는 \([α, β]\) 클리핑 범위를 결정하는 다양한 캘리브레이션 방법에 대해 논의했습니다. 양자화 방법의 또 다른 중요한 차이점은 **클리핑 범위를 결정하는 시점**입니다. 이 범위는 가중치의 경우 정적으로 계산될 수 있는데, 이는 대부분의 경우 추론 중에 매개변수가 고정되기 때문입니다. 하지만 활성화 맵은 입력 샘플 \(x\)(식 1 참조)마다 다르기 때문에 활성화를 양자화하는 두 가지 접근 방식이 있습니다: **동적 양자화**와 **정적 양자화**입니다.
- **동적 양자화**
동적 양자화에서는 런타임 동안 각 활성화 맵에 대해 이 범위를 동적으로 계산합니다. 이 접근 방식은 신호 통계(최소값, 최대값, 백분위수 등)를 실시간으로 계산해야 하므로 매우 높은 오버헤드를 초래할 수 있습니다. 하지만 동적 양자화는 각 입력에 대해 신호 범위를 정확히 계산하기 때문에 더 높은 정확성을 제공합니다.
- **정적 양자화**
정적 양자화는 클리핑 범위를 사전에 계산하고 추론 중에는 고정된 상태로 유지합니다. 이 접근 방식은 추가적인 계산 오버헤드를 발생시키지 않지만, 동적 양자화에 비해 일반적으로 정확도가 낮습니다. 정적 양자화를 위한 일반적인 사전 계산 방법은 일련의 캘리브레이션 입력을 실행하여 활성화의 일반적인 범위를 계산하는 것입니다[113, 267].
최적의 범위를 찾기 위해 제안된 다양한 메트릭에는 **원래 비양자화 가중치 분포와 이에 상응하는 양자화 값 간의 평균 제곱 오차(MSE)를 최소화**하는 방법[40, 221, 229, 281]이 포함됩니다. 또는 엔트로피[189]와 같은 다른 메트릭을 사용할 수도 있지만, MSE가 가장 일반적으로 사용됩니다. 또 다른 방법은 신경망 훈련 중에 클리핑 범위를 학습하거나 강제하는 것입니다[36, 146, 276, 287]. 주요 연구로는 **LQNets**[276], **PACT**[36], **LSQ**[56], **LSQ+**[15] 등이 있으며, 이는 신경망 훈련 중 클리핑 범위와 가중치를 공동으로 최적화합니다.
**요약 (동적 대 정적 양자화)**:
동적 양자화는 각 활성화의 클리핑 범위를 동적으로 계산하여 종종 가장 높은 정확도를 달성합니다. 하지만 신호 범위를 동적으로 계산하는 것은 매우 비용이 많이 들기 때문에, 실무자들은 대부분 모든 입력에 대해 고정된 클리핑 범위를 사용하는 정적 양자화를 선택합니다.
---
#### E. 양자화 세분화 (Quantization Granularity)
대부분의 컴퓨터 비전 작업에서, 한 레이어에 대한 활성화 입력은 여러 컨볼루션 필터와 연산됩니다(그림 3 참고). 이러한 컨볼루션 필터 각각은 서로 다른 값 범위를 가질 수 있습니다. 따라서 양자화 방법의 차이점 중 하나는 **가중치에 대한 클리핑 범위 \([α, β]\)를 계산하는 세분화 수준**입니다. 이를 다음과 같이 분류할 수 있습니다.
a) **레이어 단위 양자화 (Layerwise Quantization)**
이 접근 방식에서는 한 레이어의 모든 컨볼루션 필터 가중치를 고려하여 클리핑 범위를 결정합니다[133](그림 3의 세 번째 열 참고). 여기서 해당 레이어의 전체 매개변수(예: 최소값, 최대값, 백분위수 등)의 통계를 조사한 뒤, 모든 컨볼루션 필터에 동일한 클리핑 범위를 사용합니다.
이 접근 방식은 구현이 매우 간단하지만, 각 컨볼루션 필터의 범위가 크게 다를 수 있기 때문에 최적의 정확도를 제공하지 못하는 경우가 많습니다. 예를 들어, 상대적으로 좁은 범위를 가진 컨볼루션 커널은 동일한 레이어 내에서 더 넓은 범위를 가진 커널로 인해 양자화 해상도를 잃을 수 있습니다.
b) **그룹 단위 양자화 (Groupwise Quantization)**
레이어 내 여러 다른 채널을 그룹으로 묶어 활성화 또는 컨볼루션 커널의 클리핑 범위를 계산할 수 있습니다. 이는 단일 컨볼루션/활성화 내 매개변수 분포가 크게 다를 경우에 유용할 수 있습니다. 예를 들어, Transformer[243] 모델의 완전 연결된 주의(attention) 레이어를 양자화하기 위해 Q-BERT[219]에서 이 접근 방식이 유용하다고 밝혀졌습니다.
그러나 이 접근 방식은 다른 스케일링 계수를 처리해야 하는 추가 비용을 필연적으로 수반합니다.
c) **채널 단위 양자화 (Channelwise Quantization)**
클리핑 범위를 각 컨볼루션 필터별로 고정 값으로 사용하는 것이 일반적인 선택입니다[105, 113, 133, 222, 276, 285](그림 3의 마지막 열 참고). 즉, 각 채널에 전용 스케일링 계수가 할당됩니다. 이는 더 나은 양자화 해상도를 보장하며, 종종 더 높은 정확도를 제공합니다.
d) **서브-채널 단위 양자화 (Sub-channelwise Quantization)**
이전 접근 방식을 극단적으로 확장하여, 컨볼루션 또는 완전 연결 레이어의 매개변수 그룹별로 클리핑 범위를 결정할 수 있습니다. 그러나 이 접근 방식은 단일 컨볼루션 또는 완전 연결 레이어를 처리할 때 서로 다른 스케일링 계수를 고려해야 하기 때문에 상당한 오버헤드를 초래할 수 있습니다. 따라서 그룹 단위 양자화는 양자화 해상도와 계산 오버헤드 간의 타협을 이루는 좋은 선택이 될 수 있습니다.
---
**요약 (양자화 세분화)**
채널 단위 양자화는 현재 컨볼루션 커널을 양자화하는 데 사용되는 표준 방법입니다. 이는 각 개별 커널에 대해 클리핑 범위를 조정할 수 있도록 하며, 오버헤드는 무시할 수 있는 수준입니다. 반면, 서브-채널 단위 양자화는 상당한 오버헤드를 초래할 수 있으며, 현재는 표준 선택이 아닙니다([68]에서 이러한 설계 선택의 트레이드오프를 확인할 수 있습니다).
---
#### F. 비균일 양자화 (Non-Uniform Quantization)
문헌에서는 양자화 단계와 양자화 레벨이 반드시 균일하게 간격을 가지지 않아도 되는 **비균일 양자화**에 대해 다룬 연구들이 존재합니다[25, 38, 62, 74, 79, 99, 118, 125, 153, 159, 179, 189, 190, 238, 248, 256, 264, 266, 276, 284]. 비균일 양자화의 공식 정의는 식 (6)에서 볼 수 있습니다. 여기서 \( X_i \)는 이산 양자화 레벨을, \( \Delta_i \)는 양자화 단계(임계값)를 나타냅니다:
\[
Q(r) = X_i, \quad \text{if } r \in [\Delta_i, \Delta_{i+1}). \tag{6}
\]
구체적으로, 실수 \( r \)의 값이 양자화 단계 \( \Delta_i \)와 \( \Delta_{i+1} \) 사이에 들어오면, 양자화기 \( Q \)는 이를 해당 양자화 레벨 \( X_i \)로 투영합니다. \( X_i \)와 \( \Delta_i \)는 반드시 균일한 간격을 가지지 않을 수 있습니다.
---
비균일 양자화는 **고정된 비트 너비에서 더 높은 정확도**를 달성할 수 있습니다. 이는 중요한 값 영역에 더 집중하거나 적절한 동적 범위를 찾음으로써 분포를 더 잘 포착할 수 있기 때문입니다. 예를 들어, 가중치와 활성화의 **종 모양(bell-shaped)** 분포(종종 긴 꼬리를 포함함)를 처리하기 위해 설계된 많은 비균일 양자화 방법이 있습니다[12, 25, 61, 115, 147, 179].
일반적인 규칙 기반 비균일 양자화 방법으로는 **로그 분포(logarithmic distribution)**를 사용하는 방식이 있으며[179, 283], 이 방식에서는 양자화 단계와 레벨이 선형적으로 증가하는 대신 기하급수적으로 증가합니다. 또 다른 인기 있는 분야는 **이진 코드 기반 양자화(binary-code-based quantization)**입니다[78, 107, 118, 258, 276]. 여기서 실수 벡터 \( r \in \mathbb{R}^n \)은 다음과 같이 표현되어 \( m \)개의 이진 벡터로 양자화됩니다:
\[
r \approx \sum_{i=1}^m \alpha_i b_i,
\]
여기서 \( \alpha_i \in \mathbb{R} \)는 스케일링 계수, \( b_i \in \{-1, +1\}^n \)은 이진 벡터입니다. \( r \)와 \( \sum_{i=1}^m \alpha_i b_i \) 사이의 오류를 최소화하기 위한 닫힌 형식의 해(closed-form solution)는 존재하지 않으므로, 이전 연구들은 **휴리스틱 솔루션(heuristic solutions)**에 의존합니다.
양자화를 더욱 개선하기 위해, 최근 연구[78, 234, 258]는 비균일 양자화를 **최적화 문제(optimization problem)**로 공식화합니다. 식 (7)에서 보이듯이, 양자화기 \( Q \)의 양자화 단계/레벨은 원래 텐서와 양자화된 텐서 간의 차이를 최소화하도록 조정됩니다:
\[
\min \| Q(r) - r \|^2.
\]
또한, 양자화기 자체도 모델 매개변수와 함께 공동 학습될 수 있습니다. 이러한 방법을 **학습 가능한 양자화기(learnable quantizer)**라고 하며, 양자화 단계/레벨은 일반적으로 반복 최적화(iterative optimization)[258, 276] 또는 경사 하강법(gradient descent)[125, 158, 264]으로 학습됩니다.
---
규칙 기반 및 최적화 기반 비균일 양자화 외에도, **클러스터링(clustering)**은 양자화로 인한 정보 손실을 완화하는 데 유용할 수 있습니다. 일부 연구[74, 256]는 k-평균(k-means)을 사용하여 다른 텐서에서 양자화 단계와 레벨을 결정하며, 다른 연구[38]는 가중치에서 성능 손실을 최소화하기 위해 **헤시안 가중치(hessian-weighted) k-평균 클러스터링**을 적용합니다. 추가 논의는 섹션 IV-F에서 다룹니다.
---
**요약 (균일 대 비균일 양자화)**
일반적으로, 비균일 양자화는 매개변수의 범위를 비균일하게 분리하고 비트를 할당함으로써 신호 정보를 더 잘 포착할 수 있습니다. 그러나 비균일 양자화 방식은 GPU 및 CPU와 같은 일반적인 하드웨어에서 효율적으로 배포하기가 어려운 경우가 많습니다. 따라서 균일 양자화는 구현의 단순성과 하드웨어에 효율적으로 매핑할 수 있다는 장점 때문에 현재 사실상 표준 방식(de-facto method)으로 사용되고 있습니다.
G. 미세 조정 방법 (Fine-tuning Methods)
양자화 후 신경망(NN)의 매개변수를 조정해야 할 때가 자주 있습니다. 이는 **모델을 재학습(retraining)**하는 방식으로 수행되며, 이를 **양자화 인식 학습(Quantization-Aware Training, QAT)**이라고 합니다. 또는, 재학습 없이(Post-Training Quantization, PTQ) 수행할 수도 있습니다. 이 두 접근 방식 간의 개략적인 비교는 그림 4에 나타나 있으며, 아래에서 더 자세히 설명됩니다([183]에서 이 주제에 대한 자세한 논의를 참고할 수 있습니다).
- 양자화 인식 학습 (QAT)
훈련된 모델에서 양자화는 훈련된 모델 매개변수에 **교란(perturbation)**을 일으킬 수 있으며, 이는 모델이 부동소수점 정밀도로 훈련될 때 수렴했던 지점에서 멀어지게 할 수 있습니다. 이를 해결하기 위해, 양자화된 매개변수로 NN 모델을 재학습하여 더 나은 손실 지점으로 모델을 수렴하게 할 수 있습니다.
QAT의 일반적인 접근 방식은 부동소수점 정밀도에서 양자화된 모델에 대해 순방향(forward) 및 역방향(backward) 계산을 수행하되, 각 기울기 업데이트 후 매개변수를 양자화하는 것입니다(투영된 경사 하강법과 유사). 특히, 부동소수점 정밀도로 가중치를 업데이트한 뒤 이 투영 과정을 수행하는 것이 중요합니다. 역방향 계산을 부동소수점 정밀도로 수행하는 것이 중요한 이유는, 양자화된 정밀도에서 기울기를 누적하면 제로 기울기(zero-gradient) 또는 높은 오류를 가진 기울기가 발생할 수 있기 때문입니다. 이는 특히 낮은 정밀도 환경에서 문제가 됩니다[42, 80, 81, 107, 159, 186, 204, 231].
요약 (QAT):
QAT는 **STE(Straight Through Estimator)**의 거친 근사에도 불구하고 효과적으로 작동하는 것으로 나타났습니다. 그러나 QAT의 주요 단점은 NN 모델을 재학습하는 데 드는 계산 비용입니다. 특히 낮은 비트 정밀도 양자화의 경우, 정확도를 회복하기 위해 수백 회의 에포크 재학습이 필요할 수 있습니다.
만약 양자화된 모델이 장기간 배포될 예정이고, 효율성과 정확도가 중요하다면 이러한 재학습에 대한 투자가 가치가 있을 가능성이 큽니다. 하지만 모든 경우에 해당하지는 않으며, 일부 모델은 비교적 짧은 수명을 가지기도 합니다. 다음으로, 이러한 오버헤드가 없는 대안 접근 방식에 대해 논의합니다.
2) 사후 학습 양자화 (Post-Training Quantization, PTQ)
QAT 방법의 높은 비용을 대체하기 위한 대안으로 **사후 학습 양자화(PTQ)**가 제안되었습니다. PTQ는 재학습 없이 양자화를 수행하고 가중치를 조정합니다[11, 24, 40, 60, 61, 68, 69, 89, 108, 142, 148, 174, 182, 223, 281]. 따라서 PTQ의 오버헤드는 매우 낮고 종종 무시할 수 있는 수준입니다.
QAT와 달리, PTQ는 재학습을 위해 충분한 양의 훈련 데이터가 필요하지 않으며, 데이터가 제한적이거나 라벨이 없는 상황에서도 적용할 수 있는 이점이 있습니다. 그러나 PTQ는 특히 낮은 정밀도 양자화 환경에서 QAT에 비해 정확도가 낮아질 수 있다는 단점이 있습니다.
PTQ의 정확도 저하를 완화하기 위한 다양한 접근법이 제안되었습니다. 예를 들어:
- [11, 63]은 양자화 후 가중치 값의 평균과 분산에서 내재된 **바이어스(bias)**를 관찰하고 이를 보정하는 방법을 제안합니다.
- [174, 182]는 서로 다른 레이어나 채널 간 **가중치 범위(및 암묵적으로 활성화 범위)**를 균등화하면 양자화 오류를 줄일 수 있음을 보여줍니다.
또한, ACIQ[11]는 PTQ를 위해 최적의 클리핑 범위와 채널별 비트 너비 설정을 분석적으로 계산합니다. 그러나 ACIQ에서 사용된 채널별 활성화 양자화는 하드웨어에서 효율적으로 구현하기 어렵습니다. 이를 해결하기 위해, OMSE 방법[40]은 활성화에서 채널별 양자화를 제거하고, 양자화된 텐서와 이에 상응하는 부동소수점 텐서 간의 L2 거리를 최적화하여 PTQ를 수행하는 방식을 제안합니다.
이상치(outlier)가 PTQ에 미치는 부정적인 영향을 완화하기 위해, [281]에서는 이상치 채널 분리(Outlier Channel Splitting, OCS) 방법을 제안했습니다. 이는 이상치 값을 포함하는 채널을 복제하고 절반으로 나누는 방식입니다.
또한, 주목할 만한 연구로는 AdaRound[181]가 있습니다. 이 연구는 양자화를 위한 단순한 반올림-근사(round-to-nearest) 방식이 비최적 솔루션을 초래할 수 있음을 역설적으로 보여주며, 손실을 더 잘 줄일 수 있는 **적응형 반올림 방법(adaptive rounding method)**을 제안합니다.
AdaRound는 양자화된 가중치의 변화를 부동소수점 기준 값에서 ±1로 제한하지만, AdaQuant[108]는 가중치가 필요한 대로 변경될 수 있도록 허용하는 보다 일반적인 방법을 제안합니다.
PTQ는 극단적으로 훈련 데이터나 테스트 데이터를 전혀 사용하지 않는 경우(즉, 제로샷 시나리오)에도 적용될 수 있으며, 이에 대해서는 이후에 논의됩니다.
요약 (PTQ):
PTQ는 NN 모델을 재학습하지 않고 모든 가중치와 활성화의 양자화 매개변수를 결정합니다. 따라서 PTQ는 NN 모델을 양자화하는 데 매우 빠른 방법입니다. 그러나 이는 종종 QAT에 비해 낮은 정확도를 초래할 수 있습니다.