CNN模型压缩综述

非结构化剪枝

减去某个权重或者神经元

权重剪枝(Weight pruning)

  1. 非结构化剪枝,任意的权重和神经元都有可能被修剪。
    在这里插入图片描述
  2. 矩阵存储时压缩数据
  • 卷积层限制权重剪枝率
  • 使用索引的方式存储稀疏矩阵
    CSR(Compressed Sparse Row)
    在这里插入图片描述
    第一行:所有非0数据
    第二行:第一行每个数字所在的列数
    第三行:上面数据中 第 [1,4)为一行,[4,6)为第二行,[6,8)为第三行。

权重量化(Weight quantization)
权重量化包括二值化权重 (binarized weights),三元权重(ternary weights),2-能量 权重,固定长度权重
结构化矩阵(Structured matrices )
分块循环矩阵
在这里插入图片描述
可以只进行权值量化不进行剪枝吗?
不可以。权值量化是减少冗余的位数而权值剪枝是减少权值的个数,这两者需要在压缩时结合。

交替方向乘子法(ADMM)

权值的剪枝量化本质上是权值的聚类问题,所以可以用ADMM解决。ADMM本质上是一种正则化。
ADMM原理
ADMM是一种通过将一个原始问题分解为两个问题分别解决的数学优化算法。
这个问题一开始可以写成
在这里插入图片描述
上面的问题就可以分解为关于x和z的两个问题,第一个子问题就是
在这里插入图片描述
第二个子问题是
在这里插入图片描述
q1(z|x) 和 q2(z|x) 都是二次方程。这两个问题在DNN训练中有相同的复杂度。ADMM是类簇问题的最优解。
ADMM-NN: 联合权重剪枝&量化
考虑一般的N层的DNN,损失函数为
在这里插入图片描述
联合DNN权重剪枝和量化就是
在这里插入图片描述
集合si反应了剪枝的约束(Si代表所有权重的集合)
在这里插入图片描述
ADMM-NN: ADMM正则化
ADMM正则化迭代着解决三个子问题直到收敛。

  • 第一个子问题
    在这里插入图片描述
    第二项和第三项是二次的
    这个子问题可以通过经典DNN训练时的的随机梯度下降算法解决。

  • 第二个子问题
    在这里插入图片描述
    最优解是将ai元素保留在Wi+Ui的最大量级中,然后将剩余的置为0.

  • 第三个子问题
    在这里插入图片描述
    最优解是将Wi+Vi的每一个元素映射到最接近该元素的量化水平
    将第二个和第三个子问题的解带入到第一个问题中,就变成了一个动态的正则化过程。

结构化剪枝

剪去整个filter或者 channel
结构化剪枝很适合硬件平台使用
在卷积核、通道、形状方面使其稀疏化
在这里插入图片描述
和ADMM结合:第一个问题不变,而改变第二个约束和映射,不同的结构化剪枝的结果减小的矩阵的大小,但是它仍然是一个矩阵,因此硬件平台就可以实现。

不建议对于任何硬件平台的神经 网络进行非结构化修剪( gpu、多核CPU、嵌入式平台、FPGA、ASIC、新兴硬件设备等)
其实结构化剪枝对于硬件平台也是不太好的,因为 1.输入输出的特征矩阵有冗余 2.和加速Winograd算法不相适应。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值