1. 什么是量化
  2. 为什么量化
  3. 如何量化
  4. 参考

对神经网络的权值进行量化,使模型大小变小,运行速度变快,且准确率与原来相近。

参考 https://www.tensorflow.org/performance/quantization

什么是量化

把网络权值从高精度转化成低精度(32位浮点数 float32 转化成 8位定点数 int8 或二值化为 1 bit),但模型准确率等指标与原来相近,模型大小变小,运行速度加快。

为什么量化

量化可以看作是噪声的一种来源,所以量化后的模型效果与原来相近。

  • 优点

    1. 模型变小,运行速度变快。

    2. int8 只需 float32 内存带宽的25%,可以更好使用缓存并避免 RAM 访问出现瓶颈。

    3. 每个时钟周期执行更多的 SIMD 操作。

    4. 如有加速8位计算的 DSP 芯片则更快。

  • 缺点

    效果稍差。

如何量化

先训练模型,再进行量化,测试时使用量化后的模型。

  • 训练

    一般使用 float32 来训练模型效果较好(特别是反向传播和梯度需要浮点来表示)

  • 量化

    1. 加入量化和反量化操作(如一种量化操作为根据该层权值的最大值和最小值映射到 8位区间)

      如下图 1 变成图 2

    2. 把相应的运算转化为量化的运算(实现 8位版本的卷积、矩阵乘法等)

    3. 删除相邻的 反量化-量化 操作

      如下图

  • 测试

    使用量化后的模型来预测

参考

  1. DoReFa-Net: Training Low Bitwidth Convolutional Neural Networks with Low Bitwidth Gradients https://arxiv.org/abs/1606.06160 https://github.com/ppwwyyxx/tensorpack/tree/master/examples/DoReFa-Net

  2. (ECCV 2016) XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks https://arxiv.org/abs/1603.05279 https://github.com/allenai/XNOR-Net

  3. Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or −1 https://arxiv.org/abs/1602.02830 https://github.com/MatthieuCourbariaux/BinaryNet

  4. BinaryConnect: Training Deep Neural Networks with binary weights during propagations https://arxiv.org/abs/1511.00363 https://github.com/MatthieuCourbariaux/BinaryConnect

  5. (CVPR 2016) Quantized Convolutional Neural Networks for Mobile Devices https://github.com/jiaxiang-wu/quantized-cnn

  6. (ICLR 2016) Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding https://arxiv.org/abs/1510.00149 https://github.com/songhan/Deep-Compression-AlexNet