深度神经网络模型压缩综述#
参考:深度神经网络模型压缩综述
模型剪枝
模型剪枝是指通过去除模型中对性能影响较小的部分,从而解决模型过参数化问题. 根据不同的剪枝粒度,模型剪枝可以分为结构化剪枝 [DCP17] 与非结构化剪枝 [HLL+18, LLS+17]。非结构化剪枝后的模型有时会带来稀疏运算问题,需要额外的计算库支持。而结构化剪枝虽然直接有效地起到了压缩加速的作用,但模型的格式仍为 32 位浮点型,无法部署到低位宽的硬件设备上。
知识蒸馏
基于知识蒸馏[13−15] 的方法使用一个已经训练好的较大规模网络模型作为教师网络,通过设计特定的损失,来指导训练一个小规模的网络模型,且学生网络的性能最终能够比肩教师网络。该方法为模型压缩加速提供了一种新的思路,但是其也存在一定的不足:一方面,知识蒸馏应用于具有 Softmax[16] 损失函数的任务,进而被限制使用范围;另一方面,知识蒸馏需要额外设计学生网络结构,这对模型设计经验的要求较高。
神经网络结构搜索
基于神经网络结构搜索的方法[17−19] 可以通过算法自动设计神经网络结构。该方法能够找到较优的轻量级网络模型结构,但是搜索过程会消耗大量的时间和计算资源。
张量分解
常见的张量分解方法有奇异值分解[20]、Tucker 分解[21−22] 和CP 分解(Canonical polyadic decomposition)[23−24]. 张量是数学中的多维数组,也是神经网络中数据的表征载体,而张量分解方法依据低秩近似,将张量分解为多个尺寸更小的张量,以达到减小神经网络模型储存空间的目的. 为了充分利用分解带来的优势,需要协同开发特殊格式的 DNN 硬件加速器[25−28]。
模型量化
基于量化的方法可以通过减少网络模型运算数值的位宽来达到压缩和加速深度神经网络的目的,从而使深度神经网络具有部署在资源受限、低位宽的边缘设备的条件. 模型量化技术在工业界已取得较成熟的应用,如 Qualcomm、NVIDIA 和 Google 等公司相继推出产业相关的白皮书[29−30] 和模型量化部署框架[31−33]. 大量实验研究和应用实践表明,量化方法是一种在模型训练和推理方面都取得了巨大成功的方法.