Ristretto: Hardware-Oriented Approximation of Convolutional Neural Networks
Chapter 1 Introduction
- 이 논문에서는 기존 신경망의 근사화(approximation)를 자동적으로 하기 위한 프레임워크인 Ristretto를 보입니다.
- 이 프레임워크는 압축된 것을 해제(decompression)하거나, 희소행렬(sparse matrix)의 곱셈과 같은 추가적인 계산이 필요하지 않습니다.
- Ristretto는 하드웨어 가속기에 넣기 위해서, 처리되는 요소와 메모리 접근을 줄이고 그로 인하여 off-chip 메모리 교환을 줄이거나 제거할 수 있습니다.
Chapter 2 Convolutional Neural Network
2.1 Training and Inference
2.2 Layer Types
Rectified Linear Unit (ReLU)
- 기존의 사용되는 Sigmoid나 hyperbolic tangent 함수 등 비선형 함수들을 단점이 있습니다.
- 하나는 매우 작은 값에서 그래디언트가 매우 크다는 것이고, 다른 하나는 지수승을 곱할 때 연산이 많이 든다는 것입니다.
Normalization layers
- Local Response Normalization (LRN)은 특징 맵 끼리의 normalization과 특징 맵 내에서 행해사는 normalization이 있습니다.
- 최근 새로운 방법으로 Batch Normalization (BN)도 제안되었습니다.
- LRN이나 BN 모두 빠른 수렴과 좋은 정확도를 얻는데 도움을 주지만, 계산적으로 부담이 됩니다.
- 더군다나 normalization 층은 매우 큰 dynamic range를 가지므로 여기서는 LRN, BN 모두 부동소수점을 그대로 사용하고 대신 다른 층에 집중하고자 하였습니다.
Pooling
- CNN에 주로 사용되는 pooling은 일종의 서브샘플링 방법으로 특징 맵의 지역적 차원을 줄이거나, 이동 불변성(translation invariance)를 대응하기 위하여 사용합니다.
2.3 Applications
2.4 Computational Complexity and Memory Requirements
- CNN은 두개의 부분으로 나눌 수 있습니다.
- 먼저 Convolutional 층들로 90%의 수치 계산이 여기에 필요합니다.
- 두번째는 fully connected 층으로 90%의 네트워크 파라미터가 여기에 포함됩니다.
- 에너지 효율성을 위해서는 충분히 큰 계산 출력과 동시에 처리기가 계속적으로 바쁘게 일할 수 있도록 메모리 대역폭 또한 제공되어야 합니다.
2.5 ImageNet Competition
2.6 Neural Networks With Limited Numerical Precision
- 대부분의 딥러닝 프레임워크는 32비트 혹은 64비트 부동소수점을 사용하고 있습니다.
- 여기서 부터 기존의 full precision 신경망을 limited precision 수로 양자화(quantizing) 하는 과정을 설명할 것입니다.
2.6.1 Quantization
- Convolutional, fully connected 층의 숫자 포맷을 압축하여 CNN의 전방 전파 과정을 근사화 할 것입니다.
- 이들 두 층 타입이 가장 리소스가 필요한 부분임과 동시에 multiplication-and-accumulation (MAC)라 불리는 계산 또한 마찬가지인 부분입니다.
- 여기서는 32비트 부동 소수점 신경망의 값들 중, 양자화된 값만을 사용하다록 하여 근사화할 것입니다.
- 결과를 모사(simulate)하기 위하여 다음의 3 단계가 필요합니다.
- 층에 입력과 가중치를 양자화하여 원래보다 줄어든 정확도로 표현합니다.
- 양자화된 값으로 MAC 계산을 수행합니다.
- 최종 결과를 다시 양자화합니다.
2.6.2 Rounding Schemes
- 소수점 처리 방식에는 두가지가 있습니다.
- Rounding nearest even 방법은 가까운 이산값(discrete value)을 선택하는 것입니다.
- Round stochastic 방법은 확률 값에 따라 이산값을 선택하는 방법으로 양자화 방법에 랜덤성을 부여합니다.
- 이는 학습 과정에서 평균 효과를 일으킵니다.
- 파인튜닝에서는 이 방법을 사용하였습니다.
2.6.3 Optimization in Discrete Parameter Space
- 신경망을 학습하는 것은 일종의 최적화 문제로 볼 수 있습니다.
- 64비트 부동소수점을 사용하는 경우, 초지거화 문제는 에러면(error surface)에서의 연속인 문제로 생각할 수 있습니다.
- 이 에러면은 입력과 파라미터로 정해지게 됩니다.
- 양자화된 신경망은 이 에러면이 이산적으로 변화하게 됩니다.
- 이 문제는 곧 이산값으로 이루어진 파라미터를 사용하여 최적의 값을 찾는 문제로 NP-hard 문제가 됩니다.
- 이 공간에서 최적 값을 처음부터 다시 학습하는 방법이 있긴 하지만, 여기에서는 연속 공간에서 먼저 학습이 이루어지면, 그 뒤 파라미터를 양자화 하고, 최종적으로 이산 파라미터 공간에서 파인튜닝을 함으로써 시간을 줄일 수 있엇습니다.
- 여기서 가중치가 이산화된 값만을 가지기 때문에 가중치의 갱신이 중요한 부분입니다.
- Courbariaux의 방법을 수정하여, full precision 가중치 $w$에 작은 가중치 업데이트 $\Delta w $ 를 적용한 뒤, 이산하된 가중치 $w'$ 를 다시 샘플링하기로 하였습니다.
Chapter 3 Related Work
3.1 Network Approximation
3.1.1 Fixed Point Approximation
- 부동소수점 연산보다는 고정소수점 연산이 리소스를 덜 사용합니다.
- 고정소수점만 사용하더라도 신경망 계산에 충분하다는 연구도 있습니다.
- 더 나아가 바이너리 가중치, 혹은 +1, 0, -1만을 사용하는 연구도 존재합니다.
3.1.2 Network Pruning and Shared Weights
3.1.3 Binary Networks
- 32비트 부동소수점 표현 대신, 바이너리 형식을 사용하는 방법이 있습니다.
- 최근 이 방법을 이용한 연구로 역전파(backward propagation)시 곱셈 연산을 bit shift로 대체하는 연구가 있습니다.
- Courbariaux의 Binary Neural Network는 가중치와 층의 활성값(activation)을 +1, -1으로 제한하였습니다.
- 여기에서는 학습 효과를 향상시키기 위해 bit shift 기반의 batch normalization을 수행하였습니다.
3.2 Accelerators
Chapter 4 Fixed Point Approximation
4.1 Baseline Convolutional Neural Network
- 다음의 CNNs들을 기준으로 삼았습니다.
- LeNET
- Caffe의 CIFAR-10 Full model
- CaffeNet
- GoogLeNet
- SqueezeNet
4.2 Fixed Point Format
- 층의 파라미터와 출력을 [IL.FL]의 고정소수점 형식으로 바꾸었습니다. IL, FL은 각각 정수부와 소수부 길이를 뜻합니다.
- 따라서 전체 사용되는 비트 수는 IL + FL 이 됩니다.
- 양자화 방법은 round-nearest 방법을 사용하였습니다.
4.3 Dynamic Range of Parameters and Layer Outputs
4.3.1 Dynamic Range in Small CNN
- 먼저 LeNet이 가지고 있는 층 활성값과 파라미터의 히스토그램을 조사하였습니다.
- 평균적으로 파라미터가 층의 출력보다 작은 값을 가졌습니다.
- 99%의 파라미터가 $ 2^0 $에서 $2^{-10}$ 사이에 존재하였고, 하지만 fully connected 층 출력의 99%는 $ 2^5 $에서 $2^{-4}$ 사이에 존재하였습니다.
- 8비트로 양자화 하였을 때, 가장 좋은 양자화 조건은 Q4.4 형식이었습니다. 이는 일부 값이 포화(saturated)된 상태입니다.
4.3.2 Dynamic Range in Large CNN
- CaffeNet을 분석하였습니다.
- 파라미터는 더욱 더 작아졌습니다.
- 두번째 층의 가장 큰 값이 $2^9$정도 되었습니다. 마지막 층은 모든 값이 $2^6$이하였습니다.
- Dynamic range가 더 커졌기 때문에 16비트를 사용하여 Q9.7 형식이 최적이었습니다.
- Convolutional 층의 0.46% 정도만이 표현하기에 매우 큰 값이었고, 21.33%의 값들은 오히려 0으로 잘려나갔습니다.
4.4 Results
4.4.1 Optimal Integer and Fractional Length
- 모든 층의 출력과 파라미터가 같은 고정소수점 형식을 공유하였기 때문에 소수점부분의 길이를 정하는 것이 아주 중요합니다. 또한 어떤 값들을 포화시킬지를 결정하는 것도 또한 중요합니다.
4.4.2 Quantization to Fixed Point
- 고정소수점 방식을 사용하였을 때에 성능하락이 있었기 때문에 dynamic fixed point 방법을 사용하고자 합니다.
Chapter 5 Dynamic Fixed Point Approximation
5.1 Mixed Precision Fixed Point
- Lin과 Qui의 연구에서 서로 다른 precision 끼리의 계산을 하는 방법을 제안하였습니다.
5.2 Dynamic Fixed Point
- 층이 커지면 그 출력은 수천번 계산이 누적되었기 때문에 상대적으로 파라미터보다는 큰 값을 가지게 됩니다.
- Fixed point는 넓은 dynamic range를 다루기에 한계가 있기에 dynamic fixed point 방법을 통해 이 문제를 해결하고자 합니다.
- Dynamic fixed point의 각 숫자는 다음과 같이 표현됩니다.
$$ (-1)^s \cdot 2^{-FL} \sum^{B-2}_{i=0} 2^i \cdot x_i $$
- $B$는 비트 길이, $s$는 부호 비트, $FL$은 소수부 길이, $x$는 가수(mantissa) 비트입니다.
- 신경망의 중간 단계 값들은 서로 다른 범위를 가지므로 fixed point 수들을 그룹화하여 같은 FL를 갖도록 하는것이 좋겠습니다.
- 각 층은 두 그룹으로 나누어 출력 층과 가중치 파라미터 그룹으로 나눕니다.
5.2.1 Choice of Number Format
- 이제 각 층에서 사용할 dynamic fixed point 수의 형식을 정해야 합니다.
- 앞에서 이야기한 것처럼 두개의 그룹으로 나누었습니다. 각 그룹의 모든 수는 같은 정수부와 소수부 길이를 가지게 됩니다.
- 효과적으로 최적의 형식을 찾기 위해 먼저 자동적으로 정수부의 숫자를 정하도록 하였습니다. 그 기준은 포화가 되지 않도록 하는 충분한 길이를 찾는 것입니다.
- 표현할 수의 집합 S가 주어졌을 때, IL은 다음과 같이 구할 수 있습니다.
$$ IL = \lceil \log_2 (\max_S x + 1) \rceil $$
- 이 방법을 이용하여 층의 파라미터에 대한 정수부 길이를 정할 수 있습니다.
- 출력에 대해서는 앞의 방법을 통해 구한 뒤 1을 빼주어서 사용하였을 때 좀 더 나은 결과를 얻을 수 있었습니다.
5.3 Results
Chapter 6 Minifloat Approximation
6.1 Motivation
- 앞에서는 고정 소수점을 이용하여 deep CNN을 근사화하였지만, 보통 CNN의 학습은 부동소수점을 사용하기 때문에 좀더 작은 부동소수점 방식으로 모델을 압축하는 방법도 생각할 수 있습니다.
6.2 IEEE-754 Single Precision Standard
6.3 Minifloat Number Format
- IEEE-754에 나온 것보다 더 작은 비트를 이용하여 부동소수점을 표현하고자 합니다.
- 표준을 따르면서 12, 8, 6개의 비트만을 이용하여 표현을 하였지만, 세세한 부분에서 약간의 차이가 있습니다.
- 그것은 지수부의 바이어스가 지수에 할당된 비트에 따른다는 것입니다.
$$ bias = 2^{bits - 1} - 1$$
- 16비트의 경우, 1개의 사인비트, 5개의 지수 비트, 10개의 가수 비트를 사용합니다.
6.3.1 Network-specific Choice of Number Format
- Dynamic fixed point와 비슷하게, 비트 길이를 선택ㅎ야 합니다.
- 포화를 허용하지 않는 선에서 비트를 결정합니다.
$$ bits = \lceil \log_2 ( \log_2 (\max_S x) - 1 ) + 1 \rceil $$
6.4 Data Path for Accelerator
6.5 Results
6.6 Comparison to Previous Work
Chapter 7 Turning Multiplications Into Bit Shifts
7.1 Multiplier-free Arithmetic
- Fully connected 층이나 convolutional 층은 곱셈과 덧셈으로 이루어져 있습니다.
- 곱셈은 덧셈보다 더 많은 칩 크기를 필요로 합니다.
- 이를 해결하기 위해 모든 곱셈을 없애고 2의 지수승으로 가중치를 표현하는 방법이 나오게 되었습니다.
- 이 방법은 마치 가수 부분의 길이를 0으로 하는 minifloat 수로 생각할 수 있습니다.
- 이를 사용하면 곱셈을 모두 비트 쉬프트 연산으로 바꿀 수 있어 에너지 소모를 술일 수 있습니다.
- 이를 망에 적용하기 위해 파라미터의 값을 가장 가까운 2의 지수승으로 근사화 하였습니다.
7.2 Maximal Number of Shifts
- 거의 모든 가중치 파라미터들이 +1과 -1 사이에 존재하고, 대부분은 0에 가깝습니다.
- 이 파라미터들을 2의 지수승으로 양자화 하게 되면 +1과 -1에 가까운 가중치들에게 큰 변화가 있습니다.
- 1, 1/2, 1/4의 값 밖에 사용할 수 없기 때문입니다.
- 따라서 shift 부분에 4비트를 할당하였습니다.
- 이로 인해 메모리 사용량을 더욱 줄이고, 가장 작은 값으로 $2^{-8}$까지 사용할 수 있게 되었습니다.