权重聚类

由 Arm 机器学习工具团队维护

本文概要介绍了权重聚类,帮助您确定它是否适合您的用例。

概览

聚类(或权重共享)可减少模型中唯一权重值的数量,从而带来部署优势。聚类首先将每层的权重分组成 N 个聚类,然后共享属于相应聚类的所有权重的聚类形心值。

此技术通过模型压缩改进了模型。未来的框架支持能够改善内存占用,这对在资源有限的嵌入式系统上部署深度学习模型具有重大意义。

我们尝试了视觉和语音任务方面的聚类。我们发现模型压缩的性能提升了 5 倍,并且对准确率造成的影响极低,如下文列出的结果所示。

请注意,如果批次归一化层前面有卷积层和密集层,以及将聚类与按每个轴的训练后量化相结合使用,聚类提供的优势较少。

API 兼容性矩阵

用户可以使用以下 API 来应用聚类:

  • 模型构建:只能对序列模型和函数式模型使用 tf.keras
  • TensorFlow 版本:TF 1.x(包括版本 1.14 及更高版本)和 TF 2.x。
    • 不支持对 TF 2.X 软件包使用 tf.compat.v1 及对 TF 1.X 软件包使用 tf.compat.v2
  • TensorFlow 执行模式:图执行和即刻执行

结果

图像分类

模型 原始 聚类
Top-1 准确率 (%) 压缩的 .tflite 文件的大小 (MB) 配置 聚类数量 Top-1 准确率 (%) 压缩的 .tflite 文件的大小 (MB)
MobileNetV1 70.976 14.97
局部(最后 3 个 Conv2D 层) 16, 16, 16 70.294 7.69
局部(最后 3 个 Conv2D 层) 32, 32, 32 70.69 8.22
完整(所有 Conv2D 层) 32 69.4 4.43
MobileNetV2 71.778 12.38
局部(最后 3 个 Conv2D 层) 16, 16, 16 70.742 6.68
局部(最后 3 个 Conv2D 层) 32, 32, 32 70.926 7.03
完整(所有 Conv2D 层) 32 69.744 4.05

这些模型已在 ImageNet 上进行了训练和测试。

关键字检测

模型 原始 聚类
Top-1 准确率 (%) 压缩的 .tflite 文件的大小 (MB) 配置 聚类数量 Top-1 准确率 (%) 压缩的 .tflite 文件的大小 (MB)
DS-CNN-L 95.233 1.46
完整(所有 Conv2D 层) 32 95.09 0.39
完整(所有 Conv2D 层) 8 94.272 0.27

该模型已在 SpeechCommands v0.02 上进行了训练和测试。

  1. 将 Keras 模型序列化为 .h5 文件
  2. 使用 TFLiteConverter.from_keras_model_file() 将 .h5 文件转换为 .tflite
  3. 将 .tflite 文件压缩成 zip 文件

示例

除了 Keras 中的权重聚类示例之外,还可参阅以下示例:

  • 对用 MNIST 手写数字分类数据集训练的 CNN 模型进行权重聚类:代码

权重聚类实现基于《深度压缩:使用剪枝、经过训练的量化和霍夫曼编码压缩深度神经网络》(Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding) 一文。请参阅第 3 章“经过训练的量化和权重共享”(Trained Quantization and Weight Sharing)。