模型剪枝
1. 引言
在神经网络轻量化方法中,模型剪枝是一条非常重要的技术路径。它的基本目标,是在尽可能保持模型主要表达能力的前提下,删除其中冗余的参数或结构,从而降低模型规模与计算开销。对于已经训练完成的网络来说,剪枝提供了一种直接面向模型冗余的压缩方式;对于轻量化研究来说,剪枝也提供了一个观察网络内部冗余分布的重要视角。
从模型角度看,剪枝所处理的核心问题是:深度网络在达到较高性能的同时,往往也包含了大量并非同等重要的参数与结构。这些成分有的承担主要表达任务,有的贡献较弱,有的则存在明显冗余。模型剪枝正是围绕这种“重要性不均衡”展开的。通过识别并删除低贡献部分,网络可以在更紧凑的形式下保留主要功能。
围绕模型剪枝,通常有三个最关键的问题。第一个问题是:神经网络为什么可以被裁剪。第二个问题是:不同剪枝方式之间有什么区别,尤其是结构化剪枝与非结构化剪枝分别意味着什么。第三个问题是:模型完成剪枝之后,为什么还需要通过微调来恢复性能。这三个问题合在一起,构成了理解模型剪枝的基本框架。
因此,这篇文章会沿着一条完整主线展开:先讨论神经网络中冗余为何存在,再介绍模型剪枝的基本流程和主要类型,随后分析结构化剪枝与非结构化剪枝的差异,最后讨论剪枝后微调的必要性。通过这条路径,可以对模型剪枝形成一个更系统的认识。
2. 模型剪枝的基本问题
2.1 模型为什么会存在冗余
深度神经网络通常具有较强的过参数化特征。为了提升优化稳定性、训练收敛能力和模型表达上限,网络在设计时往往会配置大量参数、通道和层级结构。这种设计有助于模型在训练过程中获得更强的拟合能力,也让网络在复杂任务上具备更高的上限。
但从结果来看,网络中并不是所有参数和结构都承担了同样重要的作用。某些参数对输出非常敏感,某些参数的变化对性能影响较小;某些通道承载了较强的判别信息,某些通道则贡献有限;某些结构在任务中不可缺少,某些结构则存在替代性或冗余性。这种重要性分布的不均衡,是模型冗余产生的根本基础。
2.2 模型剪枝要解决什么问题
更具体地说,剪枝通常关注以下几类目标:
减少模型参数量
降低模型存储开销
降低计算复杂度
压缩模型结构
为后续部署和轻量化优化创造条件
从这个角度看,模型剪枝关注的不是“把模型随意删小”,而是对模型冗余进行有选择地压缩。网络中哪些部分值得保留,哪些部分可以删除,是剪枝过程中最核心的判断问题。
2.3 模型剪枝与量化、轻量化网络设计的关系
模型剪枝属于轻量化方法体系中的一类,但它与量化、轻量化网络设计的出发点并不相同。
量化主要关注数值表示方式的压缩
轻量化网络设计主要关注从结构设计阶段控制复杂度
剪枝主要关注对已有网络中的冗余部分进行删除
也就是说,剪枝的重点是“删减冗余”,量化的重点是“压缩表示”,轻量化网络设计的重点是“源头设计”。三者经常可以联合使用,但在原理层面具有不同关注点。

