29、高效神经网络架构构建与量化方法综述

高效神经网络与量化方法综述

高效神经网络架构构建与量化方法综述

1. 高效移动架构构建

1.1 架构调整基本方案

为了使神经网络适应定制硬件和部署要求,可以采用以下基本方案来修改现有架构:
1. 检查内存需求 :如果硬件的峰值内存有限,可使用空间到深度(space-to-depth)或下采样技术来减少早期层的内存占用,因为早期层的峰值内存通常最高。
2. 使用自定义非线性函数 :若自定义非线性函数性能足够好,就使用它们;若成本过高,通常仍可将其应用于最后几层。
3. 检查最后几层 :特别关注预嵌入层,这一层常被忽视,但通常可以大幅减小其规模而不会显著降低精度。
4. 按需调整嵌入大小
5. 固定嵌入大小的同时应用乘数 :按需应用宽度、深度和分辨率乘数。之所以最后应用这些乘数,是因为它们对延迟、模型大小和峰值内存的影响明确,因此可在过程结束时最轻松地微调资源使用。

1.2 相关术语解释

术语 解释
嵌入层(Embedding layer) 也称为预逻辑层(pre-logits),是直接连接到逻辑层的最后一层的输出。该层很重要,因为它保留了当前任务类别之外的信息,这个向量可用于将模型微调至不同任务。
输入分辨率乘数(Input resolution multiplier) 应用于输入大小的缩放系数,随后会缩放其余层的分辨率。若大于 1,通常使用更高分辨率的图像,简单的双线性上采样通常就足够了。这是一种在不改变模型大小的情况下提高模型精度的常用技术。
内部分辨率(Internal Resolution) 特征平均池化之前最后一层的分辨率。例如,输入分辨率为 224x224 的典型 ImageNet 模型的内部分辨率为 7x7。对于等距模型,内部分辨率就是所有层的分辨率。
等距模型(Isometric models) 一类神经网络架构,在对输入进行初始调整后,其隐藏层的分辨率保持恒定。
逻辑值(Logits) 未归一化的类别预测向量,通常后跟 softmax 运算符以生成概率向量。
MAdd 乘法累加的缩写。一个由乘法和将结果累加到累加器组成的单一操作。MAdd 的数量常被用作衡量架构计算成本的代理指标。
模型大小(Model size) 架构使用的参数总数。
网络深度乘数(Network depth multiplier) 也称为深度乘数,是应用于层数的系数,用于调整架构的深度。
网络宽度乘数(Network width multiplier) 也称为宽度乘数,是均匀应用于每层大小的系数,用于调整架构的大小。
通道数(Number of channels) 卷积层或全连接层的特征数量。
峰值激活内存(Peak activation memory) 对图像进行单次推理时,用于激活存储所需的 RAM 量。
跳过步长方法(Skip-stride method) 一种模型修改过程,使用低分辨率图像(如 32x32)与原本设计用于处理高分辨率图像的模型。该过程通过将前几层的步长更改为 1,使最后一层的空间分辨率保持不变。例如,若新输入分辨率为 56x56,而原始分辨率为 224x224,此方法将消除前两层中步长为 2 的步长。
空间到深度(Space-to-depth) 对于核大小为 k、通道数为 c、大小为 n × n × c 的图像,该操作通过将每个 k × k × c 块展平为 1 × 1 × ck2 张量,并将它们排列成 n/k × n/k,生成 n/k×n/k×nk2 张量。

1.3 架构调整流程

graph LR
    A[检查内存需求] --> B[使用自定义非线性函数]
    B --> C[检查最后几层]
    C --> D[调整嵌入大小]
    D --> E[应用乘数]

2. 神经网络推理量化方法概述

2.1 量化的重要性

随着数字计算机的发展,高效表示、处理和传输数值的问题随之而来,量化问题也变得尤为重要。在内存和计算资源严重受限的情况下,量化问题更加突出。近年来,由于神经网络模型在计算机视觉、自然语言处理等领域的卓越表现,量化成为了高效实现神经网络计算的重要研究子领域。从浮点表示转换为 4 位或更低精度的固定整数值,有望将内存占用和延迟降低 16 倍,在实际应用中通常能实现 4 到 8 倍的降低。

2.2 提高神经网络效率的方法分类

