[Github]
[arXiv](Current version v2)
Abstract
낮은 비트폭 양자화에서 2차 최적화를 통해 Layer-wise quantization을 가능하게 함
Loss landscape of quantized DNNs
M비트, quantization step size ∆를 고려한 양자화:
![](https://blog.kakaocdn.net/dn/S3tkN/btszvBT11Zn/0ZKvaDhTuXivRWPWaGG6N0/img.png)
Step size ∆를 통해 x의 범위를 [-c, c]로 제한함:
![](https://blog.kakaocdn.net/dn/b0jrtw/btszy5lW99s/KPKTkPcd1tDzosX9JDRTPk/img.png)
ReLU 활성화의 출력일 경우:
![](https://blog.kakaocdn.net/dn/JyiIb/btszy6LWEVJ/eWWuIvq4UxFC0UIpkRcYS1/img.png)
이 논문에서 ∆는 값으로도 쓰이고 양자하 된 인스턴스에 대한 표시라고 해야 하나 암튼 그런 개념으로도 쓰이고 미분에서 원래의 용도로도 쓰인다. 좀 헷갈림...
Separable optimization
손실함수 L은 변수 세트 v(weights, activations, etc.)에 의존하며, 양자화 노이즈를 벡터 ε으로 처리하여 테일러 전개:
![](https://blog.kakaocdn.net/dn/JglyJ/btszy5TO4QT/d4tnBE9inHYNQgVokhO7SK/img.png)
![](https://blog.kakaocdn.net/dn/npuN0/btszAmncA83/cIHz3pOApnbO1WTKPOmbSk/img.png)
ε2이 충분히 작을 경우 다음과 같이 독립적인 프로세스의 합으로 나타낼 수 있고
![](https://blog.kakaocdn.net/dn/bslEZy/btszzHd6NQ4/2wlytJ2YNF6qL9p74PA6vK/img.png)
클 경우 서로 다른 레이어 간의 상호작용을 고려하여야 한다.
![](https://blog.kakaocdn.net/dn/boaAfT/btszxriMYUT/12KxY6n2kCbBG2fqDVfnI1/img.png)
Curvature
손실 함수의 곡률을 측정.
각 양자화된 레이어의 손실을 L(∆i)라고 할 때, 모든 레이어에 대한 hessian matrix 계산:
![](https://blog.kakaocdn.net/dn/dMBdVu/btszChMJ8Jy/yxqWIrcimVeIRbMM0UX0o0/img.png)
Gaussian curvature로 곡률 측정:
![](https://blog.kakaocdn.net/dn/bl1c8L/btszzXnHPtN/JHrPD2H3OfoAm248FGFcc1/img.png)
공격적인 양자화를 사용할수록 거친 곡률을 가진다.
또한 인접한 레이어들 간에 더 높은 곡률을 가지는 것을 보면 더 높은 종속성을 가지는 것을 알 수 있다.
![](https://blog.kakaocdn.net/dn/cdVw7U/btszySNYBPu/xFJxrwNpOs9DzNc98KOtc0/img.png)
거친 곡률을 가진 2비트 양자화는 ∆값에 큰 영향을 많이 받는다. (2비트 뒤에 4비트 있어요)
![](https://blog.kakaocdn.net/dn/n2FGO/btszvH04Kyu/QyuXF6zHZepiTWnfxtF6Kk/img.png)
Loss Aware Post-training Quantization (LAPQ)
레이어 간의 분리 불가능성을 해결하기 위한 3가지 단계
- 손실을 최소화하는 ∆p 찾기
- 2차 보간으로 근사
- 피라미터 최적화
Layer-wise optimization
각 레이어에서 최적화를 수행해 최적과 근사한 p(레이어마다 다름)를 얻는다.
![](https://blog.kakaocdn.net/dn/bvRU8q/btszyHGvarP/Omgf7naqLZA2eFyxKixQ01/img.png)
Quadratic approximation
최적 ∆* 근처의 ∆에 대해 테일러 전개:
![](https://blog.kakaocdn.net/dn/FHrVy/btszA2bRsYR/gm2uWgseGXaNH6jxKLmQsk/img.png)
이미 로컬 최적인 1차 항과 사소한 고차항 제거
![](https://blog.kakaocdn.net/dn/un4FK/btszC3ni5Co/dyA1f67zoLIzVm3OBngL1K/img.png)
계산으로 얻은 최적값 ∆p*은 공동 최적화 알고리즘의 시작점이 됨.
Joint optimization
낮은 비트폭 양자화에서는 사소한 오차도 성능 저하로 이어진다. 따라서 더욱더 최적화하기 위해 gradient-free joint optimization의 반복 알고리즘 사용.
![](https://blog.kakaocdn.net/dn/7rgJm/btszyNz2ZGG/vDptGlgKIABiSCBeVYBJBK/img.png)
검색 방향 집합 D = {d1, d2, . . . , dN}이 주어지면 새 위치는 탐색 방향의 선형 조합으로 표현되고
![](https://blog.kakaocdn.net/dn/bqPDkd/btszA0E9HMU/VxKR1NcPJl1UHVQm5Nhsu1/img.png)
첫 탐색 방향은 제거, 업데이트된 위치를 기반으로 새로운 탐색 방향 추가하는 방법을 반복한다.
![](https://blog.kakaocdn.net/dn/cOW70x/btszzFnYtYl/1sPpULm27vKB9c5aGT4Y1k/img.png)