3. 为什么神经网络可以被裁剪
3.1 过参数化是深度网络的普遍现象
现代深度网络通常不是在“刚好够用”的参数规模下工作,而是在较强过参数化条件下运行。网络参数较多,带来的直接结果是更高的表达上限、更大的优化空间,以及更强的训练拟合能力。这种设计方式在很多任务中都被证明是有效的。
过参数化带来的另一个结果,是网络内部存在大量潜在冗余。因为网络为了获得足够强的学习能力,往往配置了比实际最终所需更多的表示资源。这为后续剪枝提供了空间:网络可以在压缩之后,仍然保留相当一部分原有能力。
3.2 并不是所有参数都同等重要
在一个训练完成的网络中,不同参数对模型最终输出的影响程度并不相同。有些权重承担了关键的特征选择或判别作用,有些权重的数值较小、梯度贡献较低或对输出变化不敏感。这意味着参数本身存在重要性差异。
模型剪枝的理论基础之一,就是这种重要性差异的存在。因为如果所有参数都同等关键,那么任何删除都会对模型造成同等程度损伤,剪枝就难以成立。实际情况则表明,网络中的许多参数可以被删减,而模型性能只会受到有限影响,说明网络中确实存在一部分低贡献参数。
3.3 冗余可以存在于权重、通道、层和特征表示中
模型冗余并不只存在于单个权重层面,还可能存在于更高层级的结构中。例如:
某些单独权重贡献较弱
某些卷积核或滤波器作用有限
某些通道承载的信息量较低
某些层之间存在部分可替代性
某些特征表示彼此高度相似
这说明,剪枝的对象既可以是细粒度的参数,也可以是更粗粒度的结构。不同粒度的冗余,决定了不同类型剪枝方法的产生。
3.4 剪枝的本质:删除低贡献部分,保留主要表达能力
综合来看,神经网络可以被裁剪的原因,在于网络内部存在可压缩冗余,而这些冗余并不承担主要表达任务。剪枝所做的工作,就是根据一定的准则识别低贡献部分,并将其从网络中移除。
这一点决定了模型剪枝既不是随机删减,也不是简单减少参数数量,而是一种围绕“冗余识别与能力保留”展开的结构压缩方法。
4. 模型剪枝的基本流程
模型剪枝通常不是一个单独动作,而是一套连续过程。一个完整的剪枝流程通常包括以下几个步骤。
4.1 训练一个基线模型
剪枝的起点,通常是一个已经训练完成并达到可接受性能的基线模型。只有当模型本身已经具备稳定表达能力之后,剪枝才有意义。因为剪枝关注的是删除冗余,而不是替代训练本身。
4.2 评估参数或结构的重要性
在执行剪枝之前,需要先判断模型中哪些部分相对重要,哪些部分相对不重要。这个步骤通常依赖某种重要性评估准则,例如权重大小、梯度敏感性、激活响应、BatchNorm 缩放因子或其他结构性指标。
重要性评估的目标,是给网络中的参数、卷积核、通道或层分配一个可比较的“贡献程度”刻画,从而为剪枝操作提供依据。
4.3 执行剪枝操作
在得到重要性评估结果之后,就可以根据设定的剪枝率或阈值,对低贡献部分进行删除。根据删除粒度不同,剪枝可能表现为:
将若干单个权重置零
删除部分卷积核
删除若干通道
删除某些结构分支
这个阶段是模型结构真正发生压缩的地方。
4.4 对剪枝后的模型进行微调
剪枝完成后,模型结构和参数分布都会发生改变,原有最优状态被打破。为了让剩余参数重新适应新的网络结构,通常需要进行进一步训练,也就是微调。
微调的目标,是让保留下来的参数重新协调,从而恢复模型表达能力,弥补剪枝带来的性能损失。
4.5 在精度与压缩率之间反复权衡
模型剪枝通常不是一次就能得到最优结果。不同剪枝率、不同重要性标准、不同微调策略,都会影响最终效果。因此,在实际过程中,往往需要在压缩率与精度之间反复权衡,逐步找到更合适的平衡点。
5. 模型剪枝的主要类型
5.1 非结构化剪枝
非结构化剪枝(Unstructured Pruning)以单个权重为基本剪枝对象。它会从权重矩阵中删除若干具体参数,通常表现为把这些权重置零。这样做之后,网络整体拓扑并不发生显著变化,但参数矩阵中会出现大量零元素。
这种剪枝方式粒度最细,因此在理论上具有较高灵活性,也更容易获得较高参数压缩率。
5.2 结构化剪枝
结构化剪枝(Structured Pruning)以更高层级的结构单元为剪枝对象,例如:
整个卷积核
整个通道
整个注意力头
整个层或分支
这种方式不会只删掉零散的若干权重,而是直接删除具有明确结构边界的完整单元。这样一来,剪枝后的模型在结构上会变得更小、更规整。
5.3 不同剪枝粒度的常见形式
从粒度上看,剪枝可以覆盖多个层级:
- 权重级剪枝:删除单个参数
- 卷积核级剪枝:删除整个滤波器
- 通道级剪枝:删除某些输入/输出通道
- 层级剪枝:删除整层或模块
- 块级剪枝:删除更大粒度的结构块
粒度越细,灵活性通常越高;粒度越粗,结构规整性通常越强。不同粒度选择,决定了模型压缩与结构变化的不同方式。
6. 非结构化剪枝
6.1 基本思想
非结构化剪枝的核心思想是:在参数矩阵内部,删除那些贡献较低的单个权重。由于删除对象是离散的权重元素,因此这种方式并不要求遵循卷积核、通道或层的结构边界。
它所形成的结果,通常是一个带有大量零值的稀疏权重矩阵。
6.2 常见做法
非结构化剪枝的常见做法包括:
基于权重绝对值大小进行阈值裁剪
基于梯度或敏感性估计参数重要性
逐步增加稀疏率的迭代剪枝
稀疏训练与剪枝联合优化
其中,最常见的入门做法是按权重大小排序,然后删除绝对值较小的一部分参数。
6.3 优势
非结构化剪枝具有以下特点:
剪枝粒度细,灵活度高
容易保留网络主要结构
在理论上能够获得较高稀疏率
对模型表达能力的局部调整更细腻
6.4 局限性
非结构化剪枝的局限主要在于:虽然参数数目减少了,但模型整体结构没有发生规整收缩。网络层的输入输出维度通常保持不变,矩阵中只是出现了大量零值。
从模型角度看,这意味着参数被删掉了,但结构仍然保持原形。这样的稀疏形式在表达上是压缩的,在结构上则相对松散。
7. 结构化剪枝
7.1 基本思想
结构化剪枝的核心思想是:以完整结构单元为对象进行删除,让模型在结构层面直接收缩。相比非结构化剪枝只删单个权重,结构化剪枝更关注具有明确边界的模块性单元。
例如,在卷积网络中,删除某个输出通道,意味着与该通道相关的一整组参数都会被移除;删除某个卷积核,也意味着一个完整滤波器从网络中消失。
7.2 常见做法
结构化剪枝的常见形式包括:
通道剪枝
卷积核剪枝
层剪枝
分支剪枝
模块级剪枝
在 CNN 中,通道剪枝最常见,因为它能直接改变特征图维度,从而影响后续层的结构规模。
7.3 优势
结构化剪枝的优势主要包括:
剪枝结果更规整
模型结构直接缩小
更容易得到参数量与 FLOPs 的同步下降
更适合形成真正意义上的小模型结构
7.4 局限性
结构化剪枝的粒度较粗,因此每次删除操作带来的影响通常更大。因为删除的是完整结构单元,所以精度损失可能更加明显,剪枝过程对重要性评估也提出了更高要求。
另外,结构化剪枝对网络结构的改变更直接,因此剪枝策略通常需要更谨慎,过高剪枝率可能迅速破坏模型能力。
8. 结构化剪枝与非结构化剪枝的区别
8.1 剪枝对象不同
二者最直接的区别,在于删除对象不同:
非结构化剪枝删除的是单个权重
结构化剪枝删除的是完整结构单元
因此,前者关注细粒度参数稀疏,后者关注结构级压缩。
8.2 稀疏形式不同
这意味着,两者在压缩结果的表现形式上存在显著差异。
8.3 对模型结构的影响不同
非结构化剪枝通常不会显著改变网络整体拓扑,层与层之间的尺寸关系大多保持不变。结构化剪枝则会直接改变网络形状,例如中间特征图通道数减少、卷积层输入输出维度变化等。
从模型层面看,非结构化剪枝更像是在原结构内部做稀疏化,结构化剪枝更像是在整体结构上做裁剪。
8.4 对实际加速效果的影响不同
从理论上讲,非结构化剪枝删除了大量权重,参数数目下降明显;结构化剪枝则删除完整结构,FLOPs 和结构规模更容易同步下降。
从模型分析角度看,结构化剪枝通常更容易对应到显式的网络压缩结果,而非结构化剪枝更突出参数层面的稀疏表达。
8.5 适用场景的差异
如果目标是观察模型参数冗余、追求高稀疏率,非结构化剪枝往往更灵活;如果目标是直接得到更规整、更紧凑的压缩网络,结构化剪枝通常更符合需求。

