Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference
https://arxiv.org/pdf/1712.05877.pdf
2. Quantized Inference
2.1 Quantization scheme
- q : quantized value
- 8bit quantization에서
- q is quantized as an 8-bit integer
- Some arrays, typically bias vectors, are quantized as 32-bit integers
- 32bit 쓰는 이유는 bias에서 오차가 생길 경우 패널티가 더 심하기 때문
- 8bit quantization에서
- r : real value
- S : scale, 보통 floating point로 표현되고, 이를 피하는 방법이 2.2에 설명되어있다.
- Z : zero-point, real value 0과 매칭되는 quantized value
- zero-padding 등 효율적인 구현을 위해 필요하다.
2.2 Integer-arithmetic-only matrix multiplication
- (1)번식에서 q를 어떻게 구할 것인가, S가 integer가 아닌데 어떻게 integer arithmetic으로 바꿀 것인가
- NxN 행렬 r1, r2가 있다고 했을 때, 행렬곱 r3 = r1r2
- rα (α = 1, 2 or 3) 라고 할 때, 위의 식에 대입하면, 행렬 각 각의 값은 아래와 같이 표현할 수 있다.
- 행렬곱 식으로 r3을 다시 써보면,
- multiplier M은 아래가 되고, quantization scale 값으로만 구성된, 식에서 유일한 non-integer 값이다.
- S1, S2, S3은 offline으로 계산될 수 있다. (?)
- 경험적으로 이 값들은 (0, 1) 사이에 있고, 그러므로 정규형(normalized form)으로 표현할 수 있다.
- M0은 [0.5, 1) 사이의 값이고, n은 non-negative integer(0을 포함한 자연수, 음이 아닌 정수)이다.
- Half-Closed Interval, [은 include, )는 not inclued
- normalized multiplier M0은 fixed-point multiplier로 표현되기 적합하고, 2^-n은 bit-shift로 구현될 수 있다.
2.3 Efficient handling of zero-points
- 위의 식 (4)를 풀어쓰면
- (8) 식은 그럼 N번 더하는 덧셈 계산만 있는거고, 둘 다해서 2N^2번 덧셈을 하게 되는 것이다.
- 그럼 (7) 식은 아래 integer 행렬곱 누적 계산에 집중되어있다.
2.4 Implementation of a typical fuesd layer
- 행렬곱에 bias-addition, activation function evaluation을 추가한 fused layer를 위해 (7) 식을 수정할것이다.
- Inference code에서도 training 때 사용한 "fake quantization" operator와 동일하게 매치되어야한다.
- q1 행렬은 weights, q2 행렬은 activation, 둘 다 uint8 타입을 가진다고 하면, 곱셈 결과 타입은 signed 32bit.
- 왜냐하면 bias-vector가 int32로 quantization되었기 때문 (bias의 zero-point는 0으로 사용한다.)
- (9) 식을 아래와 같이 나타낼 수 있다
- 그 다음으로,
- scale down (8bit output activations을 위해)
- cast down (uint8로)
- apply the activation function (최종 8bit output 생성!)
3. Training with simulated quantization
- 이건 Quantization-aware training 이야기
3.1 Learning quantization ranges
- For each layer, quantization is parameterized by the number of quantization levels and clamping range, and is performed by applying point-wise the quantization function q defined as follows:
- 의미 :
- r : real value
- [a; b] : quantization range
- n : the number of quantization levels
- ⌊·⌉ : rounding to the nearest integer
- weight quantization과 activation quantization의 quantization range는 다르게 다루어진다.
[ 참고 ]
- normalization & standardization : https://m.blog.naver.com/PostView.nhn?blogId=zzing0907&logNo=220213633559&proxyReferer=https%3A%2F%2Fwww.google.com%2F
- normalization : 정규화, 데이터의 범주를 바꾸는 작업
- standardization : 표준화,
- 8bit Inference with TensorRT : http://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf
'개발 > Deep learning' 카테고리의 다른 글
RL & GA (0) | 2019.10.01 |
---|---|
Stock Price Prediction | AI in Finance (0) | 2019.04.22 |
TF-Lite uses gemmlowp for matrix multiplication (0) | 2019.04.18 |
밑바닥 딥러닝_7장 합성곱 신경망(CNN) (1) | 2019.01.27 |