【量化】量化原理浅析

本文探讨了深度学习模型在端侧运行时的轻量化策略,重点介绍了量化技术,包括8bit量化、线性量化与非线性量化(如二值量化、聚类量化),以及训练感知量化和训练后量化的区别和流程。量化有助于减小模型大小、提高推理速度,特别是在CPU和专用处理器上展现了显著性能提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

模型在端侧运行时,会追求模型保持原有精度的同时,让模型的运行速度更快。基本方向为模型压缩和加速,着力于减少网络参数量、降低计算复杂度。可通过以下方式实现:

  • 【轻量模型设计】常用的3x3的卷积的叠加代替大卷积;average-pooling 代替 full-connection layers; MobileNets中使用的 depth-wise convolution 代替传统的卷积方式;等。
  • 【剪枝】除去神经网络结构中不重要的部分
    【量化】调整网络结构中的权重和激活值的表达精度
    【蒸馏】把复杂网络结构的只是转移到较小网络结构上
  • 【推理框架上的优化】成熟的轻量化框(TensorRT、TF-lite、NCNN、MNN)。这些框架能够实现编译优化、缓存优化、算子优化、稀疏存储与计算、加速指令集应用等,能够显著的提升模型推理速度
  • 【硬件层级】硬件厂商通常会为特定深度学习任务或者框架做针对性设计优化,使得模型在匹配的硬件平台上获得最大的加速效果。目前主流的硬件平台有GPU、FPGA、ASIC等。
    GPU通用性好,计算能力强,但功耗较大,主要 用在云端训练和推理;
    ASIC这种定制程度较高的芯片通用性较低,但在专属任务上性能较高,主要用于前端计算设备上。TPU和NPU属于ASIC的范畴。

本篇博客主要记录量化的原理

1 量化简介

在信号处理领域中,量化是指将连续的信号近似为有限多个离散值的过程。
在深度学习领域中,模型量化是指:将高比特的权重和特征值用更低比特来表示 的方法。当量化后的数值是2的幂次时(如1/2/4/8 bit等),量化也可以成为定点化。量化后的值成为定点值。
在深度模型训练和推理过程中,最常使用的是32bit浮点型精度。但高比特意味着模型的体积更大,推理速度更慢,硬件资源消耗更多。这对于部署在计算和存储资源有限的边缘设备上是很不友好的。通过使用更低比特的精度,在尽量保持元模型效果的同时,获得尺寸更小、推理速度更快、硬件资源占用更少的模型是目前研究的重点方向。

2 量化基本原理

模型量化方法本质上是函数映射。建立了高精度的浮点数据 和量化后低精度的定点数据 之间的数据映射。
根据映射函数是否为线性,将其分为线性量化和非线性量化。

  • 线性量化:8bit量化(又分为对称量化、非对称量化)
  • 非线性量化:二值量化 (1 bit量化)、聚类量化、对数量化

其中最常用的是8bit量化,已在工业界中成熟使用。


2.1 线性量化

浮点模型参数与定点模型参数之间如何转换呢?

  • 浮点转定点(量化)公式为: Q = r o u n d ( R S + Z ) Q=round (\frac{R}{S}+Z) Q=round(SR+Z)定点转浮点(反量化)公式为: R = ( Q − Z ) ∗ S R=(Q-Z)*S R=(QZ)S【R】原始的浮点数据
    【Q】量化后的定点数据
    【Z】偏移量(或零点/最小值对应的量化数值),又被称为 Zero Point
    【S】缩放系数,又被成为Scale

那S和Z如何获取呢?

  • 可以知道浮点和定点参数的最值 R m a x 、 R m i n 、 Q m a x 、 Q m i n R_{max}、R_{min}、Q_{max}、Q_{min} RmaxRminQmaxQmin,则有:
    S = R m a x − R m i n Q m a x − Q m i n S=\frac{R_{max}-R_{min}}{Q_{max}-Q_{min}} S=QmaxQminRmaxRmin Z = Q m a x − R m a x S Z=Q_{max} - \frac{R_{max}}{S} Z=QmaxSRmax
2.1.1 8bit量化