9. 为什么剪枝之后还需要微调
9.1 剪枝会破坏原有参数分布
一个训练完成的模型,其参数已经经过长期优化,形成了相互适配的分布状态。剪枝操作会直接改变这种平衡。无论删除的是单个权重还是完整通道,网络原本已经建立起来的参数协同关系都会被打破。
这意味着,剪枝之后的模型虽然保留了部分原参数,但整体已经不是原来的最优状态。
9.2 剪枝会影响特征表达能力
参数和结构的减少,会直接影响特征传递与表示路径。部分信息通路被删减之后,网络对某些模式的表达能力会下降,中间特征分布也会发生改变。这种变化通常会表现为模型精度下降。
这种性能下降是剪枝带来的正常结果,因为模型容量已经发生了压缩,参数之间的协同关系也被重新打断。
9.3 微调的作用是让剩余参数重新适应网络
微调的核心作用,是让剪枝后保留下来的参数重新适应新的结构状态。通过进一步训练,剩余参数可以重新调整分工,建立新的协同关系,从而在更小网络中恢复尽可能多的表达能力。
从这个意义上说,微调是剪枝后的再平衡过程。它让网络从“被压缩后的失衡状态”重新走向“压缩后的适应状态”。
9.4 微调是剪枝流程的重要组成部分
对于大多数剪枝方法来说,微调都是完整流程中的关键步骤。没有微调,剪枝后的模型通常只能停留在“被删减之后的中间状态”;经过微调,模型才真正完成从原结构到压缩结构的迁移。
因此,剪枝与微调通常构成一个整体闭环:
先识别冗余并执行剪枝
再通过微调恢复与重组表达能力