为了实现高效、实时且精度最优的神经网络,需要重新思考神经网络模型的设计、训练和部署。相关工作主要可以分为以下几类:
1. 设计高效的神经网络模型架构
- 传统方法 :通过手动搜索找到新的架构模块,如优化微架构(如深度卷积或低秩分解等核类型)和宏架构(如残差或 Inception 等模块类型),但这种方法可扩展性较差。
- 新方法 :设计自动化机器学习(AutoML)和神经架构搜索(NAS)方法,旨在在给定模型大小、深度和/或宽度的约束下,自动找到合适的神经网络架构。
2. 神经网络架构与硬件协同设计 :将神经网络架构适配特定的目标硬件平台。由于神经网络组件的开销(如延迟和能量)与硬件相关,因此这种协同设计很重要。最初的方法是手动调整架构,后来发展为使用自动化的 AutoML 和/或 NAS 技术。
3. 剪枝 :通过移除显著性(敏感性)较小的神经元来减少神经网络的内存占用和计算成本,从而得到稀疏计算图。剪枝方法可大致分为非结构化剪枝和结构化剪枝:
- 非结构化剪枝 :移除任何位置的显著性较小的神经元,可进行激进的剪枝,对模型泛化性能影响较小,但会导致稀疏矩阵运算,难以加速且通常受内存限制。
- 结构化剪枝 :移除一组参数(如整个卷积滤波器),会改变层和权重矩阵的输入和输出形状,仍允许进行密集矩阵运算,但激进的结构化剪枝通常会导致显著的精度下降。
4. 知识蒸馏 :训练一个大型模型作为教师,然后用它来训练一个更紧凑的学生模型。关键思想是利用教师产生的“软”概率,因为这些概率可以包含更多关于输入的信息。然而,仅靠知识蒸馏实现高压缩比具有挑战性,与量化和剪枝相比,激进压缩时知识蒸馏方法往往会导致不可忽视的精度下降,但与量化和剪枝结合使用时已取得了很大成功。
5. 量化 :在神经网络模型的训练和推理中都取得了显著且一致的成功。虽然数值表示和量化问题与数字计算一样古老,但神经网络为改进提供了独特的机会。尽管本综述主要关注推理量化,但量化在神经网络训练中也取得了重要成功,如半精度和混合精度训练提高了 AI 加速器的吞吐量。然而,在不进行大量调优的情况下,低于半精度的量化非常困难,因此最近的量化研究大多集中在推理上。

2.3 量化与神经科学的联系

神经科学的研究表明,人类大脑以离散/量化的形式存储信息,而非连续形式。这一观点的一个常见理由是,连续形式存储的信息不可避免地会受到噪声的干扰,而离散信号表示对这种低水平噪声更具鲁棒性。此外,离散表示还具有更高的泛化能力和在有限资源下的更高效率。

2.4 量化方法的历史

量化作为一种将大(通常是连续)集合中的输入值映射到小(通常是有限)集合中的输出值的方法,有着悠久的历史。以下是量化方法发展的重要节点:
1. 早期应用 :量化与微积分的基础相关,在 19 世纪初(甚至更早)的最小二乘法和大规模数据分析技术中就可以看到相关方法。1867 年,离散化被用于近似积分计算;1897 年,Shappard 研究了舍入误差对积分结果的影响。
2. 数字计算机时代 :1948 年,Shannon 发表了关于通信数学理论的开创性论文,正式提出了量化的影响及其在编码理论中的应用。他在无损编码理论中提出了可变速率量化的概念,即根据事件的概率改变比特数,Huffman 编码就是受此启发。1959 年,Shannon 引入了失真率函数和向量量化的概念,这些概念在后续的实际通信应用中得到了扩展和应用。
3. 信号处理和数值分析 :量化在数字信号处理中也很重要,因为将信号以数字形式表示通常涉及舍入。在数值分析和数值算法的实现中,使用有限精度算术进行实数计算也会遇到量化问题。此外,量化还引出了算法数值稳定性的概念,包括前向误差和后向误差。

2.5 神经网络量化与早期工作的区别

虽然早期有大量关于量化的研究,但神经网络量化有其独特之处。神经网络为量化提供了新的应用场景和改进机会,尤其是在处理大规模数据和复杂模型时。与早期工作相比,神经网络量化更关注如何在降低精度的同时保持模型的性能,以适应资源受限的环境。

2.6 量化方法综述结构

本综述将首先介绍量化的简要历史,然后引入量化的基本概念,这些概念是大多数量化算法共有的,对于理解和部署现有方法至关重要。接着讨论更高级的主题,主要涉及最近的最先进方法,特别是低/混合精度量化。之后探讨量化在硬件加速器(特别是边缘处理器)中的影响。最后进行总结和结论。

graph LR
    A[设计高效架构] --> B[协同设计架构与硬件]
    B --> C[剪枝]
    C --> D[知识蒸馏]
    D --> E[量化]

