05 Han 剪枝方法详解:Learning both Weights and Connections

一、论文基本信息

论文名称: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% 无精度损失

我们复现Learning both Weights and Connections for Efficient Neural Networks这篇论文的部分代码,Vgg16_cifar10和AlexNet代码:https://download.csdn.net/download/qq_36581957/93079528?spm=1011.2124.3001.6210

相关推荐
珠海西格电力1 天前
云边端协同架构:零碳园区管理系统的技术底座
大数据·运维·人工智能·算法·架构·能源
还有多久拿退休金1 天前
让飞书知识库跟着 commit 自己长:一套自动化知识库的真实实现
前端·算法·架构
KaMeidebaby1 天前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
是Dream呀1 天前
基于深度学习的人类行为识别算法研究
人工智能·深度学习·算法
人工智能培训1 天前
破解数据发展瓶颈 激活数字经济新动能
大数据·数据库·人工智能·深度学习·神经网络·机器学习·生成对抗网络
happyprince1 天前
03_NVIDIA_ModelOpt-量化算法深入
人工智能·深度学习·算法
大鱼>1 天前
AI+货物追踪:智能快递柜追踪系统
人工智能·深度学习·算法·机器学习
researcher-Jiang1 天前
算法训练:堆 & 可并堆
算法
在书中成长1 天前
HarmonyOS 小游戏《对战五子棋》开发第18篇 - 棋盘设计
算法·harmonyos
Frostnova丶1 天前
(12)LeetCode 76. 最小覆盖子串
算法·leetcode·职场和发展