回答要点:
非结构化剪枝:
方式:剪掉网络中不重要的单个权重(细粒度)。
优点:粒度细,可以剪掉大量参数而不显著损失精度。
缺点:生成稀疏的权重矩阵,需要专门的稀疏计算库和硬件才能实现加速,通用硬件(如GPU)加速效果差。
结构化剪枝:
方式:剪掉整个通道、滤波器或神经元(粗粒度)。
优点:直接生成更小的稠密模型,可以直接在通用硬件上获得显著的加速。
缺点:粒度粗,对模型精度的伤害通常比非结构化剪枝大。
回答要点:
基于权重大小:L1或L2范数最小的权重/通道被认为最不重要。
基于梯度信息:在训练过程中,根据权重的重要性评分(如其梯度)进行剪枝。
基于激活值:平均激活值接近零的通道被认为不重要。
基于Hessian信息:通过计算损失函数对权重的二阶导数(Hessian矩阵)来估计剪枝对损失的影响(非常精确但计算昂贵)。
回答要点:
剪枝首先:因为它通过移除冗余结构,从根本上改变了模型架构,使其变得更小、更紧凑。这是一个“外科手术”步骤。
蒸馏其次:剪枝后的模型精度会下降。此时使用强大的教师模型对其进行知识蒸馏,可以恢复甚至提升剪枝后小模型的性能,让它重新变得“聪明”。
量化最后:当模型结构和精度都稳定后,再进行量化。量化是一种“无损/微损”的转换,将确定好的稠密浮点模型转换为低精度格式,以实现最终的存储和加速收益。如果先量化,剪枝和蒸馏的训练过程会变得复杂且低效。