(对上面的公式分情况细化)
8bit量化是目前工程上应用最为成熟的方案。该方案非常好的平衡了推理速度和精度之间的矛盾。Google的Tensorflow采用的是非对称量化,NVIDIA采用的是堆成量化。
对称量化和非对称量化,都属于线性量化,具有相同的量化公式和反量化公式(如上公式)。
但对于量化时的 S 、 Z S、Z SZ,可将其计算方式具体化。

  • 【对称量化】
    在这里插入图片描述
    操作:如上图所示,对称量化将输入数据映射到 [-128,127] 的范围内,但在实际使用中使用的是 [-127,127]。
    问题:如果将输入数据中存在偏离正常分布的较远离群点,则会导致较大的量化精度损失。
    解决:实际使用中,通常会选择介于127和 m a x ( ∣ x f ∣ ) max(|x_f|) max(xf) 之间的一个阈值T 对输入数据进行截断,以免离群点对量化精度的影响。即 量化的输入区间从 [ − m a x ( ∣ x f ∣ ) , m a x ( ∣ x f ∣ ) ] [-max(|x_f|), max(|x_f|)] [max(xf),max(xf)] 变为 [ − ∣ T ∣ , + ∣ T ∣ ] [-|T|, +|T|] [T,+T]

    对称量化需要保证【原始的输入数据中零点】通过映射公式后仍对应 [-127, 127] 区间的零点。所以Z=0,且Q=0时恰好有R=0。则整个计算过程如下,其中 R ′ R^{'} R为反量化结果
    Z = 0 S = ∣ R m a x ∣ ∣ Q m a x ∣ Q = c l i p ( r o u n d ( R S ) , − 127 , 127 ) R ′ = Q ∗ S \begin{aligned} Z&=0 \\ S&=\frac{|R_{max}|}{|Q_{max}|} \\ Q&=clip(round (\frac{R}{S}), -127, 127) \\ R^{'}&=Q*S\\ \end{aligned} ZSQR=0=QmaxRmax=clip(round(SR),127,127)=QS

  • 【非对称量化】
    在这里插入图片描述
    如上图所示,非对称量化将输入数据映射到[0,255] 的范围内。此时 Z = Q m a x − R m a x S = Q m i n Z=Q_{max}-\frac{R_{max}}{S}=Q_{min} Z=QmaxSRmax=Qmin。则整个计算过程如下,其中 R ‘ R^{`} R为反量化结果
    S = R m a x − R m i n Q m a x − Q m i n = R m a x − R m i n 255 Z = Q m a x − R m a x S = Q m i n Q = c l i p ( r o u n d ( R S + Z ) , 0 , 255 ) R ′ = ( Q − Z ) ∗ S \begin{aligned} S&=\frac{R_{max}-R_{min}}{Q_{max}-Q_{min}}=\frac{R_{max}-R_{min}}{255} \\ Z&=Q_{max}-\frac{R_{max}}{S}=Q_{min}\\ Q&=clip(round (\frac{R}{S}+Z), 0, 255) \\ R^{'}&=(Q-Z)*S\\ \end{aligned} SZQR=QmaxQminRmaxRmin=255RmaxRmin=QmaxSRmax=Qmin=clip(round(SR+Z),0,255)=(QZ)S


2.2 线性量化步骤

当前支持神经网络模型的芯片,都会提供一整套方案,其中就包括模型转换时的量化,使用者只需要按照相应文档进行操作即可。但若自己代码实现线性量化,具体过程:

  • 选择合适的量化方法,确定选用对称量化或非对称量化;
  • 统计输入数据的数值区间[min_value, max_value];
  • 根据量化方式,以及输入区间计算量化参数:零点值Z和缩放系数S;
  • 根据转换公式,对输入的float32 精度的数据转换为int8精度的数据

2.3 非线性量化

2.3.1 二值量化(1bit)

二值量化是目前压缩率最高的量化方法。有两种方法实现权重的二值化。一种是使用符号函数: w b = { + 1 i f      w ⩾ 0 − 1      o t h e r w i s e w_b=\left\{\begin{matrix} +1 &if \,\,\,\,w\geqslant0 & \\ -1 & \,\,\,\, otherwise& \end{matrix}\right. wb={+11ifw0otherwise另一种是以一定概率随机量化,如下公式: w b = { + 1      w i t h    p r o b a b i l i t y    p = σ ( w ) − 1      w i t h    p r o b a b i l i t y    1 − p w_b=\left\{\begin{matrix} +1 & \,\,\,\,with\,\,probability\,\,p=\sigma(w) & \\ -1 & \,\,\,\, with\,\,probability\,\,1-p& \end{matrix}\right. wb={+11withprobabilityp=σ(w)withprobability1p其中,概率的计算方式如下: σ ( x ) = c l i p ( x + 1 2 , 0 , 1 ) = max ⁡ ( 0 , min ⁡ ( 1 , x + 1 2 ) ) \sigma(x)=clip(\frac{x+1}{2},0,1)=\max(0,\min(1,\frac{x+1}{2})) σ(x)=clip(2x+1,0,1)=max(0,min(1,2x+1))
为了保持精度,权重在前向传播和反向传播计算的时候进行二值化,但是在进行参数更新的时候使用浮点类型。
虽然二值量化的效率非常高,但是模型精度非常大,落地困难。

2.3.2 聚类量化

典型代表,MIT的Deep Compression,这篇论文中综合使用了剪枝、量化、编码等技术实现模型的轻量化。其中量化这一部分的基本操作如下图所示
在这里插入图片描述
如上图所示,

  • 确定参数范围:4x4的矩阵中,所有权值大小在[-1.08,2.12] 之间
  • 聚类:如果以-1,0,1,2 这几个离散整数作为聚类中心,然后对矩阵中所有的权值进行聚类,并把同一类的所有权值四舍五入为聚类中心的值。
  • 同一类的权值梯度相加作为量化后聚类中心的梯度用于更新权重,图中相同颜色的权值表示属于同一聚类组

    作者采用 Kmeans聚类方法,把原始的m个权重 w = { W 1 , W 2 , . . . , W m } w=\{W_1,W_2,...,W_m\} w={W1,W2,...,Wm}量化为k个聚类中心 C = { C 1 , C 2 , . . . , C m } C=\{C_1,C_2,...,C_m\} C={C1,C2,...,Cm}。聚类算法最小化组内误差,目标函数: arg ⁡ min ⁡ C ∑ i = 1 k ∑ w ∈ c i ∣ w − c i ∣ 2 \arg \min_C \sum^{k}_{i=1}\sum_{w\in c_i}|w-c_i|^2 argCmini=1kwciwci2K-means 的初始聚类中心的选择非常关键。常用初始方法:均匀初始化、随机初始化、按密度初始化。论文中推荐使用均匀初始化,具体方法时统计权值的最小值和最大值,并把数值区间平分为 K 份,以每一份的分界点处的权值作为聚类的中心。
2.3.3 对数量化

INCREMENTAL NETWORK QUANTIZATION中有提出,对数量化后的定点值为2的幂次方,即两个临近点数值之间是以2为底的对数域上均匀分布的。如量化定点值为 2 − 1 , 2 − 2 , 2 − 3 2^{-1}, 2^{-2}, 2^{-3} 21,22,23,在对数域上的分布为-1,-2,-3。这种量化特性使得模型在推理时可以通过移位运算来实现快速的计算。
下图展示了对数量化的一种方式,权重矩阵中的权值量化到2的幂次的定点值上。与聚类量化方法不同的是,对每层的权重采用分批量化,而不是一次量化整个权重。这样分批量化的方式能够让部分权重保持高精度,更方便的进行训练优化。
在这里插入图片描述

3 训练感知量化、训练后量化

  • 训练感知量化:量化不可避免带来模型的精度损失,为了能够尽量保持原模型的精度,通常会对量化后模型做fine tuning,或者进行重新训练,这个方式称作为"训练感知量化"。
  • 训练后量化:如果模型量化的精度满足使用需求,则可以忽略finetuning和重训练过程,这种方式称作为"训练后量化"。若模型规模较小,有可能会导致无法使用。

3.1 训练感知量化主要流程:


3.2 训练后量化主要流程:

  • 准备Calibration Data,用于对量化模型进行量化参数校正。
  • 以训练好的高精度模型为基准,使用校正数据集对其进行量化
  • 统计权重和激活值的数值范围,确定量化参数
    • 权重量化:对模型中的weights进行量化。由于网络权重在训练结束后都是确定的值,因而通过对每一层权重统计就可以得到量化参数。此时不需要Calibaration Data参与的,既Data Free
    • 激活量化:对网络的激活值进行量化,既卷积权重的输出,可以能是激活函数后的输出。由于feature的数值范围需要动态的获取,因而就需要Calibaration Data作为数据输入,通过前向推理产生的各层的feature统计量化参数。
  • 使用量化参数对模型进行量化
    对激活值量化时,需要根据输入的Calibration Data动态的统计量化参数。通常会采用一些策略来确定更有效的量化参数:
    1. 统计每个batch的量化参数,通过指数平滑方法更新参数值。
    2. 统计量化参数时,需要去除偏离数据正常分布较远的离群点,以免造成大的量化误差。
    3. 使用KL散度评估模型量化产生的信息损失,选用KL散度最小时的量化参数来量化模型。如TensorRT使用该方法度量INT8的信息损失

3.3 总结


性能表现

  • 在CPU上,8bit量化推理能够获取2~3倍的速度提升。在专为低精度向量计算优化过的特定处理器上,如支持HVX的小龙DSP,和原浮点型模型推理速度相比能够加速10倍。
  • 使用线性量化可以在基本保持精度不变的情况下缩小4倍的模型大小。使用非线性量化则能够实现更高的压缩比,比如K-means聚类量化。

模型结构和量化关系

  • 模型大小和压缩率之间存在明确的这种关系。模型规模越大对量化误差的容忍程度越高
  • 对于某一个模型结构,可以在特征数量(权重激活数量)和量化之间进行折中,使用越多的特征数量参与量化,则卷积核可以相应支持更低的比特位宽
  • 训练过程中不约束激活函数的输出范围,而是直接对输出进行量化,这样能进一步提升精度。

参考:https://laiye.com/tech-blog/2391

<think>嗯,用户现在问的是相位量化,我之前刚回答过拟牛顿法的优化问题,现在需要转换到相位量化这个新话题上。首先,我要确定相位量化是什么,可能涉及信号处理或者量子计算中的概念?用户可能来自哪个领域呢? 相位量化听起来像是将连续的相位信息转换为离散的数值,可能在数字信号处理中应用较多。比如在调制解调、通信系统里,相位是一个关键参数,量化可能涉及将相位分成不同的区间,用有限位数的数字表示。此外,量子计算中的量子态相位也可能需要量化,但用户的问题更可能指向信号处理方面。 接下来需要验证这个理解是否正确。相位量化常见于模数转换过程,尤其是在信号采样时,不仅幅度被量化,相位也可能需要量化处理。例如,在PSK(相移键控)调制中,不同的相位代表不同的数据符号,这时候相位被量化为几个固定的角度值。 用户可能想了解相位量化的基本原理、应用场景、数学表达以及实现方法。需要分步骤解释,结构清晰。比如先定义什么是相位量化,然后讨论其数学表达,接着是应用领域,最后可能涉及优缺点或实际例子。 需要注意相位量化与幅度量化的区别。幅度量化关注信号的大小,而相位量化关注波形的相位角。在复数信号处理中,相位通常和幅度一起构成复数的极坐标表示,因此量化过程可能同时涉及两者,但用户特别问的是相位部分。 还要考虑量化误差的问题。量化必然引入误差,相位量化误差如何影响系统性能?比如在通信系统中,相位误差可能导致误码率上升,需要分析量化位数与系统性能的权衡。 可能还需要提到具体的应用实例,如数字通信中的QPSK(四相相移键控),其中相位被量化为四个不同的角度,每个角度代表2比特的数据。或者更高阶的调制方式如8-PSK,使用8个相位点,每个符号携带3比特。 此外,相位量化的数学表示可能需要使用离散的相位值,例如将0到2π的范围划分为N个等间隔的区间,每个区间对应一个量化级别。这种情况下,量化步长是2π/N,量化误差最大为±π/N。 在实现上,相位量化可能涉及相位检测、比较器和数字编码器。例如,通过锁相环(PLL)捕获相位信息,然后使用ADC进行量化。或者在数字域中,通过计算信号的反正切来获取相位,再进行离散化处理。 用户可能有实际项目需要应用相位量化,或者在学习相关课程时遇到这个概念。需要确保解释清晰,涵盖基本概念、应用、数学原理和实际考虑因素。同时,可能需要提供公式示例,比如量化的相位θ_q = round(θ/(2π/N)) * (2π/N),其中N是量化级别数。 另外,相位量化在图像处理或雷达信号处理中是否有应用?例如,合成孔径雷达(SAR)中的相位信息用于成像,量化可能影响图像质量。或者,在音频处理中,相位调整用于声波定向,量化误差可能导致声音失真。 总之,需要系统性地介绍相位量化的定义、原理、数学表达、应用领域、误差分析及实例,确保用户能够全面理解这一概念,并可能应用于实际问题中。</think>##### 相位量化介绍 ###### 1. **基本定义** **相位量化**是指将连续的相位值映射到有限个离散级别的过程,是数字信号处理中的关键技术之一。其核心目的是用有限的比特数表示相位信息,从而降低数据量或适应数字系统的离散特性。数学上,若原始相位范围为$[0, 2\pi)$,量化后相位可表示为: $$ \theta_q = \frac{2\pi}{N} \cdot \text{round}\left( \frac{\theta \cdot N}{2\pi} \right) $$ 其中$N$为量化级别数,$\text{round}(\cdot)$为四舍五入操作。 ###### 2. **与幅度量化的对比** | **维度** | **幅度量化** | **相位量化** | |----------------|---------------------------|---------------------------| | 量化对象 | 信号强度(实数/复数模值) | 信号相位角($[0, 2\pi)$) | | 误差影响 | 信号功率失真 | 波形畸变、相干性破坏 | | 典型应用 | ADC采样、音频压缩 | PSK调制、雷达信号处理 | ###### 3. **数学原理** - **量化步长**:$\Delta_\theta = \frac{2\pi}{N}$ - **量化误差**:最大绝对误差为$\pm \frac{\Delta_\theta}{2}$,均方误差为$\frac{\Delta_\theta^2}{12}$ - **复数信号表示**:若信号为$s = A e^{j\theta}$,量化后为$s_q = A_q e^{j\theta_q}$,其中$A_q$为幅度量化值。 ###### 4. **关键技术** 1. **均匀量化**: - 相位区间等分,硬件实现简单 - 适用于相位分布均匀的场景(如QPSK调制) 2. **非均匀量化**: - 根据相位概率密度调整步长 - 例:在相位集中于某区间时(如雷达回波),减小关键区域步长 3. **相位解缠绕(Phase Unwrapping)**: - 解决$2\pi$跳变问题,确保连续相位跟踪 - 算法:基于梯度检测或路径跟踪 ###### 5. **应用场景** - **数字通信**: - **PSK调制**:QPSK(4级)、8-PSK(8级)等,每符号携带$\log_2 N$比特 - 正交频分复用(OFDM):子载波相位量化 - **雷达系统**: - 合成孔径雷达(SAR):相位保持成像精度 - 多普勒雷达:运动目标相位差检测 - **量子计算**: - 量子态相位编码(需超导量子比特的相位精确控制) - **医学成像**: - MRI相位图像处理(如磁敏感加权成像) ###### 6. **误差分析** - **通信误码率(BER)**: QPSK中4级相位量化时,误码率公式: $$ P_b \approx Q\left( \sqrt{\frac{2E_b}{N_0}} \sin\left( \frac{\pi}{4} + \frac{\Delta_\theta}{2} \right) \right) $$ 其中$\Delta_\theta$为相位误差,$Q(\cdot)$为Q函数。 - **成像分辨率**: 在SAR中,相位量化误差$\delta_\theta$导致距离向分辨率损失: $$ \Delta R \approx \frac{c \delta_\theta}{4\pi f_c} $$ 其中$c$为光速,$f_c$为载波频率。 ###### 7. **硬件实现** - **直接数字合成器(DDS)**: - 相位累加器输出量化相位值,驱动查找表生成正弦波 - 典型量化位数:12~16位(对应$N=4096\sim65536$级) - **全数字锁相环(ADPLL)**: - 时间数字转换器(TDC)量化相位差 - 应用于5G毫米波频率合成 - **光学相位量化**: - 马赫-曾德尔调制器(MZM)实现光相位离散化 - 应用于相干光通信 ###### 8. **性能优化** - **抖动注入(Dithering)**: 加入微量随机噪声,打破量化误差周期性,将失真转化为白噪声 - **Sigma-Delta调制**: 过采样结合噪声整形,提高有效量化精度 - **相位预测补偿**: 利用相邻采样点相位相关性,减小瞬态误差 ###### 9. **代码示例(Python)** ```python import numpy as np def phase_quantization(theta, num_bits): """ 相位均匀量化 :param theta: 原始相位(弧度),可接受标量或数组 :param num_bits: 量化位数(如8位对应256级) :return: 量化后相位 """ N = 2 ** num_bits quantized = np.round(theta * N / (2 * np.pi)) * (2 * np.pi) / N return quantized % (2 * np.pi) # 确保相位在[0, 2π) # 示例:量化8位相位 original_phase = np.array([0.1, 3.14, 5.9]) quantized_phase = phase_quantization(original_phase, 8) print(f"原始相位:{original_phase}\n量化后:{quantized_phase}") ``` ###### 10. **挑战与前沿** - **超低功耗量化**: 物联网设备需1-3位粗量化,研究相位-幅度联合稀疏表示 - **量子极限突破**: 光量子态相位量化达海森堡极限(误差∝1/N) - **AI辅助量化**: 神经网络学习最优非均匀量化表(如用于6G智能超表面) ##### 总结 相位量化通过**离散化连续相位**,在保证信息精度的同时显著降低系统复杂度,其设计需权衡**量化误差、硬件成本与功耗**。随着5G/6G通信、量子传感等技术的发展,面向非线性信道和非平稳信号的自适应相位量化方法成为研究热点。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值