模型压缩与加速
- 必要性:参数量太大,太多冗余
- 最大程度的减小模型复杂度,减少模型存储需要的空间,也致力于加速模型的训练和推理
前端压缩
- 几乎不改变网络结构
知识蒸馏
- 采用的是迁移学习,通过采用预先训练好的教师模型(teacher model)的输出作为监督信号去训练另外一个轻量化的网络(student model)
- 教师模型:大&强
- 学生模型:小&快
- 监督信息可以为:
- 概率分布
- KL散度:描述两个概率分布差异的方法,是非对称的,有相应包torch.nn.KLDivLoss()
- 输出的特征
- 中间层feature map
- MMD Loss:最大均值差异损失,可以评价两个域的相似性
- attention map
- 中间过程
- L2损失,torch.nn.MSELoss()
- 概率分布
紧凑模型设计
常见的紧致网络
-
ShuffleNet
- 使用通道打乱操作来代替1*1卷积,实现通道信息的融合
- 通过reshape操作实现,不包含参数
-
MobileNet v1
- 大量使用33的depthwise卷积和11卷积组合的Xception结构
-
MobileNet v2
- 使用率高
- 在DW卷积前新加了一个1*1卷积,增加网络通道数
- 去掉了第二个PW的激活函数,防止特征丢失
- 增加了resnet的shortcut结构
- 通过改变网络参数设置,v2比v1进一步压缩了约50%,并且泛化能力提升
-
SqueezeNet
- 利用1*1卷积
- 减少3*3卷积的特征图数量
- 减少pooling
滤波器级别的剪枝
后端压缩
- 极大的改变网络结构
- 追求极致的压缩比,改变往往是不可逆的,为了达到理想的压缩效果需要开发配套的运行库和硬件设备
低秩近似
- 分解矩阵
卷积分解
- 将d✖️d的卷积核分解为d✖️1和1✖️d卷积核,损失精度小于1%
SVD分解
- 对矩阵进行SVD分解,保留特征值最大的几项
不加限制的剪枝
- 网络训练完成后,裁剪掉贡献信息量不大的网络参数
基本流程
- 1、衡量神经元的重要程度
- 2、移除一部分不重要的神经元
- 3、对网络进行微调
- 4、返回第一步,进行下一轮剪枝
剪枝类型
剪枝方法分类
-
权重衰减法
-
基本流程
- 在网络损失函数中加入正则化保证网络稀疏
- 设置一个阈值,删除网络权重低于阈值的网络节点
- 对网络进行训练
- 返回第一步,进行下一轮剪枝
-
缺点
- 阈值的选择
- 硬件支持不好
-
-
灵敏度量化法
- 网络节点对于网络误差的贡献
-
根据相关性剪枝
- 类似PCA
参数量化和二值化
- 二值量化
- 三值量化
- 多值量化
- 量化对象
- 网络权重
- 网络特征
- 网络梯度