- 目前深度学习模型压缩方法主要分为更精细化模型设计、模型裁剪、核的稀疏化、量化、低秩分解、迁移学习等方法,而这些方法又可分为前端压缩和后端压缩
27.1 前端压缩和后端压缩对比
对比项目 | 前端压缩 | 后端压缩 |
---|---|---|
含义 | 不会改变原始网络结构的压缩技术 | 会大程度上改变原始网络结构的压缩技术 |
主要方法 | 知识蒸馏、紧凑的模型结构设计、滤波器层面的剪枝 | 低秩近似、未加限制的剪枝、参数量化、二值网络 |
实现难度 | 较简单 | 较难 |
是否可逆 | 可逆 | 不可逆 |
成熟应用 | 剪枝 | 低秩近似、参数量化 |
待发展应用 | 知识蒸馏 | 二值网络 |
27.2 网络剪枝
深度学习模型因其稀疏性,可以被裁剪为结构精简的网络模型,具体包括结构性剪枝与非结构性剪枝。
事项 | 特点 | 举例 |
---|---|---|
非结构化剪枝 | 通常是连接级、细粒度的剪枝方法,精度相对较高,但依赖于特定算法库或硬件平台的支持 | Deep Compression, Sparse-Winograd算法等; |
结构化剪枝 | 是filter级或layer级、粗粒度的剪枝方法,精度相对较低,但剪枝策略更为有效,不需要特定算法库或硬件平台的支持,能够直接在成熟深度学习框架上运行。 | 如局部方式的、通过layer by layer方式的、最小化输出FM重建误差的Channel Pruning, ThiNet, Discrimination-aware Channel Pruning ;全局方式的、通过训练期间对BN层Gamma系数施加L1正则约束的Network Slimming;全局方式的、按Taylor准则对Filter作重要性排序的Neuron Pruning ;全局方式的、可动态重新更新pruned filters参数的剪枝方法 |
-
如果按剪枝粒度分,从粗到细,可分为中间隐含层剪枝、通道剪枝、卷积核剪枝、核内剪枝、单个权重剪枝。下面按照剪枝粒度的分类从粗(左)到细(右)。
(a)层间剪枝 (b)特征图剪枝 (c)k*k核剪枝 (d)核内剪枝
事项 | 特点 |
---|---|
单个权重粒度 | 早期 Le Cun[16]提出的 OBD(optimal brain damage)将网络中的任意权重参数都看作单个参数,能够有效地提高预测准确率,却不能减小运行时间;同时,剪枝代价过高,只适用于小网络 |
核内权重粒度 | 网络中的任意权重被看作是单个参数并进行随机非结构化剪枝,该粒度的剪枝导致网络连接不规整,需要通过稀疏表达来减少内存占用,进而导致在前向传播预测时,需要大量的条件判断和额外空间来标明零或非零参数的位置,因此不适用于并行计算 |
卷积核粒度与通道粒度 | 卷积核粒度与通道粒度属于粗粒度剪枝,不依赖任何稀疏卷积计算库及专用硬件;同时,能够在获得高压缩率的同时大量减小测试阶段的计算时间.由 |
- 从剪枝目标上分类,可分为减少参数/网络复杂度、减少过拟合/增加泛化能力/提高准确率、减小部署运行时间/提高网络效率及减小训练时间等。
大数据视频推荐:
网易云课堂
CSDN
人工智能算法竞赛实战
AIops智能运维机器学习算法实战
ELK7 stack开发运维实战
PySpark机器学习从入门到精通
AIOps智能运维实战
腾讯课堂
大数据语音推荐:
ELK7 stack开发运维
企业级大数据技术应用
大数据机器学习案例之推荐系统
自然语言处理
大数据基础
人工智能:深度学习入门到精通