一旦抽象数学计算被用于数字计算机上的计算,这些计算中数值的有效表示、操作和通信的问题就出现了。与数字表示问题密切相关的是量化问题:一组连续的实数应该以何种方式分布在一组固定的离散数上,以最小化所需的位数,并使伴随的计算的准确性最大化?当内存和/或计算资源受到严重限制时,量化这个长期存在的问题就显得尤为重要。由于神经网络模型在计算机视觉、自然语言处理和相关领域的出色表现,这一问题近年来已经成为一个前沿问题。从浮点表示方式移动到以4位或更少表示的低精度固定整数值可以将内存占用和延迟减少16倍;事实上,4倍到8倍的缩小在这些应用中经常被实现。因此,量化最近作为神经网络计算的有效实现的一个重要和非常活跃的研究子领域出现就不足为奇了。在这篇文章中,我们调研了在深度神经网络计算中量化数值问题的方法,包括当前方法的优点/缺点。通过这个调研和它的组织,我们希望已经提出了一个有用的量化神经网络研究综述,以方便在这一领域的未来研究的拓展。
https://www.zhuanzhi.ai/paper/c451f4f98fbca30e3edee0a9751a0b93
引言
在过去的十年中,我们已经观察到神经网络(NNs)在精度上的显著改进,用于解决广泛的问题,通常是通过高度过参数化的模型实现的。虽然这些过度参数化(因此非常大)的神经网络模型的精度显著提高了,但这些模型的纯粹规模∗相等的贡献。这意味着不可能为许多资源受限的应用程序部署它们。这给在资源受限的环境下实现普适深度学习带来了问题,普适深度学习需要实时推理,具有低能耗和高精度。这种普遍深度学习预计将对实时智能医疗保健监控、自动驾驶、音频分析和语音识别等广泛应用产生重大影响。
要实现高效、实时的、具有最优精度的神经网络,需要重新思考神经网络模型的设计、训练和部署[71]。有大量的文献专注于通过使NN模型更有效(在延迟、内存占用和能量消耗等方面)来解决这些问题,同时仍然提供最佳的准确性/泛化权衡。这些努力可以大致分为以下几类。
a) 设计高效的NN模型架构: 一些工作都集中在优化神经网络模型结构的微架构(101,111,127,167,168,212,253,280](例如,内核类型深度方面卷积或低秩分解等)以及它macro-architecture(100、101、104、110、214、233](如模块类型,例如残差,或inception)。这里的经典技术大多使用手动搜索找到新的体系结构模块,这是不可扩展的。因此,一个新的工作是设计自动机器学习(AutoML)和神经结构搜索(NAS)方法。这些方法的目的是在给定模型尺寸、深度和/或宽度的约束下,自动找到正确的NN架构[161,194,232,245,252,291]。我们向有兴趣的读者推荐[54]来了解NAS方法的最新调查。
b) 协同设计网络架构和硬件: 最近的另一项工作是为特定的目标硬件平台调整(并协同设计)网络架构。这是因为NN组件的开销(在延迟和能量方面)是依赖于硬件的。例如,具有专用缓存层次结构的硬件可以比没有专用缓存层次结构的硬件更有效地执行受带宽限制的操作。与神经网络体系结构设计类似,体系结构-硬件协同设计的最初方法是手动的,即由专家调整/更改神经网络体系结构[70],然后使用自动化的AutoML和/或NAS技术[22,23,100,252]。
c) 剪枝: 另一种减少网络的内存占用和计算成本的方法是运用剪枝。在剪枝过程中,去掉敏感性小的神经元,得到稀疏计算图。这里,具有小显著性的神经元是指那些去除后对模型输出/损失函数影响最小的神经元。剪枝方法可以大致分为非结构剪枝[49,86,139,143,191,257]和结构剪枝[91,106,156,166,274,275,279]。在非结构化剪枝中,我们可以去除那些不太显著的神经元,无论它们在哪里出现。该方法可以进行主动剪枝,去除大部分神经网络参数,对模型的泛化性能影响很小。然而,这种方法导致了稀疏矩阵操作,这是众所周知的难以加速,并且通常是内存受限的[21,66]。另一方面,使用结构化剪枝,一组参数(例如,整个卷积滤波器)被删除。这可以改变层和权重矩阵的输入和输出形状,从而仍然允许密集的矩阵操作。然而,积极的结构修剪往往导致显著的精度退化。具有高水平修剪/稀疏性的训练和推理,同时保持最先进的性能,仍然是一个开放问题[16]。有兴趣的读者请参阅[66,96,134],了解修剪/稀疏性相关工作的详细情况。
d) 知识蒸馏: 模型蒸馏[3,95,150,177,195,207,269,270]涉及训练一个大模型,然后作为教师使用它来训练一个更紧凑的模型。在对学生模型的训练中,不是使用“硬”的类别标签,模型蒸馏的关键思想是利用老师产生的“软”概率,因为这些概率可以包含更多关于输入的信息。尽管在蒸馏方面做了大量的工作,但这里的一个主要挑战是仅用蒸馏就能获得高压缩比。与量化和剪枝相比,在压缩≥4×的情况下(具有INT8和较低的精度),知识蒸馏方法在压缩强度大的情况下具有不可忽略的精度退化。然而,将知识精馏与之前的方法(即量化和剪枝)相结合已经取得了巨大的成功[195]。
e) 量化: 最后,量化方法在神经网络模型的训练和推理方面都表现出了巨大和一致的成功。虽然数字表示和量化的问题和数字计算一样古老,但神经网络提供了独特的改进机会。虽然对量化的研究主要集中在推理方面,但我们应该强调量化在神经网络训练方面取得了重要的成功[10,35,57,130,247]。特别是,半精度和混合精度训练的突破[41,72,79,175]是人工智能加速器实现一个数量级更高吞吐量的主要驱动因素。然而,事实证明,如果没有显著的调整,很难达到半精度以下,而且最近的大多数量化研究都集中在推理上。这种用于推理的量化是本文的重点。
f) 量化和神经科学: 神经网络量化是神经科学领域的一项工作,表明人类大脑以离散/量化的形式存储信息,而不是以连续的形式存储信息[171,236,240]。这一观点的一个普遍理由是,以连续形式存储的信息不可避免地会被噪声(噪声总是存在于物理环境中,包括我们的大脑,它可以由热噪声、感觉噪声、外部噪声、突触噪声等引起)所损坏[27,58]。然而,离散信号表示对这种低水平噪声更有鲁棒性。其他原因,包括离散表示更高的泛化能力[128,138,242]和有限资源下更高的效率[241],也被提出。我们建议读者参考[228]对神经科学文献中相关工作的全面回顾。