一、论文基本信息
论文名称:Learning both Weights and Connections for Efficient Neural Networks
作者:Song Han, Jeff Pool, John Tran, William J. Dally
会议:Advances in Neural Information Processing Systems,NeurIPS 2015
论文链接:1506.02626 Learning both Weights and Connections for Efficient Neural Networks
官方页面:Learning both Weights and Connections for Efficient Neural Network
复现代码:vgg16剪枝代码
这篇论文是模型剪枝领域非常经典的一篇工作。
如果说前面讲的 Optimal Brain Damage 和 Optimal Brain Surgeon 代表了早期基于二阶信息的剪枝理论,那么 Song Han 等人在 2015 年提出的这篇论文,则可以看作深度学习时代剪枝方法重新兴起的重要标志。
它的核心思想非常清晰:神经网络不仅要学习权重数值,还应该学习哪些连接是重要的。
传统神经网络训练时,网络结构通常是人为预先设定好的。比如一层有多少个神经元、两层之间是否全连接、卷积层有多少个通道,这些通常在训练前已经固定。
训练过程中,模型只学习权重值:但是网络连接关系本身并不会改变。
Han 等人认为,这样并不合理。因为在一个过参数化神经网络中,并不是所有连接都对最终任务有用。很多连接经过训练后权重很小,对模型输出贡献也很小。
因此,论文提出:先训练一个密集网络;再删除不重要连接;最后重新训练剩余连接。
这就是标题中 "Learning both Weights and Connections" 的含义:既学习权重值,也学习网络连接结构。
二、这篇论文为什么重要?
这篇论文的重要性主要体现在三个方面。
1. 它让剪枝重新回到深度神经网络主流视野
早期 OBD/OBS 已经提出了剪枝思想,但那些方法主要在较小规模网络上研究。随着 AlexNet、VGG 等深度网络兴起,神经网络参数量迅速增加,模型存储和计算成本成为实际部署中的重要问题。这篇论文把剪枝用于现代深度网络,并证明大规模深度网络中存在大量冗余连接。论文的目标不是设计一个新网络,而是回答:已经训练好的大网络中,到底有多少链接可以被删除。
2. 它提出了经典的三阶段剪枝流程
这篇论文提出的流程非常简单,但影响很大:Train → Prune → Retrain
也就是:
训练原始密集网络;
剪掉小权重连接;
重新训练剩余稀疏网络。
这个流程后来成为许多剪枝方法的基础模板。即使今天很多复杂剪枝方法,也仍然可以看作这个流程的变体。
三、论文要解决的问题
论文开头指出,神经网络同时具有两个问题:计算密集,存储密集。
这会导致模型难以部署到资源受限设备上,例如移动端、嵌入式设备和低功耗硬件。以当时的 AlexNet、VGG 等网络为例,模型参数量很大,存储和计算成本高。传统做法通常是人工设计较小网络。但是,人工设计小网络有一个问题:网络结构在训练前就已经固定,训练过程只能学习权重,不能学习连接关系。
这篇论文希望改变这个过程。作者希望模型在训练过程中不仅得到好的权重,还能识别哪些连接真正重要。
四、传统神经网络训练有什么局限?
传统神经网络训练通常可以表示为:
这个过程只优化权重数值,并不优化连接结构。如果某两层之间是全连接,那么训练开始到结束都是全连接。如果某个卷积层有 256 个输出通道,那么训练过程中也不会自动删除其中的通道或连接。Han 等人希望把连接结构也纳入学习过程。可以将网络表示为:
当:,表示第i个连接保留。当:
,表示第 i 个连接被删除。因此,剪枝后的模型可以写成:
,模型剪枝的目标不仅是学习
,还要学习
。这正是 "Learning both Weights and Connections" 的含义。
五、方法总览:三步走
这篇论文的方法非常经典,可以概括为三步:
Step 1:训练原始密集网络;
Step 2:剪掉低于阈值的小权重连接;
Step 3:重新训练剩余稀疏网络。
相比 OBD/OBS 需要计算 Hessian 或 Hessian 逆矩阵,Han 的方法主要依赖权重幅值,计算成本低,可以扩展到深度网络。
六、第一步:训练密集网络
第一步是正常训练一个密集神经网络。所谓密集网络,是指网络中的连接都存在。例如,全连接层中每个输入神经元都连接到每个输出神经元;卷积层中的卷积核参数也全部保留。训练过程和普通深度学习训练没有区别,这一步的作用是让模型先获得较好的任务性能。
为什么不从一开始就训练稀疏网络?
原因是:如果一开始就随机删除大量连接,可能会破坏模型表达能力,导致训练困难。论文采用的策略是:先用过参数化密集网络充分学习,再从中筛选重要连接。
这和后来 Lottery Ticket Hypothesis 中"在大网络中寻找有效子网络"的思想有一定联系。
七、第二步:剪掉小权重连接
训练完成后,论文根据权重大小进行剪枝。
剪枝规则是:
剪枝后的权重为:
如果 (m_i = 0),则该连接被删除。
如果 (m_i = 1),则该连接被保留。
这就是典型的幅值剪枝。
可以理解为:
权重绝对值小 → 对输出贡献可能小 → 可以删除
论文中采用的基本思想是:低于阈值的连接被删除,高于阈值的连接保留。
八、为什么使用权重幅值?
前面我们讲 OBD/OBS 时已经说过,简单看权重大小并不总是最优。那为什么 Han 的方法又使用权重幅值?
原因主要有三个。
1. 计算成本低
OBD/OBS 需要二阶信息。对于现代深度网络,尤其是 AlexNet、VGG 这种大模型,计算完整 Hessian 或 Hessian 逆矩阵非常困难。权重幅值不需要额外计算,只需要查看已有权重即可。因此,它非常适合大规模网络。
2. 工程上简单有效
虽然幅值剪枝不是最精确的理论标准,但在过参数化深度网络中,小权重连接往往确实具有较低贡献。再配合后续重新训练,幅值剪枝可以取得很好的实际效果。
3. 更适合形成完整压缩流程
Han 的方法目标不是提出最复杂的剪枝理论,而是提出一个能够实际压缩深度网络的可行流程。权重幅值方法简单、稳定、易实现,也方便后续和量化、编码结合,最终形成 Deep Compression 流水线。
九、第三步:重新训练稀疏网络
剪枝之后,网络中部分连接被删除,模型性能通常会下降。因此,论文使用重新训练来恢复性能。
重新训练时,只更新保留下来的连接,被删除的连接保持为 0。
优化目标变成:
如果只剪枝不重新训练,模型性能可能会明显下降。重新训练可以让剩余连接重新适应稀疏结构,从而恢复精度。因此,Han 剪枝方法的成功并不只来自"剪掉小权重",还来自"剪完之后重新训练"。
十、为什么重新训练很重要?
剪枝相当于突然改变了模型结构。
原始模型的参数是在完整连接结构下共同优化出来的。
当部分连接被删除后,剩余权重之间的关系被破坏,模型输出可能发生变化。
重新训练的作用是:
让剩余连接重新分配任务;
让模型适应稀疏连接结构;
恢复剪枝造成的精度损失。
可以把它理解为:剪枝负责删除冗余,重新训练负责修复损伤。
这和 OBD/OBS 的思想也有一定关系。OBD 主要估计删除参数的损失。OBS 进一步计算删除参数后的补偿更新。Han 的方法则不显式计算补偿,而是通过重新训练让网络自己学习补偿。
从这个角度看:OBS:一次性计算补偿;Han:通过 retraining 学习补偿。这也是 Han 方法更容易扩展到深度网络的原因。
十一、这篇论文和 OBD/OBS 的区别
Han 剪枝方法和 OBD/OBS 都是剪枝方法,但侧重点不同。
| 方法 | 年份 | 核心依据 | 是否使用二阶信息 | 是否适合大规模深度网络 |
|---|---|---|---|---|
| OBD | 1989 | Hessian 对角项 | 是 | 较难 |
| OBS | 1992 | Hessian 逆矩阵 | 是 | 很难 |
| Han et al. | 2015 | 权重幅值 + 重新训练 | 否 | 更适合 |
OBD/OBS 关注的是理论上如何估计删除参数后的损失变化。
Han 方法关注的是工程上如何有效压缩大规模深度网络。
Han 的贡献不是证明幅值剪枝在理论上最优,而是证明:简单幅值剪枝 + 重新训练,可以在深度网络中取得非常强的压缩效果。
十二、论文实验结果如何理解?
论文在多个网络上验证了方法效果,证明深度网络中存在大量冗余连接。
arXiv 摘要中指出,该方法可以在不影响准确率的情况下,将神经网络所需的存储和计算降低一个数量级。
这说明两个重要事实。
1. 深度网络高度过参数化
如果删除大量连接后精度仍然可以恢复,说明原始网络确实存在很多冗余连接。
这些连接并不是完成任务所必需的。
2. 稀疏连接网络仍然具有较强表达能力
剪枝后网络虽然连接数减少,但仍然可以保持原有任务性能。
这说明模型表达能力并不完全依赖连接数量,而更依赖于保留下来的有效连接结构。
十三.实验结果:
| 模型 | 数据集 | 原始参数量 | 剪枝后参数量 | 参数压缩率 | 计算量压缩率 | 剪枝前精度/错误率 | 剪枝后精度/错误率 | 结论 |
|---|---|---|---|---|---|---|---|---|
| LeNet-300-100 | MNIST | 约 266K | 约 22K | 约 12× | 约 12× | Error 1.64% | Error 1.59% | 精度略有提升 |
| LeNet-5 | MNIST | 约 431K | 约 36K | 约 12× | 约 6× | Error 0.80% | Error 0.77% | 精度略有提升 |
| AlexNet | ImageNet | 约 61M | 约 6.7M | 约 9× | 约 3× | Top-1 Acc. 57.2%;Top-5 Acc. 80.3% | Top-1 Acc. 57.2%;Top-5 Acc. 80.3% | 无精度损失 |
| VGG-16 | ImageNet | 约 138M | 约 10.3M | 约 13× | 约 5× | Top-1 Acc. 68.3%;Top-5 Acc. 88.5% | Top-1 Acc. 68.3%;Top-5 Acc. 88.5% | 无精度损失 |