[!quote]-
Abstract 不同粒度的剪枝
剪枝准则
Introduction to Pruning
What is Pruning?
名词术语解释
- synapses突触
- neurons神经元
- Granularity 粒度
Make neural network smaller by removing synapses and neurons
Pruning Processing
根据某种criteria进行权重的选择
可以看到初始的权重分布近似高斯,剪枝后的权重在零值出出现了gap,重新训练后的权重弥补了gap并且分布的更加均匀
进一步,反复剪枝和重训练,能达到压缩模型90%的情况下实现无精度损失
经典网络模型的剪枝实验
(**注意Parameter和MACs的计算方法不同[[L02-Efficiency Metrics]])
这里AlexNet和VGG-16中的全连接层FC数量比较多,SqueezeNet原本的参数量就已经很小,但是Dr. Han在Ph.D论文实验中进行测试,还是很进一步压缩的空间的!
How should we formulate pruning?
在约束条件:非零权重non-zero weight数量小于阈值N(这个阈值N往往是通过设定剪枝比例来计算的)的条件下,使得pruned weights剪枝后的权重计算得到的Loss最小
Determine the Pruning Granularity
In what pattern should we prune the neural network?
结构化剪枝vs非结构化剪枝
- 细粒度(非结构化)的剪枝更加灵活,但对于硬件不够友好
- 粗粒度(结构化)剪枝不够灵活,但是适合硬件加速
**不同粒度的剪枝分类如下
从左向右具有越来越规则的pattern,注意第二个方法的pattern固定后比fine-grained方法更好索引
Fine-grained
- Fine-grained剪枝具有最灵活的索引,通常可以获得更大的压缩率;适合在custom hardware上进行加速而不适合GPU
Pattern-based
- Pattern-baed (NVIDIA的GPU支持这类剪枝)
- N:M的意思是每M个连续的元素中有N个被剪枝,例如下图中为2:4的剪枝
- 将8x8的dense matrix压缩乘8x4的矩阵,然后用额外的2-bit位宽数据保存索引
- 其中,1bit为location,1bit为该位置上的weight是不是零
Channel-level
- Channel Pruning获得明显加速,但是压缩率不能过高(要不然整没了
Determine the Pruning Criterion
What synapses/neurons should we prune?
**less important parameters being removed are, the better performance of pruned neural network is.
intuition:0.1应该被舍弃
1 Magnitude-based
直接取绝对值(L1-norm)
-
对于element-wise的剪枝,直接对每个element取绝对值,保留大的,将小的置为0
-
对于row-wise的剪枝,可以取绝对值后每行求和,保留sum大的行
L2-norm
也可以计算L2-norm、Lp-norm
2 Scaling-based
- A scaling factor is associated with each filter (i.e., output channel) in convolutional layers
- The scaling factor is multiplied to the output of that channel
- The scaling factors are trainable parameters(encourage some channel to zero)
最后得到小的scaling factor的通道会被剪枝
- 如何使用?
- scaling factors可以在BN层加入,而不需要一个额外的layer
^kkcprq
- scaling factors可以在BN层加入,而不需要一个额外的layer
3 Taylor Expansion Analysis on Pruning Error
- 参数的重要性可以通过定量化移除它引入的误差来评估
- 假设:
- 目标函数L是近似二阶的,最后一项高阶可以忽略
- 在进行量化压缩时神经网络的训练已经收敛,一阶项可以忽略
- 消除每个参数引入的误差是独立的,交叉项可以忽略
可以得到
但是这个东西很难计算,所以可以用一阶的来近似
4 First-Order-based
Selection of Neurons to Prune
神经元的剪枝相当于粗粒度剪枝
移除一个FC层的神经元类似移除一个卷积层的通道
1 Percentage-of-Zero-Based Pruning
- 经过ReLU激活的输出会存在很多零
- 与weights的幅值类似,零激活的平均百分比可以是一个神经元重要性的测度
- 上图中,左边为image1,右边为image2的输出,均为3通道,输出特征为4x4
- 计算非零输出个数来决定哪个通道被剪枝
2 First-Order-based
3 Regression-based
- 基于回归的剪枝最小化每层输出的重建误差
- 只考虑一层,因此是一种local optimal
- β 长度 = c i \beta 长度 = c_{i} β长度=ci
- 若 β 1 = 0 \beta_{1}=0 β1=0 则表示 x 1 = 0 x_{1}=0 x1=0 即通道1被剪枝
上述目标函数可以重写为
ThiNet proposed a greedy solution to optimize
相当于找到最小的L2正则项的通道
放宽约束条件可以求解LASSO回归
用最小二乘求解