10. 模型剪枝的收益与代价
10.1 参数压缩收益
模型剪枝最直接的收益,是参数数量下降。对于过参数化网络而言,剪枝能够以较直接的方式减小模型规模,使模型在存储层面更加紧凑。
10.2 计算复杂度收益
当剪枝对象覆盖到卷积核、通道或层等结构单元时,模型的 FLOPs 也会随之下降。这意味着剪枝不仅可以压缩参数,还可以降低网络的理论计算复杂度。
10.3 可能的精度损失
剪枝带来的主要代价,是模型表达能力可能下降。因为网络容量被压缩之后,部分原有表示路径被删除,性能通常会受到影响。剪枝率越高,精度下降风险通常越大。
10.4 剪枝率并不是越高越好
高剪枝率意味着更强的压缩力度,但也意味着更高的性能损伤风险。对于剪枝来说,更重要的不是把模型删到最小,而是在压缩率与性能之间找到更合理的平衡点。
11. 如何理解模型剪枝的核心价值
11.1 剪枝是对模型冗余的结构化处理
模型剪枝的价值,来自它对网络内部冗余的直接处理能力。它让轻量化工作不再只停留在“换更小网络”或“改数值精度”层面,而是直接进入模型本体内部,对已有网络进行有针对性的压缩。
11.2 剪枝体现了模型能力分布的不均衡性
剪枝能够成立,本身就说明神经网络中的能力分布并不均匀。模型的表达能力并不是平均分配在每个参数和每个结构上的,而是集中分布在其中的一部分关键成分中。剪枝把这种分布特征显式利用了起来。
11.3 真正有价值的剪枝是复杂度与性能的平衡
评价剪枝效果时,最重要的不是删掉了多少参数,而是删掉这些参数之后,模型是否仍然保持了足够好的性能。高质量剪枝关注的是:
冗余是否被有效删除
主体能力是否被尽量保留
模型是否在更紧凑形式下保持可用性
12. 总结
模型剪枝是神经网络轻量化中的一类重要方法。它建立在深度网络广泛存在过参数化与冗余这一事实基础上,通过删除低贡献参数或结构单元,实现模型压缩与复杂度下降。
从原理上看,神经网络可以被裁剪,是因为网络内部不同参数和结构的重要性并不均衡,冗余可以存在于权重、卷积核、通道、层和特征表示等多个层级。基于这种冗余分布,模型剪枝可以识别低贡献部分,并对其进行有选择地删除。
从方法上看,模型剪枝主要包括非结构化剪枝和结构化剪枝两类。前者以单个权重为对象,强调细粒度稀疏化;后者以通道、卷积核或层等完整单元为对象,强调规整化结构压缩。二者在剪枝对象、结果形式和结构影响上都存在明显差异。
从流程上看,剪枝并不是一个单独动作,而是“基线训练—重要性评估—执行剪枝—微调恢复”的连续过程。剪枝之后的微调具有非常重要的意义,因为剪枝会改变参数分布和特征表达路径,而微调能够帮助剩余参数重新适应新的网络结构。
综合来看,模型剪枝的核心价值在于:它让模型压缩从“整体缩小”进入“内部冗余重构”阶段。一个高质量的剪枝过程,关注的不是单纯删掉多少参数,而是在更小复杂度下保留尽可能多的有效表达能力。