The Beautiful Future

Quantization and Training of Neural Networks for EfficientInteger-Arithmetic-Only Inference 본문

DNN/Quantization

Quantization and Training of Neural Networks for EfficientInteger-Arithmetic-Only Inference

Small Octopus 2020. 8. 25. 20:57

Quantization scheme

affine mapping of integers q to real numbers r

r = S(q-Z),

r: real value, q: quantized value, S: scale, Z: zero point

S는 양의 실수 이다, Z는 q와 같은 타입의 콴타이즈되어있는 수이고 q = Z 이면 real value 0이다.

weight는 8bit integer로 퀀타이즈되고 bias는 32bit로 콴타이즈된다.

 

Integerarithmeticonly matrix multiplication

 

모두 real value 연산이다.
M을 제외한 quantized value에서 quantized value로 연산이 이뤄진다.

(4)에서 M 만 int가 아니다. M을 int로 바꾸고 fixed-point mul을 한다.

실험적으로 S1, S2, S3는 항상 (0,1)사이에 있다는 것을 찾았다. M0 는 [0.5, 1) 사이 값이다.

M0 는 이제 fixed-point multiplier로 표현된다.  2^-n은 비트 쉬프트로 표현된다. (정확도?? appendix B참고)

M0를 int32로 표현하면 2^31M0로가 되고 M0는 0.5보다 크기때문에 int32로 표현된 M0값은 

2^30 보다는 항상 크고 30 bit의 정확도를 가지게 된다. M0의 곱은 fixed-point multiplication으로 구현 될수 있다.

 

Efficient handling of zeropoints

(4)에서 Z 빼기는 2N^3 번 이루어진다. 빼기 연산으로 인해 16bit로 확장되는 것을 막자.

(4)에서 곱을 분배하면 아래 (7)과 같이 된다.

(8)은 계산에 오직 N번의 합만 필요하다. 총 2N^2 합연산이 필요하다. 그럼 주요한  계산은 (9)만 남게된다.

결론적으로는 수식을 정리해서 약간 연산량을 줄인것이다.

 

Implementation of a typical fused layer

 

 

 

'DNN > Quantization' 카테고리의 다른 글

gemmlowp  (0) 2020.08.24
TF Quantize function  (0) 2020.08.23
Pytorch Quantization  (0) 2020.08.16
Comments