作者|秦浩桐、龚睿昊、张祥国
单位|北京航空航天大学
研究方向|网络量化压缩
本文介绍了来自北京航空航天大学刘祥龙副教授研究团队的最新综述文章 Binary Neural Networks: A Survey,合作者包括中国电子科技大学的宋井宽教授和意大利特伦托大学计算机系主任 Nicu Sebe 教授。
神经网络二值化能够最大程度地降低模型的存储占用和模型的计算量,将神经网络中原本 32 位浮点数参数量化至 1 位定点数,降低了模型部署的存储资源消耗,同时极大加速了神经网络的推断过程。但二值化会不可避免地导致严重的信息损失,其量化函数不连续性也给深度网络的优化带来了困难。
近年来许多算法被提出致力于解决上述问题,并取得了令人满意的进展。在本文中,我们对这些方法进行了全面的总结和概括,主要分为直接量化的朴素二值化方法,以及使用最小化量化误差、改善网络损失函数和减小梯度误差等技术的改进二值化方法。
本文还调研了二值神经网络的其他实用方面,例如硬件友好的设计和训练技巧。然后,我们对图像分类,目标检测和语义分割等不同任务进行了评估和讨论。最后,本文展望了未来研究可能面临的挑战。
关键词:二值神经网络,深度学习,模型压缩,网络量化,模型加速
论文标题:Binary Neural Networks: A Survey
论文链接:https://www.sciencedirect.com/science/article/abs/pii/S0031320320300856
引言
由于深度模型具有多层结构和数百万个参数,因此深层 CNN 具有很强的学习能力,通常具有令人满意的性能。例如,VGG-16 网络包含大约 1.4 亿个 32 位浮点参数,对于 ImageNet 数据集上的图像分类任务,可以达到 92.7% 的 Top-5 测试准确率。
整个网络需要占用 500M 字节以上的存储空间,并再一次推理过程中执行 1.6x1010 次浮点算术运算。这使得深层的卷积神经网络严重依赖于 GPU 等高性能硬件,而在实际应用中,通常只有计算资源有限的设备可用,如移动电话和嵌入式设备。
以基于 FPGA 的嵌入式设备为例,通常该类设备只有数千个计算单元,远远不能处理常见深度模型中的数百万次浮点运算,复杂的模型与有限的计算资源之间存在着严重的矛盾。
尽管目前涌现了大量用于深度学习的专用硬件,这些硬件提供了高效的矢量运算操作以实现正向推理中的快速卷积,但繁重的计算和存储仍然不可避免地限制了深度卷积神经网络的实际应用。
此外,由于巨大的模型参数空间,神经网络的推理通常被视为一个黑盒,这给 CNN 的可解释性带来了巨大挑战。许多工作从经验上探索了网络中每一层的功能。他们将从不同滤波器中提取的特征图可视化,并将每个滤波器视为一个聚焦于不同视觉部分的视觉单元。
从可解释的机器学习角度来看,我们可以得出一些结论:一些滤波器在模型中起着相似的作用,尤其是当神经网络模型规模较大时。
因此,剪去一些无用的滤波器或将其精度降低到较低比特表示是合理的。一方面,我们可以通过这种压缩技术实现更高效的推理。另一方面,我们可以利用它来进一步研究卷积神经网络的可解释性,即找出哪一层是重要的,哪一层是无用的并且可以从黑盒中删除,哪种结构有利于准确预测。
在文献中,用于压缩深层网络的方法可分为五类:参数剪枝,参数量化,低秩分解,迁移/压缩卷积滤波器和知识蒸馏。
在现有的网络压缩技术中,基于量化的技术是一种很有潜力且十分高效的解决方案,与浮点模型相比,量化模型可以通过以非常低的精度表示网络权重来压缩、加速原始网络。沿此方向,最极端的量化是二值化,这是本次综述的重点所在。
二值化是一种 1 位的量化,其数据只有两个可能的值,即 -1(0)或 +1。使用二值化进行压缩后,网络中的权重和激活都可以用 1 位表示,而不会占用太多内存。此外,通过二值化,二值网络可以使用轻量级的 XNOR 和 Bitcount 位运算代替繁重的浮点乘加运算。
因此,与其他压缩方法相比,二值神经网络具有许多硬件友好的特性,包括节省内存、提高能源效率和显著地加速。BNN 和 XNOR-Net 之类的开创性工作证明了二值化的有效性,使用 1 位卷积运算的 XNOR-Net 在 CPU 上的加速可达到 58 倍,压缩率可至 32 倍。
除了关注模型二值化的策略外,许多研究还试图揭示模型二值化行为地本质影响,并据此进一步解释模型鲁棒性与深度神经网络结构之间的联系。一些研究表明,二值神经网络可以过滤输入噪声,并指出:与全精度的神经网络相比,经过特殊设计的 BNN 更加鲁棒。
基于 BNN 的研究还可以帮助我们分析深度神经网络中的结构是如何工作的。有许多工作探索了不同层对二值化的敏感性。通常,第一层和最后一层应保持较高的精度,这意味着这些层在神经网络的预测中起着更重要的作用。
本文试图探究二值神经网络的本质,将现有的二值化方法分类为未改进量化函数的朴素二值化方法,和基于优化的二值化方法,优化包括最小化量化误差、改善损失函数和减小梯度误差。我们还讨论了硬件友好的架构设计和训练二值神经网络的有效技巧。此外,本文介绍了目前广泛被用于评估二值神经网络的通用数据集和网络结构,并比较了当前方法在不同任务上的性能。
背景介绍
在全精度卷积神经网络中,基本运算可以表示为:
其中 w 和 a 分别表示网络层权重张量和之前的网络层生成的激活张量。σ(•) 表示非线性函数,z 表示输出张量,⊗ 表示卷积运算。在神经网络的正向推理过程中,卷积运算包含大量的浮点运算,包括浮点乘法和浮点加法,它们构成了神经网络推理中的绝大多数计算。
2.1 前向传播
网络二值化的目标是使用 1 位表示浮点权重 w 和 / 或激活 a。二值化函数的常用定义如下:
其中 和
代表二值化权重(卷积核)和二值化激活量的张量,相应的尺度因子分别为 α 和 β,用于二值化得到
和
的 sign 函数如下:
通过权重和激活二值化,可以将正向传播中的浮点卷积操作重新表示为: