Adlik在模型剪枝量化上的实践

1. 模型剪枝量化背景

  最近几年DNN取得了惊人的进展,它被广泛用于图像、语音和其他行业领域。当前AI在准确性方面取得了很大的提高,有些已经超过人类的水平,但是这些是靠耗费大量计算资源和存储资源来实现的。而我们的端设备计算和存储能力相对较小,同时实时性要求又比较高,这就需要有方法来减少模型的大小和计算量。于是出现了大量解决资源瓶颈问题的方法,这些方法包括剪枝、量化压缩和层融合,以及一些针对DNN的专用加速硬件和针对特定硬件的优化。下面将根据论文对模型剪枝和量化进行简要介绍。

1.1 模型剪枝

  剪枝包括结构性剪枝和非结构性剪枝(稀疏化),一般分为三个步骤,先训练一个大的过参数化(over-parameterized)模型,然后对模型进行剪枝,最后重新训练剪枝后模型以达到预期的效果。

《To prune, or not to prune: exploring the efficacy of pruning for model compression》

  作者提供了一个添加mask层的方式来进行稀疏的方法。初始时mask值都是1,也就是所有的权值都不强制设置为0。当训练达到指定step 后,开始逐步从初始稀疏值( )经过n个pruning step调整到目标稀疏值( ),剪枝间隔为 。作者定义了一个指数特征的目标稀疏值 计算公式,如下: for 渐进式剪枝过程如下图所示:

  从图中可以看出调整的幅度越来越小,呈指数特征。有了每次调整的目标稀疏值,如何去决定要把哪些权重值对应的mask置成0呢?作者采用的是把所有权重分成256个区间,计算每个区间的分布,从而得到可以达到目标稀疏值的权重值阈值,小于这个阈值的mask层位置置成0。在整个训练完成后,把权重和mask点积,合并两个层,从而得到最后的稀疏权重矩阵。整个论文的代码已经合入了tensorflow contrib,并且提供了一个cifar10剪枝例子。代码地址:https://github.com/tensorflow/tensorflow/tree/v1.12.0/tensorflow/contrib/model_pruning

《Learning both Weights and Connections for Efficient Neural Network》

       整个训练过程包括三个步骤,其中剪枝和重新训练可以多次循坏执行,以尽可能到达所需精度和压缩比。第一步:通过正常的训练来学习连接。与传统的训练不同,我们不是在学习权重的最终值,而是在学习哪些连接是重要的;第二步:剪除低权重的连接,所有权值低于阈值的连接都从网络中移除,即将密集网络转换为稀疏网络;(通过mask矩阵来记录) 第三步:对网络进行重新训练,以学习剩余稀疏连接的最终权值。这一步至关重要,如果不进行再训练而使用修剪后的网络,准确率会受到很大影响。

按照正常方法训练初始模型。实验发现,采用L2做正则项较好。

Prune Connection

作者认为该模型中权重的大小表征了其重要程度,因此将初始模型中那些低于某个阈值(经验设定)的权重参数置成0;

Re-Train

重新训练,以期其他未被剪枝的权重能够补偿pruning带来的精度下降。在重新训练的过程中,由于此时的网络稀疏度逐渐下降,Dropout的参数需要随着剪枝次数的增加而减小。假设原始网络的连接数为

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux基金会AI&Data基金会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值