节选自论文《Edge AI: Quantization as the Key to On-Device Smartness》的第三节,由YN Dwith Chenna撰写,发表在2023年8月的《International Journal of Artificial Intelligence & Applications》上。论文主要探讨了边缘人工智能(Edge AI)的重要性,以及量化(Quantization)技术在实现边缘设备智能化中的关键作用。
3. 量化(Quantization)
量化是实现边缘AI的关键技术之一。它包括将高精度的浮点数转换为固定点或整数表示的过程,有效减少了AI模型的内存占用和计算需求。通过这样做,量化使得这些模型能够在资源受限的设备上高效运行,同时保持可接受的准确性水平。
3.1 量化技术
量化技术大致可以分为两种类型:后训练量化(Post-Training Quantization, PTQ)和量化感知训练(Quantization-Aware Training, QAT)。
-
后训练量化(PTQ):这种方法涉及对已经训练好的模型进行量化。这是一种更简单的方法,模型首先使用传统技术进行训练,然后权重和激活被量化以便于部署。尽管这种方法可以显著减小模型大小,但可能会导致一些准确性的损失。
-
量化感知训练(QAT):这种方法在训练过程中就考虑量化。模型在训练时就考虑到最终的量化,这可以与后训练量化相比获得更好的准确性。这是一个更复杂的过程,需要对训练流程进行修改。
3.2 量化方案
本质上,量化涉及将高精度浮点数转换为低精度的固定点或整数表示。这种转换导致内存使用和计算需求的减少,允许神经网络在边缘设备上高效执行。固定点/整数表示使用整数来近似实数,通过引入缩放因子和可能的偏移量来实现所需的精度。给定一个你想要以固定点格式表示的浮点数x,缩放因子为scale,可选的偏移量为offset,固定点表示q可以按照以下方式计算:
q=round(x−offsetscale)q=round(scalex−offset)
其中round函数用于将除法操作的结果四舍五入到最近的整数,因为固定点数必须是整数。在映射零时需要特别注意,以避免量化误差,零填充是流行的填充操作。
3.3 量化粒度
量化粒度的核心是围绕精度和性能的决策,它涉及决定用于表示整数/固定点表示的位数,以及在不同级别上确定量化参数。
-
位宽(Bit width):确定用于量化的位数。位数的选择至关重要,因为它直接影响量化表示中可以捕获的细节级别。选择更多的位数,如INT16或INT32,可以确保更高的值表示精度,但会增加内存使用和计算需求。相反,选择较少的位数,如INT4或更少的位数,会减少内存使用和计算开销,但可能导致信息丢失和准确性下降。
-
每层/每通道(Per-layer/Per-channel):这些策略涉及如何在神经网络的张量之间分配量化粒度。每张量量化涉及在给定张量内的所有值分配相同的量化粒度。这种方法简化了实现和内存管理,但可能无法完全考虑到张量内各个通道中值的变化。每通道量化采取更细粒度的方法,允许张量内各个通道有不同的量化粒度。通道通常表示数据的不同特征或方面,每通道量化允许定制分配位以适应这些通道的不同复杂性和重要性。
选择每张量量化和每通道量化取决于神经网络的特定属性以及它处理的数据的性质。例如,如果某些通道传达了关键细节,而其他通道的信息较少,每通道量化可能是有利的。相反,如果通道具有相似的重要性,每张量量化简化了部署并可能足够。
论文还提供了量化模型精度的比较表格,展示了对称量化和非对称量化对Mobilenet-v1、Mobilenet-v2、Nasnet-Mobile、Inception-v3、Resnet-v1和Resnet-v2等网络的影响。