ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 논문 리뷰 DoReFa-Net : CNN 모델에서 weight, activation, gradient의 quantization
    Study/ML 2021. 8. 4. 17:59

    DoReFa-Net

    TRAINING LOW BITWIDTH CONVOLUTIONAL NEURAL NETWORKS WITH LOW BITWIDTH GRADIENTS

    https://arxiv.org/abs/1606.06160

     

    DoReFa-Net: Training Low Bitwidth Convolutional Neural Networks with Low Bitwidth Gradients

    We propose DoReFa-Net, a method to train convolutional neural networks that have low bitwidth weights and activations using low bitwidth parameter gradients. In particular, during backward pass, parameter gradients are stochastically quantized to low bitwi

    arxiv.org

     

     

    0.  Introduction

    Dorefa-Net 논문이 발표되기 전 논문(BNN, XNOR-Net)에서는 weight와 activation의 quantization 시도는 있었지만 gradient 까지는 없었습니다. Dorefa-Net은 gradient까지 quantization을 시도하여 foward propagation 뿐만 아니라 back propagration까지 low bitwidth로 효율적인 연산을 할 수 있도록 합니다.

     

     

    1. Prior knowledge

    1.1 Bit Convolution Kernel

    weight, activation, gradient를 low bitwidth로 quantize시켜 효율적인 계산을 한다고 하였습니다. 그때 효율적인 계산은 bit convolution kernel을 이용한 방법으로 위와 같습니다. 기존의 CNN모델이라면 32bit의 floating point number 끼리 산술연산을 하겠지만, 위 bit convolution kernel을 사용하면 bitwise operation만으로 dot product을 계산할 수 있습니다. 그래서 Dorefa-Net에서는 최대한 모든 계산을 위 방법을 이용하여 model을 압축하는 것이 목표입니다.

     

     

     

     

    1.2 STRAIGHT-THROUGH ESTIMATOR (STE)

     

    Dorefa-Net 에서는 Geoffrey Everest Hinton가 제안한 STE 기법을 사용합니다. STE 기법이란 back propagration에서 foward propagation에서 사용한 함수의 미분을 사용하지 않고 임의의 다른 값을 사용하는 기법으로 아래의 간단한 예시를 보겠습니다.

    만약 위와 같이, Foward에서 베르누이 함수를 사용한다고 가정해보겠습니다. 베르누이 함수는 미분할 수 없으므로 Backward에서 gradient를 계산할 수 없습니다. 그래서 Backward에서 위와 같이 대신 다른 임의의 정해진 도함수를 사용하는 것으로 이와 같이 바꿔도 성능에는 큰 영향을 미치지 않는다고 합니다.

     

     

    위 Foward 함수는 이번 Dorefa-Net에서 사용할 quantize 함수입니다. [0,1]의 floating point input ri를 입력받고 k-bit인 ro를 output으로 내놓습니다. Backward를 보면 Foward의 도함수가 아닌 다른 임의의 도함수가 있는 것을 확인할 수 있는데 이는 STE를 적용한 것입니다.

     

     

    2. Quantization

    2.1 Weight

    Dorefa-Net에서는 Weight를 quantize 할 때 2가지 방법으로 나뉩니다. 첫 번째는 output이 1bit 일 때이고, 두 번째는 1bit 보다 큰 bit로 quantize 시킬 때입니다. 첫 번째 quantization같은 경우는 위 식과 같습니다. weight를 signal function으로 binarize 시킨 다음에 E(|ri|)를 곱해줍니다. E(|ri|) 은 전체 weight의 기댓값으로 scaling factor라고 부릅니다. 이 scaling factor를 곱해줌으로써 weight의 표현 범위를 늘릴 수 있는데 여전히 bit convolution kernel 으로 계산할 수 있는 이점을 얻습니다.

     

     

    1bit 보다 큰 k-bit로 quantize 시킬때는 위와 같습니다. tanh 함수를 이용하여 quantize 함수의 input의 범위를 [0,1]로 만들었고 output의 범위를 [-1,1]로 만들기 위해 2를 곱하고 1를 빼준것을 확인할 수 있습니다. 또한 Backward에서 dro/dri는 quantize 함수로 부터 쉽게 구할수 있습니다.

     

     

     

    2.2 Activation

    Dorefa-Net 이전 논문들(BNN, XNOR-Net)에서는 activation된 값을 quantize 할 때도 weight를 binarized할 때와 같은 방법을 사용했다고 합니다. 하지만 Dorefa-Net에서도 그렇게 했을 때, 심각한 성능저하 문제가 생겼고 그래서 위와 같이 quantize 함수를 직접 이용하여 low bit로 바꿔줍니다.

     

     

     

    2.3 Gradient

    Gradient의 quantization 같은 경우 앞에서 나온 2가지 방식하고는 다른 점이 있습니다. 첫 번째 다른 점은 gradient의 quantization 값이 unbound 하여 더 많은 범위의 값을 표현할 수 있다는 점이고, 두 번째 다른 점은 deterministic 한 방법이 아니라 stochastically 한 방법이라는 것입니다. 이를 위해 quantize 함수의 output에 2max(|dr|)을 곱하고 noise function인 N(k)를 사용한 것을 확인할 수 있습니다.

     

     

     

     

    2.4 Algorithm


    3. Result

    왼쪽은 SVHN dataset, 오른쪽은 ImageNet dataset에 대한 결과입니다. 전체적으로 gradient의 bit가 낮아지면 가장 성능저하게 심하게 일어나는 것을 확인할 수 있습니다. 저자는 W,A,G의 각 bit수가 1,2,6 일 때 가장 성능이 좋다고 판단하였고 이를 음계와 합쳐 도레파로 논문 이름을 지었다고 합니다. 

     

     

    4. Concolusion

    현재 1241번 인용한 논문으로 quantization을 폭 넓게 다루고 전체적인 개념을 잡기에 좋은 논문이라고 생각합니다. 그러나 저는 아무래도 4-bit 이하로 quantization을 하는것은 데이터 손실이 크다고 생각하여 8-bit 이상으로 quantization하는 논문을 찾아볼 예정입니다.

     

     

     

    댓글

Designed by Tistory.