3. 量化的基本概念

3.1 问题设定与符号表示

量化是将连续的实数集合映射到有限的离散集合的过程。在神经网络中,通常需要对权重、激活值等进行量化。为了准确描述量化过程,需要明确一些符号和问题设定。例如,设 $x$ 为原始的连续实数,$x_q$ 为量化后的离散值,量化过程可以表示为 $x_q = Q(x)$,其中 $Q$ 是量化函数。

3.2 均匀量化

均匀量化是最常见的量化方式之一。在均匀量化中,量化区间被等分为若干个小区间,每个小区间对应一个离散值。设量化范围为 $[a, b]$,量化级数为 $N$,则量化间隔 $\Delta$ 可以表示为:
$\Delta = \frac{b - a}{N - 1}$

量化后的离散值 $x_q$ 可以通过以下公式计算:
$x_q = \text{round}(\frac{x - a}{\Delta}) \times \Delta + a$

3.3 对称和非对称量化

  • 对称量化 :对称量化假设量化范围关于原点对称,即 $a = -b$。这种量化方式在计算上较为简单,因为可以利用对称性减少计算量。例如,对于 8 位对称量化,量化范围通常为 $[-127, 127]$。
  • 非对称量化 :非对称量化不要求量化范围关于原点对称,$a$ 和 $b$ 可以取任意值。非对称量化可以更好地适应数据的分布,尤其是当数据分布不均匀时。例如,某些激活值可能只在正数范围内有值,此时使用非对称量化可以更准确地表示数据。

3.4 范围校准算法:静态与动态量化

  • 静态量化 :在静态量化中,量化范围在训练或推理之前就已经确定。通常通过收集训练数据的统计信息(如最大值、最小值)来确定量化范围。静态量化的优点是计算简单,不需要在推理过程中进行额外的计算,但可能无法适应数据分布的变化。
  • 动态量化 :动态量化在推理过程中实时确定量化范围。例如,可以根据当前输入数据的统计信息来调整量化范围。动态量化可以更好地适应数据分布的变化,但会增加推理过程中的计算开销。

3.5 量化粒度

量化粒度指的是量化操作所作用的范围。常见的量化粒度有:
- 层粒度 :对整个层的权重或激活值进行统一量化。这种方式计算简单,但可能无法充分利用数据的局部信息。
- 通道粒度 :对每个通道的权重或激活值分别进行量化。通道粒度量化可以更好地适应不同通道的数据分布,但计算量相对较大。
- 张量粒度 :对每个张量的元素分别进行量化。张量粒度量化可以提供最高的量化精度,但计算复杂度也最高。

3.6 非均匀量化

与均匀量化不同,非均匀量化的量化间隔不是相等的。非均匀量化可以根据数据的分布来调整量化间隔,使得在数据分布较密集的区域使用较小的量化间隔,在数据分布较稀疏的区域使用较大的量化间隔。常见的非均匀量化方法有对数量化等。

3.7 微调方法

3.7.1 量化感知训练

量化感知训练是在训练过程中模拟量化的影响,使得模型在训练时就适应量化后的环境。具体做法是在训练过程中插入伪量化节点,将浮点数运算转换为量化运算。通过这种方式,模型可以学习到如何在量化的情况下保持较好的性能。

3.7.2 训练后量化

训练后量化是在模型训练完成后进行量化。这种方法不需要重新训练模型,只需要根据训练数据的统计信息来确定量化参数。训练后量化的优点是简单快速,但可能会导致一定的精度损失。

3.7.3 零样本量化

零样本量化是一种不需要额外训练数据的量化方法。它通过分析模型的结构和权重分布来确定量化参数。零样本量化可以在没有训练数据的情况下进行量化,但精度可能相对较低。

3.8 随机量化

随机量化是在量化过程中引入随机性。例如,在量化时可以根据一定的概率将量化值向上或向下取整。随机量化可以减少量化误差的累积,提高量化的稳定性。

3.9 量化基本概念总结

量化概念 解释
均匀量化 量化区间等分为若干小区间,每个小区间对应一个离散值
对称量化 量化范围关于原点对称
非对称量化 量化范围不关于原点对称
静态量化 量化范围在训练或推理前确定
动态量化 量化范围在推理过程中实时确定
层粒度量化 对整个层进行统一量化
通道粒度量化 对每个通道分别量化
张量粒度量化 对每个张量元素分别量化
非均匀量化 量化间隔不相等
量化感知训练 训练中模拟量化影响
训练后量化 训练完成后进行量化
零样本量化 无需额外训练数据的量化
随机量化 量化过程引入随机性

