模型压缩和知识蒸馏技术
引言
模型压缩是工程部署一个重要的环节,这里对一些基础的模型压缩方法进行回顾,并附带代码传送门案例分析(欢迎大佬指点,谢谢)
目前的框架有:
Deep Compression、XNorNet、Distilling、PocketFlow腾讯、transform_graph(tensorflow)、Netural distiller、Kaddle slim等
2 模型压缩方法
2.1 distiller
拜师学艺,老师博学多才,收了很多徒弟,徒弟总能学习到知识,但是徒弟自身水平层次不齐最终出师的时候能力不相同,选择好的模型作为最终模型。非常绝妙的思想,但是大多数时候学生的提高是有限的,而且与老师的差距还是很大。所以,已经有优秀的老师了,直接在老师身上直接进行改造(神经网络的稀疏性决定的),然后在这个基础上再蒸馏。
主要涉及到两个方面:
2.2 prunning
2.3 quantization
3 框架分析
3.1 框架分析
各种框架基本涵盖了常用的一些压缩方法,还有一些特殊网络压缩,近几年也有一些特殊网络GAN、RNN等的工作
框架 | 架构 | |
---|---|---|
PocketFlow | 在参数优化中有强化学习和AML,当然还在扩充 | |
Netural network distiller | 使用灵活,可扩展性比较强 |
这里主要使用distiller的网络架构distiller,官方文档非常详细了。
3.2 compression 案例分析
以cifar数据集为例
3.1 distiller
根据模型的结构可以选择在不同的位置进行蒸馏,然后对loss fucntion 建立不同的权值相加进行监督训练
1)首先是对于概率分布进行蒸馏,对于分类网络对于最后一层设置一个softmax层,对于Teacher net 和Student net 的概率分布的误差建立KL散度进行对比分析,作为监督误差进行分析
2)其提取的feature进行监督,采用mmd loss衡量两个特征之间的差异