논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

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 단계가 필요합니다.
    1. 층에 입력과 가중치를 양자화하여 원래보다 줄어든 정확도로 표현합니다.
    2. 양자화된 값으로 MAC 계산을 수행합니다.
    3. 최종 결과를 다시 양자화합니다.

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들을 기준으로 삼았습니다.
    1. LeNET
    2. Caffe의 CIFAR-10 Full model
    3. CaffeNet
    4. GoogLeNet
    5. 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}$까지 사용할 수 있게 되었습니다.

7.3 Data Path for Accelerator

7.4 Results

Chapter 8 Comparison of Different Approximations

Chapter 9 Ristretto: An Approximation Framework for Deep CNNs


Add a Comment Trackback