修剪不重要的权重

本文简要介绍了模型剪枝,帮助您确定剪枝是否适合您的用例。如需深入了解代码,请参阅利用 Keras 进行剪枝教程和 API 文档。如需详细了解如何使用 Keras API,深入探究剪枝,以及查看有关更高级使用模式的文档,请参阅训练稀疏模型指南。

概览

在训练过程中,基于大小的权重剪枝会逐渐将模型权重设为零,实现模型稀疏性。稀疏模型更易于压缩,我们可以在推断过程中跳过零以缩短延迟时间。

此技术通过模型压缩改进了模型。今后,对此技术的框架支持可以缩短延迟时间。我们发现模型压缩的性能提升了 6 倍,并且对准确率造成的影响极低。

此技术正在各种语音应用(例如语音识别和文字转语音)中接受评估,并已针对各种视觉和翻译模型进行了实验。

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 执行模式:图模式和即刻模式
  • 分布式训练:只能对图执行使用 tf.distribute

增加以下方面的支持已被纳入我们的路线图:

结果

图像分类

模型 非稀疏最高准确率 稀疏准确率 稀疏性
InceptionV3 78.1% 78.0% 50%
76.1%75%
74.6%87.5%
MobilenetV1 22471.04%70.84%50%

这些模型在 Imagenet 上进行了测试。

翻译

模型 非稀疏 BLEU 稀疏 BLEU 稀疏性
GNMT EN-DE 26.77 26.86 80%
26.5285%
26.1990%
GNMT DE-EN 29.47 29.50 80%
29.2485%
28.8190%

这些模型使用 WMT16 德语和英语数据集,并将 news-test2013 作为开发集,将 news-test2015 作为测试集。

示例

除了利用 Keras 进行剪枝外,还请参阅以下示例:

  • 通过剪枝在 MNIST 手写数字分类任务中训练 CNN 模型:代码
  • 通过剪枝在 IMDB 情感分类任务中训练 LSTM:代码

提示

  1. 尽可能从预训练模型或权重开始。如果不能,请创建一个未剪枝的模型或权重,然后再开始。
  2. 请不要过于频繁地剪枝,以便为模型留出恢复时间。工具包会提供默认频率。
  3. 尝试运行一个实验,在这个过程中,将预训练模型剪枝为起始步骤为 0 的最终稀疏性。
  4. 在模型剪枝时设置适中的学习速率。将剪枝时间表视为超参数。

有关背景信息,请参阅“To prune, or not to prune: exploring the efficacy of pruning for model compression”[论文]。