模型压缩大概分为以下几个方向:
更精细模型的设计:
目前的很多网络都具有模块化的设计,在深度和宽度上都很大,这也造成了参数的冗余很多,因此有很多关于模型设计的研究,如SqueezeNet、MobileNet等,使用更加细致、高效的模型设计,能够很大程度的减少模型尺寸,并且也具有不错的性能。
模型裁剪:
结构复杂的网络具有非常好的性能,其参数也存在冗余,因此对于已训练好的模型网络,可以寻找一种有效的评判手段,将不重要的connection或者filter进行裁剪来减少模型的冗余。
核的稀疏化:
在训练过程中,对权重的更新进行诱导,使其更加稀疏,对于稀疏矩阵,可以使用更加紧致的存储方式,如CSC,但是使用稀疏矩阵操作在硬件平台上运算效率不高,容易受到带宽的影响,因此加速并不明显。
除此之外,量化、Low-rank分解、迁移学习等方法也有很多研究,并在模型压缩中起到了非常好的效果。
2015年,Han发表的Deep Compression是一篇对于模型压缩方法的综述型文章,将裁剪、权值共享和量化、编码等方式运用在模型压缩上,取得了非常好的效果,作为ICLR2016的best paper,也引起了模型压缩方法研究的热潮。其实模型压缩最早可以追溯到1989年,Lecun老爷子的那篇Optimal Brain Damage(OBD)就提出来,可以将网络中不重要的参数剔除,达到压缩尺寸的作用,想想就可怕,那时候连个深度网络都训练不出来,更没有现在这么发达的技术,Lecun就已经想好怎么做裁剪了,真是有先见之明,目前很多裁剪方案,都是基于老爷子的OBD方法。