二值化神经网络的剪枝:专用框架与全局加权算法

arXiv cs.LG 论文

摘要

本文介绍了一个基于PyTorch的框架,用于剪枝二值化神经网络,并提出了一种新颖的全局加权剪枝方法,该方法在准确率和剪枝率方面表现优异,使得在像FPGA这样的边缘硬件上进行高效部署成为可能。

arXiv:2608.26233v1 公告类型:新 摘要:深度神经网络的极致压缩,直至完全二值化,显著降低了内存占用和计算复杂度,促进了在具有现场可编程门阵列(FPGAs)和微控制器的受限边缘硬件上的部署。尽管将二值化与剪枝结合有望带来额外的效率提升,但现有的剪枝策略并不适合二值化表示,且很少转化为实际的硬件节省。我们引入了一个基于PyTorch、面向研究的框架,该框架集成了冻结和剪枝机制,用于设计和优化二值化神经网络。该框架使得能够快速且可重现地评估最先进的方法,并快速原型化新方法。利用这一框架,我们提出了一种新颖的剪枝方法,该方法考虑了跨抽象层学习参数的相对重要性。这种全局加权机制始终在模型准确率和剪枝率之间实现了优越的权衡,在VGG11上实现了70%的剪枝率且准确率保持不变,而最先进的结果在二值化设置中仅达到41%。
查看原文
查看缓存全文

缓存时间: 2026/08/28 09:37

# 二值化神经网络的剪枝:专用框架与全局加权算法  
来源:https://arxiv.org/html/2608.26233  

###### 摘要  
对深度神经网络进行极端压缩直至完全二值化,可大幅减少内存占用和运算复杂度,使其能在现场可编程门阵列(FPGA)和微控制器等资源受限的边缘设备上部署。尽管结合剪枝与二值化有望进一步提升效率,但现有剪枝策略并不适用于二值化表示,且很少能转化为实际的硬件效益。本文介绍一个基于PyTorch、面向研究的框架,它集成了冻结与剪枝机制,用于设计和优化二值化神经网络。该框架能够快速、可复现地评估现有前沿方法,并支持新方法的快速原型设计。借助该框架,我们提出一种新颖的剪枝方法,它考虑了不同抽象层次间学习参数的相对重要性。这种全局加权机制在模型准确率与剪枝率之间始终能实现更优的权衡,例如在VGG11上以保持准确率不变的情况下实现70%的剪枝率,而现有二值化设置下的最佳结果仅能达到41%。  

蒙特利尔工学院 {roan\.rubiales, jean\-pierre\.david\}@polymtl\.ca  

