이미지
Quantized Convolutional Neural Networks for Mobile Devices cvpr 2016 1. Problem - CNN needs high performance hardware which prohibits their further extension (e.g. mobile service) 2. Solution - Simultaneously speed-up the computation and reduce the storage and memory overhead of CNN models > Quantized CNN 3. How - Quantized CNN   + Both filter kernels in convolutional layers and weighting matrices in fully connected layers are quantized, aiming at minimizing the estimation error of each layer's response. 4. Performance - ILSVRC-12   + 4~6 X speed-up and 15 ~20 X compression with merely one percentage loss of classification accuracy - even mobile devices can accurately classify images within one second.

텐서플로우에서의 양자화 (Quantize) 시키는 방법

이미지
[이글은 https://www.tensorflow.org/performance/quantization 의 내용을 한글로 번역/의역한 내용입니다. 주관적 의견이 첨가되었으니 잘못된 해석이 있다면 지적하여 주시면 감사하겠습니다.] 뉴럴넷 이 처음 개발되었을때, 가장 큰 이슈는 어떻게든 동작하게 하는 것이여서, training  정확도와 속도는 뒷전이였다. 그래서 그 당시, 뉴럴넷을 training 시킬 때, 정확도와 속도는 그리 좋지 않았었다. 정확도를 유지하기 위한 가장 쉬운 방법은 소숫점 (floating point) 연산 을 사용하는 것이였고, GPU 를 통해 그런 연산들의 속도를 가속화하기만 하여서, 다른 numerical format 을 사용하는 것에는 큰 관심이 없는건 어찌보면 당연하였다. 하지만 요즘에는 상용모델 (GPU가 없는 스마트폰, IoT 기기) 들에 적용되는 다양한 뉴럴넷 모델들이 실재한다. 그러면, 그런 뉴럴넷 training 을 위한 연산 요구량은 연구자들의 숫자에 비례하여 증가하고, 실제 추론을 위해 필요한 뉴럴넷 연산은 사용자에 비례하여 증가하게 된다. 즉, 매우 많은 연산량을 요구하는 뉴럴넷을 최근의 상용 기기들에 기존의 추론 방식을 사용한다면, 그 효율은 매우 나쁠 것이고 이런 연산량을 경감 시키기 위한 노력이 필요하게 되었다. 이게 Quantization 이 필요한 이유이다.  좀더 자세히 말하면, Quantization 은 32 bit 소숫점 보다 좀더 compact 하게 저장하고 연산하기 위한 뭔가 다른 방법들을 포괄하는 개념이다. 그런 이유로, 우리는 8 bit fixed point 에 집중하여 detail 들을 살펴보고자 한다. 그러면, 왜 Quantization 이 동작하는가.. 뉴럴넷을 training 시킨다는 것은 weight 들에 많은 조그마한 변이들을 적용함으로 이루어지는 것이고, 이런 조그마한 변이들은 보통 동작되기 위해서는 소숫점의 정확도를 요구하기 마련이다. 미리 훈련된 모델을

INQ (Incremental Network Quantization)

이미지
Summary of "Incremental Network Qunatization: Towards Lossless CNNs with Low-Precision Weights" 1. Problem - Deep CNN requires heavy burdens on the memory and other computational resources - Reducing the heavy burdens could cause the Performance Loss (accuracy loss) 2. Solution - INQ (Incremental Network Quantization) :   Convert "Any Pre-Trained Full-Precision CNN" into "Low-Precision Version (weights are constrained to be either powers of two or zero)" 3. How - three interdependent operations 1) Weight Partition - Divide the weights in each layer of a pre-trained CNN model into two disjoint groups - Weights in the first group    + Responsible to form a low-precision base,    + Thus, Quantized by a variable-length encoding method - Weights in the second group    + Responsible to compensate for the accuracy loss from the quantization    + Thus, Retrained 2) Group-Wise Quantization - Above two operations can be formulated

Deep Compression

이미지
Summary on "Deep Compression : Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding" 1. Problem  - Neural Net : Computationally intensive and memory intensive - Making them difficult to deploy on embedded systems with limited hardware resources 2. Solution  - Reduce the storage requirement of neural net without affecting accuracy by 35~49 X 3. How  - 3 stage pipeline 1) Pruning  - By learning only the important connections, Prune the network - Reduce the number of connections by 9~13 X 2) Trained Quantization - Quantize the weights to enforce weight sharing - Reduce the number of bits that represent each connection from 23 to 5 3) Huffman Coding - Apply Huffman Coding 4. Performance - ImageNet   + AlexNet : Reduce the storage requirement by 35 X from 240MB to 6.9MB w/ loss of accuracy   + VGG-16 : 522MB to 11.3MB