如何能在保持原始模型性能的同时,减少网络参数规模并降低计算复杂度呢?模型的压缩和加速就是围绕这两个方向展开研究的。模型压缩目的是减少网络参数量;模型加速的目标则是降低计算复杂度。
模型压缩和加速可以通过多种方式来实现。
首先是针对网络结构本身进行优化改进,常见的如使用3x3的小卷积核取代大卷积核;average-pooling取代了full-connection layers;MobileNets中使用depth-wise convolution替代传统的卷积方式等。
除了根据人工经验和数学模型设计的特有算子结构外,还包括模型剪枝、量化、蒸馏方法。剪枝方法去除神经网络结构中不重要的部分;量化方法则是调整网络结构中的权重或激活值的表达精度;蒸馏方法则是把复杂网络结构的知识转移到较小网络结构上。
其次是在推理框架上做优化,成熟的轻量化框架如TensorRT/Tf-lite/NCNN/MNN等,这些框架能够实现编译优化、缓存优化、算子优化、稀疏存储与计算、加速指令集应用等。能显著的提升模型推理速度。
最后是在硬件层级,硬件厂商通常会为特定深度学习任务或者框架做针对性设计优化,使得模型在匹配的硬件平台上获得最大的加速效果。目前主流的硬件平台有GPU,FPGA,ASIC等。GPU通用性好,计算能力强,但是功耗较大,主要用在云端训练和推理;而ASIC这种定制化程度较高的芯片通用性较低,在专属任务上性能较高,主要用在前端计算设备上。TPU和NPU属于ASIC的范畴。
本文重点总结了剪枝、量化方法的技术原理。并分别介绍了两种轻量化方案的若干典型方法。
内容中包含的图片若涉及版权问题,请及时与我们联系删除
评论
沙发等你来抢