## 1 引言  
过去十年,深度学习驱动的技术在计算机科学乃至日常生活的诸多领域找到了广泛应用。得益于模型架构的演进以及高性能计算硬件(尤其是GPU和专用AI加速芯片)的进步,深度学习在我们的社会中愈发普及。然而,深度学习乃至更广泛的人工智能需要进行大量浮点运算,导致高功耗问题,这限制了其在边缘平台上的部署,也制约了其在机器人、医疗植入设备和AIoT设备等领域的应用。为解决这一挑战,研究界开发了多种方法,以将前沿深度学习模型适配到微控制器和FPGA等边缘平台的约束条件中。其中最广泛采用的技术包括量化(Gholami et al\. 2021 (https://arxiv.org/html/2608.26233#bib.bib7);Courbariaux et al\. 2015 (https://arxiv.org/html/2608.26233#bib.bib18))、剪枝(Liang et al\. 2021 (https://arxiv.org/html/2608.26233#bib.bib6);Chen et al\. 2023 (https://arxiv.org/html/2608.26233#bib.bib8);Munagala et al\. 2020 (https://arxiv.org/html/2608.26233#bib.bib9);Li and Ren 2020 (https://arxiv.org/html/2608.26233#bib.bib11))以及更轻量化的架构(Sandler et al\. 2018 (https://arxiv.org/html/2608.26233#bib.bib10);Rastegari et al\. 2016 (https://arxiv.org/html/2608.26233#bib.bib1);Liu et al\. 2020 (https://arxiv.org/html/2608.26233#bib.bib4);Zhang et al\. 2021 (https://arxiv.org/html/2608.26233#bib.bib3);Martinez et al\. 2020 (https://arxiv.org/html/2608.26233#bib.bib15))。实践中,这些技术常可结合使用,以在保持高准确率的同时减小模型尺寸和浮点运算次数(FLOPs)——有时甚至能完全消除浮点运算。尽管如此,由于若干原因,它们仍不足以支持复杂深度学习模型在FPGA或微控制器上的高效实现。首先,乘加(MAC)运算的计算复杂度,尤其是浮点运算,在FPGA上代价过高,因为每个浮点运算都伴随着巨大的硬件开销。虽然整数和定点运算能显著降低成本,但大多数前沿架构所需的大量运算仍然超出了FPGA高效综合的能力。其次,权重的内存占用是一个主要瓶颈。在FPGA上,每个流水线阶段可访问的片上存储资源(触发器和嵌入式存储器)非常有限,迫使许多模型依赖外部存储。这种依赖严重降低了性能,抵消了硬件加速的优势。二值化(Courbariaux et al\. 2015 (https://arxiv.org/html/2608.26233#bib.bib18);Rastegari et al\. 2016 (https://arxiv.org/html/2608.26233#bib.bib1))是减少运算数量和复杂度最有效的方法之一。它是一种极端量化形式,所有权重和激活值被限制为1位精度。尽管尚未广泛采用,但二值化能最小化算术运算的硬件成本,并实现高效的硬件实现。对二值化神经网络进行剪枝固有地具有挑战性,因为所有权重具有相同的幅度。然而,针对此场景定制的剪枝策略可以在不降低模型准确率的情况下实现显著更高的压缩率。先前的工作进一步表明,剪枝不仅能减小模型尺寸,还能降低泛化误差,在二值化网络中起到隐式正则化的作用。尽管剪枝与二值化联合使用效果显著且应用广泛,但主流深度学习框架对其支持仍然不足,给该领域的研究与开发带来了巨大挑战。本文提出三项贡献以应对这些挑战:  
- •我们提出一个概念验证的PyTorch框架,支持面向硬件的二值化神经网络训练,并通过可定制的剪枝和冻结(稀疏训练)算法对其进行适配。  
- •我们设计了一种基于幅度的剪枝算法全局加权机制,该机制能引导剪枝过程,实现剪枝率与准确率的更优比例。  
- •基于前两项贡献,我们提出三种二值感知剪枝算法,用于优化并将全精度预训练神经网络转换为二值网络。  
本文其余部分组织如下:第2节(https://arxiv.org/html/2608.26233#S2)回顾了二值神经网络(BNNs)和剪枝算法的相关工作。第3节(https://arxiv.org/html/2608.26233#S3)和第4节(https://arxiv.org/html/2608.26233#S4)描述了我们提出的框架和剪枝算法。测试方法和结果在第5节(https://arxiv.org/html/2608.26233#S5)展示,并在第6节(https://arxiv.org/html/2608.26233#S6)进行讨论。最后一节总结并提出未来工作建议。  

## 2 相关工作  
二值神经网络是量化神经网络的一种极端情况,其权重被量化为1位(通常有两个可能值,即{−1,1})。这一思想在量化历史早期就已出现,但朴素的二值化常导致精度严重损失(Gholami et al\. 2021 (https://arxiv.org/html/2608.26233#bib.bib7))。因此,将二值化与更高精度量化区别对待变得至关重要,由此发展出二值感知训练(BAT)(Courbariaux et al\. 2015 (https://arxiv.org/html/2608.26233#bib.bib18);Courbariaux et al\. 2016 (https://arxiv.org/html/2608.26233#bib.bib2)),允许网络使用实值权重(称为潜在权重)进行训练。这些权重在前向传播过程中动态转换为二值权重,但在更新时保持全精度。由于二值化函数不可微,在反向传播过程中用直通估计器(STE)替代。基于BAT等早期努力,大量文献专注于设计专为二值训练定制的网络架构。这些工作通常从广泛采用的骨干网络(例如MobileNetV2 (Sandler et al\. 2018 (https://arxiv.org/html/2608.26233#bib.bib10)))出发,修改激活函数、基本构建块和层顺序,以更好地适应二值化(Rastegari et al\. 2016 (https://arxiv.org/html/2608.26233#bib.bib1);Liu et al\. 2020 (https://arxiv.org/html/2608.26233#bib.bib4);Zhang et al\. 2021 (https://arxiv.org/html/2608.26233#bib.bib3))。虽然二值神经网络天生适合部署在资源高度受限的边缘设备上(尤其是FPGA和微控制器),但仍需额外的架构和算法优化,以确保高效且可综合的硬件实现(Ebrahimi 2023 (https://arxiv.org/html/2608.26233#bib.bib19);Chidambaram et al\. 2020 (https://arxiv.org/html/2608.26233#bib.bib17))。  
剪枝通过移除模型权重的子集来减小其尺寸和计算成本,同时可能通过正则化效应提高准确率。剪枝可以结构化方式进行,移除整个神经元、通道或卷积核;或非结构化方式进行,移除单个权重。然而在实践中,由于硬件并非针对稀疏计算优化,仅结构化剪枝能在大多数部署场景中带来计算复杂度和资源使用量的切实减少。剪枝可与量化技术结合使用(Liang et al\. 2021 (https://arxiv.org/html/2608.26233#bib.bib6)),若两者联合开发,效率更高。BNN剪枝领域的算法主要关注潜在实值权重的两个指标:其幅度(Chen et al\. 2023 (https://arxiv.org/html/2608.26233#bib.bib8);Munagala et al\. 2020 (https://arxiv.org/html/2608.26233#bib.bib9))和符号振荡频率(Li and Ren 2020 (https://arxiv.org/html/2608.26233#bib.bib11))。由于二值化产生幅度相同的权重,剪枝算法通常关注潜在权重而非二值化后的权重。基于幅度的剪枝被广泛采用且已被证明有效。它移除绝对值较小的权重,因为与较大权重相比,它们驱动激活值越过阈值的贡献较小。这些方法依赖于定义一个剪枝阈值,低于该阈值的权重将被丢弃。然而,在多个通道间选择单一全局阈值常会带来问题。因为跨通道的权重可能相差几个数量级,统一阈值可能导致剪枝决策次优,降低有效性。其他方法将剪枝整合到训练过程中,使用三值化(Munagala et al\. 2020 (https://arxiv.org/html/2608.26233#bib.bib9))替代二值化。当潜在权重的幅度低于阈值时,“二值”权重被设为0而非通常的+1/-1。我们将冻结算法称为动态稀疏更新方法,它在训练期间根据某种度量(例如通道输出在时间t和t+1的余弦相似度)选择架构内的子网络(Bragagnolo et al\. 2022 (https://arxiv.org/html/2608.26233#bib.bib16);Quélennec et al\. 2024 (https://arxiv.org/html/2608.26233#bib.bib5))。稀疏更新是在低内存预算下实现设备上训练的一种已知技术(Lin et al\. 2022 (https://arxiv.org/html/2608.26233#bib.bib21))。在我们的设置中,冻结被用作正则化和早停方法。随着时间的推移,越来越多的通道被冻结(不再更新),直到全部冻结,最后只更新偏置。  

## 3 提出的二值神经网络框架  
参见图注 图1:描述我们BNN框架的框图。我们的第一个贡献是在Python库`torch`中实现的一个实验框架。它自动化了跨实验,并方便了在不同参数集下对架构、剪枝和冻结算法进行比较。如图1(https://arxiv.org/html/2608.26233#S3.F1)所示,框架的多个方面可直接在代码中定制:BNN架构、剪枝和冻结算法。其他部分(图中蓝色框表示)通过TOML文件配置。这些配置文件指定使用哪些参数(例如,预训练权重或架构超参数),是启动实验所必需的。我们的框架提供了一个基础基类,所有BNN模块都必须继承它。模型架构可以使用提供的核心组件(例如,二值卷积层、符号激活函数等)构建,或通过定义派生自此基类的自定义模块构建。标准的PyTorch模块也可以集成到架构中;然而,在我们框架内它们不会被二值化。剪枝和冻结算法也派生自一个基类,该基类提供了必要的接口函数,使算法能与模型和训练过程正确交互。我们使用该框架实现了几个现有的剪枝算法以供验证。然后,我们探索了这些算法的不同变体,以评估它们对模型准确率和压缩率的影响。在这些实验中,我们观察到在剪枝前独立归一化每个神经元或卷积核的权重可以提高性能。在下一节中,我们将提出几个基于这些实验的剪枝算法。  

## 4 提出的剪枝算法  
### 用于剪枝的全局加权  
我们剪枝算法的一个显著特点是使用对权重副本进行的变换来影响如何确定剪枝阈值,我们将此技术称为“全局加权”。这种加权旨在将各通道归一化到同一量级,使得仅保留同一通道(或相应地,同一层)内权重之间的差异。第一个值得注意的变换是批量归一化折叠,它涉及移除批量归一化层,并将其权重、偏置、期望值和标准差整合到前一层中。在全连接层中,设 \( W_k \) 为第 \( k \) 个神经元的权重向量,\( b_k \) 为其偏置,\( \gamma_k \)、\( \beta_k \)、\( \mathbb{E}_k \) 和 \( \sigma_k \) 分别是该神经元处批量归一化层的权重、偏置、期望值和标准差,则有:  
\[ W_k \leftarrow \frac{\gamma_k}{\sigma_k} \cdot W_k \]  
\[ b_k \leftarrow \beta_k + \frac{\gamma_k \cdot (b_k - \mathbb{E}_k)}{\sigma_k} \]  
另一个可与批量归一化折叠结合的变换是权重归一化,它使用某种范数(例如1、2或无穷范数)沿层或通道对权重张量进行归一化。沿通道进行归一化会抵消批量归一化折叠(对权重的效果),因此当批量归一化层已折叠时,我们总是沿层进行归一化(或不进行归一化)。全局加权完成后,我们在剪枝算法中使用所得权重而非其原始对应权重来确定剪枝阈值。之后,所有低于剪枝阈值的全局加权权重的原始对应权重将被剪枝。此剪枝机制在我们的算法中称为 \(\texttt{Prune\_Layers}(s, W, \bar{W})\),其中 \( s \) 是阈值,\( W \) 是权重张量列表,\( \bar{W} \) 是全局加权张量列表。因此,此步骤能够基于不同于朴素排序的全局幅度排序来计算阈值,从而在保持剪枝后准确率相近的情况下实现更高的剪枝率。  

### 二值化前的剪枝  
我们训练设置的一个特点是在预训练阶段,仅模型的激活值被二值化,而权重保持实值,这提供了一个良好的初始化基础,使模型随后可以被完全二值化并

相似文章