3.10 量化基本概念流程

graph LR
    A[问题设定与符号表示] --> B[均匀量化]
    B --> C[对称和非对称量化]
    C --> D[范围校准算法]
    D --> E[量化粒度]
    E --> F[非均匀量化]
    F --> G[微调方法]
    G --> H[随机量化]

4. 高级量化概念

4.1 模拟和纯整数量化

  • 模拟量化 :模拟量化在推理过程中仍然使用浮点数进行计算,但模拟量化后的结果。例如,在计算过程中使用量化后的权重和激活值,但最终结果仍然以浮点数表示。模拟量化可以方便地评估量化的效果,但无法充分发挥硬件的优势。
  • 纯整数量化 :纯整数量化完全使用整数进行计算,不涉及浮点数。这种方式可以充分利用硬件的整数计算单元,提高计算效率。但纯整数量化需要对模型进行更复杂的调整,以确保计算结果的准确性。

4.2 混合精度量化

混合精度量化是指在模型中使用不同精度的量化方式。例如,可以在某些层使用 8 位量化,在其他层使用 4 位量化。混合精度量化可以在精度和计算效率之间取得平衡,充分利用不同精度量化的优势。

4.3 硬件感知量化

硬件感知量化是根据目标硬件的特性来进行量化。不同的硬件对量化的支持能力不同,例如某些硬件可能对 8 位整数计算有更好的优化,而另一些硬件可能支持更低精度的量化。硬件感知量化可以充分发挥硬件的性能,提高推理效率。

4.4 蒸馏辅助量化

蒸馏辅助量化结合了知识蒸馏和量化的方法。通过使用一个较大的教师模型来指导量化后的学生模型的训练,可以提高量化模型的精度。蒸馏辅助量化可以在保持量化优势的同时,减少精度损失。

4.5 极端量化

极端量化是指使用非常低的精度(如 1 位或 2 位)进行量化。极端量化可以极大地减少内存占用和计算量,但会导致严重的精度损失。为了缓解精度损失,通常需要使用更复杂的训练方法和模型结构。

4.6 向量量化

向量量化是将向量映射到有限的离散向量集合中。在神经网络中,向量量化可以用于压缩模型的权重和激活值。通过将向量量化为离散向量,可以减少存储和计算的开销。

4.7 高级量化概念总结

高级量化概念 解释
模拟量化 推理中用浮点数模拟量化结果
纯整数量化 完全使用整数计算
混合精度量化 模型中使用不同精度量化
硬件感知量化 根据硬件特性进行量化
蒸馏辅助量化 结合知识蒸馏和量化
极端量化 使用极低精度量化
向量量化 将向量映射到离散向量集合

4.8 高级量化概念流程

graph LR
    A[模拟和纯整数量化] --> B[混合精度量化]
    B --> C[硬件感知量化]
    C --> D[蒸馏辅助量化]
    D --> E[极端量化]
    E --> F[向量量化]

5. 量化与硬件处理器

量化对硬件处理器有着重要的影响。在边缘处理器等资源受限的设备上,量化可以显著减少内存占用和计算量,提高设备的运行效率。不同的硬件对量化的支持能力不同,一些硬件专门为量化计算进行了优化,例如某些芯片可以高效地执行 8 位或更低精度的整数计算。在选择硬件时,需要考虑其对量化的支持程度,以充分发挥量化的优势。

6. 量化研究的未来方向

未来的量化研究可能会朝着以下几个方向发展:
1. 更低精度量化 :探索更低精度(如 1 位或 2 位)量化的方法,以进一步减少内存占用和计算量。
2. 自适应量化 :开发能够根据数据分布和任务需求自适应调整量化参数的方法,提高量化的灵活性和精度。
3. 与其他技术的结合 :将量化与剪枝、知识蒸馏等技术更紧密地结合,以实现更高的压缩比和更好的性能。
4. 硬件与算法协同优化 :进一步加强硬件和算法的协同设计,使量化算法更好地适应硬件特性,提高硬件的利用率。

7. 总结与结论

量化是实现高效神经网络推理的重要方法。通过将浮点数表示转换为低精度的整数表示,可以显著减少内存占用和计算量。本文介绍了高效移动架构构建的基本方案,以及神经网络推理量化方法的相关内容,包括量化的重要性、基本概念、高级概念、与硬件处理器的关系以及未来研究方向。在实际应用中,需要根据具体的任务和硬件环境选择合适的量化方法,以实现精度和效率的平衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值