自适应量化方法详解
引言
自适应量化是数字信号处理和机器学习领域的重要技术,它通过动态调整量化参数来适应数据的统计特性,提高数据表示的精度和效率。
量化基础
量化本质上是将连续或高精度的数值映射到离散或低精度的数值空间。最简单的均匀量化可表示为:
Q ( x ) = round ( x − x m i n s ) ⋅ s + x m i n Q(x) = \text{round}\left(\frac{x - x_{min}}{s}\right) \cdot s + x_{min} Q(x)=round(sx−xmin)⋅s+xmin
其中, s s s 是量化步长, x m i n x_{min} xmin 是量化范围的下限, round \text{round} round 是舍入函数。均匀量化虽然实现简单,但在处理非均匀分布的数据时效率低下,这正是自适应量化方法的应用场景。从信息论角度看,量化是一种有损压缩,其中量化误差可以表示为:
e ( x ) = Q ( x ) − x e(x) = Q(x) - x e(x)=Q(x)−x
在均匀量化中,假设输入信号为有界区间 [ a , b ] [a, b] [a,b],量化为 N N N个等级,则量化步长为:
s = b − a N s = \frac{b-a}{N} s=Nb−a
量化误差的均方值为:
σ e 2 = E [ e 2 ( x ) ] = ∫ a b e 2 ( x ) p ( x ) d x \sigma_e^2 = \mathbb{E}[e^2(x)] = \int_a^b e^2(x)p(x)dx σe2=E[e2(x)]=∫abe2(x)p(x)dx
其中 p ( x ) p(x) p(x)是信号的概率密度函数。
自适应量化的核心思想
自适应量化的核心思想是根据数据的分布特性动态调整量化参数,使量化误差最小化。与固定参数的量化相比,自适应量化可以在相同位宽下实现更低的量化误差,或在相同误差约束下使用更低的位宽。数学上,自适应量化可表述为一个优化问题:
min θ E x ∼ p ( x ) [ d ( x , x ^ ) ] \min_{\theta} \mathbb{E}_{x \sim p(x)}[d(x, \hat{x})] θminEx∼p(x)[d(x,x^)]
其中, θ \theta θ 是量化参数集合, p ( x ) p(x) p(x) 是数据分布, d ( x , x ^ ) d(x, \hat{x}) d(x,x^) 是原始值 x x x 与量化后值 x ^ \hat{x} x^ 之间的失真度量。当采用均方误差作为失真度量时,该优化问题可进一步表示为:
min θ ∫ − ∞ ∞ ( x − Q θ ( x ) ) 2 p ( x ) d x \min_{\theta} \int_{-\infty}^{\infty} (x - Q_{\theta}(x))^2 p(x) dx θmin∫−∞∞(x−Qθ(x))2p(x)dx
其中, Q θ ( x ) Q_{\theta}(x) Qθ(x) 是参数化的量化函数。
常见的自适应量化方法
1. 基于直方图的自适应量化
这种方法首先构建数据分布的直方图,然后基于直方图优化量化参数。对于给定的位宽 b b b(允许 2 b 2^b 2b 个量化水平),目标是找到最佳的量化边界,使量化误差最小化。
Lloyd-Max量化算法是一种经典方法,其迭代过程如下:
- 初始化量化边界 { t i } i = 0 2 b \{t_i\}_{i=0}^{2^b} {ti}i=02b 和量化代表值 { r i } i = 1 2 b \{r_i\}_{i=1}^{2^b} {ri}i=12b
- 更新代表值: r i = ∫ t i − 1 t i x ⋅ p ( x ) d x ∫ t i − 1 t i p ( x ) d x r_i = \frac{\int_{t_{i-1}}^{t_i} x \cdot p(x) dx}{\int_{t_{i-1}}^{t_i} p(x) dx} ri=∫ti−1tip(x)dx∫ti−1tix⋅p(x)dx
- 更新边界: t i = r i + r i + 1 2 t_i = \frac{r_i + r_{i+1}}{2} ti=2ri+ri+1 for i ∈ { 1 , 2 , . . . , 2 b − 1 } i \in \{1, 2, ..., 2^b-1\} i∈{1,2,...,2b−1}
- 重复步骤2和3直至收敛
最终,量化函数可表示为:
Q ( x ) = r i if x ∈ [ t i − 1 , t i ) Q(x) = r_i \quad \text{if} \quad x \in [t_{i-1}, t_i) Q(x)=riifx∈[ti−1,ti)
Lloyd-Max算法的理论基础可以通过变分法推导。考虑均方误差目标函数:
J ( { r i } , { t i } ) = ∑ i = 1 2 b ∫ t i − 1 t i ( x − r i ) 2 p ( x ) d x J(\{r_i\}, \{t_i\}) = \sum_{i=1}^{2^b} \int_{t_{i-1}}^{t_i} (x - r_i)^2 p(x) dx J({ri},{ti})=i=1∑2b∫ti−1ti(x−ri)2p(x)dx
我们需要找到 { r i } \{r_i\} {ri}和 { t i } \{t_i\} {ti}使得 J J J最小化。对 r i r_i ri求偏导并令其为零:
∂ J ∂ r i = − 2 ∫ t i − 1 t i ( x − r i ) p ( x ) d x = 0 \frac{\partial J}{\partial r_i} = -2\int_{t_{i-1}}^{t_i} (x - r_i) p(x) dx = 0 ∂ri∂J=−2∫ti−1ti(x−ri)p(x)dx=0
解得:
r i = ∫ t i − 1 t i x p ( x ) d x ∫ t i − 1 t i p ( x ) d x r_i = \frac{\int_{t_{i-1}}^{t_i} x p(x) dx}{\int_{t_{i-1}}^{t_i} p(x) dx} ri=∫ti−1tip(x)dx∫ti−1tixp(x)dx
类似地,对 t i t_i ti求偏导:
∂ J ∂ t i = ( t i − r i ) 2 p ( t i ) − ( t i − r i + 1 ) 2 p ( t i ) = 0 \frac{\partial J}{\partial t_i} = (t_i - r_i)^2 p(t_i) - (t_i - r_{i+1})^2 p(t_i) = 0 ∂ti∂J=(ti−ri)2p(ti)−(ti−ri+1)2p(ti)=0
解得:
t i = r i + r i + 1 2 t_i = \frac{r_i + r_{i+1}}{2} ti=2ri+ri+1
这就是Lloyd-Max算法的理论依据。
2. 基于误差敏感度的自适应量化
在神经网络量化中,不同层甚至不同通道对量化误差的敏感度各不相同。基于误差敏感度的自适应量化考虑了这种差异,为不同的权重或激活值分配不同的量化参数。
对于神经网络中的权重 W l W_l Wl 的量化,可以定义误差敏感度:
S l = ∥ ∂ L ∂ W l ∥ F S_l = \left\| \frac{\partial \mathcal{L}}{\partial W_l} \right\|_F Sl= ∂Wl∂L F
其中 L \mathcal{L} L 是损失函数, ∥ ⋅ ∥ F \|\cdot\|_F ∥⋅∥F 是Frobenius范数。量化位宽可以与敏感度成正比:
b l ∝ log 2 ( 1 + α ⋅ S l ) b_l \propto \log_2(1 + \alpha \cdot S_l) bl∝log2(1+α⋅Sl)
其中 α \alpha α 是控制分配强度的超参数。误差敏感度也可以通过海森矩阵的特征分析来估计。假设 L \mathcal{L} L是损失函数, W W W是权重参数,量化误差 Δ W \Delta W ΔW导致的损失增量可以通过二阶泰勒展开近似为:
Δ L ≈ ∂ L ∂ W Δ W + 1 2 Δ W T ∂ 2 L ∂ W 2 Δ W \Delta \mathcal{L} \approx \frac{\partial \mathcal{L}}{\partial W} \Delta W + \frac{1}{2} \Delta W^T \frac{\partial^2 \mathcal{L}}{\partial W^2} \Delta W ΔL≈∂W∂LΔW+21ΔWT∂W2∂2LΔW
当网络经过充分训练,梯度接近于零时,损失增量主要由海森矩阵决定:
Δ L ≈ 1 2 Δ W T H Δ W \Delta \mathcal{L} \approx \frac{1}{2} \Delta W^T H \Delta W ΔL≈21ΔWTHΔW
其中 H = ∂ 2 L ∂ W 2 H = \frac{\partial^2 \mathcal{L}}{\partial W^2} H=∂W2∂2L是海森矩阵。对于大型网络,直接计算海森矩阵计算代价高,可以通过Fisher信息矩阵近似:
H ≈ F = E [ ∂ L ∂ W ∂ L ∂ W T ] H \approx F = \mathbb{E}\left[\frac{\partial \mathcal{L}}{\partial W} \frac{\partial \mathcal{L}}{\partial W}^T\right] H≈F=E[∂W∂L∂W∂LT]
因此,每个权重的敏感度可以表示为:
S i j = F i j = E [ ( ∂ L ∂ W i j ) 2 ] S_{ij} = F_{ij} = \mathbb{E}\left[\left(\frac{\partial \mathcal{L}}{\partial W_{ij}}\right)^2\right] Sij=Fij=E[(∂Wij∂L)2]
3. 基于优化的自适应量化
这类方法将量化过程转化为优化问题,直接优化量化参数以最小化任务相关的损失函数。对于神经网络量化,可以在训练过程中学习量化参数。比如,对于每层的权重 W l W_l Wl,可以学习其缩放因子 s l s_l sl:
W ^ l = s l ⋅ round ( W l s l ) \hat{W}_l = s_l \cdot \text{round}\left(\frac{W_l}{s_l}\right) W^l=sl⋅round(slWl)
优化目标是最小化原始任务损失与量化误差之和:
min W , s L t a s k ( W ^ ) + λ ∑ l ∥ W l − W ^ l ∥ F 2 \min_{W, s} \mathcal{L}_{task}(\hat{W}) + \lambda \sum_l \|W_l - \hat{W}_l\|^2_F W,sminLtask(W^)+λl∑∥Wl−W^l∥F2
在实际实现中,由于量化操作不可导,我们可以采用直通估计(Straight-Through Estimator, STE)来近似梯度:
∂ L ∂ W l = ∂ L ∂ W ^ l ⋅ ∂ W ^ l ∂ W l ≈ ∂ L ∂ W ^ l \frac{\partial \mathcal{L}}{\partial W_l} = \frac{\partial \mathcal{L}}{\partial \hat{W}_l} \cdot \frac{\partial \hat{W}_l}{\partial W_l} \approx \frac{\partial \mathcal{L}}{\partial \hat{W}_l} ∂Wl∂L=∂W^l∂L⋅∂Wl∂W^l≈∂W^l∂L
对于缩放因子 s l s_l sl的梯度,可以精确计算:
∂ W ^ l ∂ s l = round ( W l s l ) − W l s l 2 ⋅ s l ⋅ ∂ round ( x ) ∂ x ∣ x = W l s l \frac{\partial \hat{W}_l}{\partial s_l} = \text{round}\left(\frac{W_l}{s_l}\right) - \frac{W_l}{s_l^2} \cdot s_l \cdot \frac{\partial \text{round}(x)}{\partial x}\bigg|_{x=\frac{W_l}{s_l}} ∂sl∂W^l=round(slWl)−sl2Wl⋅sl⋅∂x∂round(x) x=slWl
由于舍入函数几乎处处导数为零,我们可以近似为:
∂ W ^ l ∂ s l ≈ round ( W l s l ) \frac{\partial \hat{W}_l}{\partial s_l} \approx \text{round}\left(\frac{W_l}{s_l}\right) ∂sl∂W^l≈round(slWl)
因此,缩放因子的梯度更新为:
∂ L ∂ s l = ∂ L ∂ W ^ l ⋅ ∂ W ^ l ∂ s l ≈ ∂ L ∂ W ^ l ⋅ round ( W l s l ) \frac{\partial \mathcal{L}}{\partial s_l} = \frac{\partial \mathcal{L}}{\partial \hat{W}_l} \cdot \frac{\partial \hat{W}_l}{\partial s_l} \approx \frac{\partial \mathcal{L}}{\partial \hat{W}_l} \cdot \text{round}\left(\frac{W_l}{s_l}\right) ∂sl∂L=∂W^l∂L⋅∂sl∂W^l≈∂W^l∂L⋅round(slWl)
4. 非线性自适应量化
对于严重偏斜的数据分布,可以应用非线性变换后再进行量化。对数量化是一种常见的非线性量化方法:
Q l o g ( x ) = sign ( x ) ⋅ Q ( log ( 1 + α ∣ x ∣ ) ) Q_{log}(x) = \text{sign}(x) \cdot Q(\log(1 + \alpha |x|)) Qlog(x)=sign(x)⋅Q(log(1+α∣x∣))
其中 α \alpha α 是可调参数,控制非线性程度。对数变换能够有效压缩大值,扩展小值,使分布更加均匀。从信息论角度看,对数变换可以保持信息熵的同时降低动态范围。假设原始信号 X X X的概率密度函数为 p X ( x ) p_X(x) pX(x),经过变换 Y = g ( X ) = log ( 1 + α ∣ X ∣ ) Y = g(X) = \log(1 + \alpha|X|) Y=g(X)=log(1+α∣X∣)后,新的概率密度函数为:
p Y ( y ) = p X ( g − 1 ( y ) ) ⋅ ∣ d g − 1 ( y ) d y ∣ p_Y(y) = p_X(g^{-1}(y)) \cdot \left|\frac{dg^{-1}(y)}{dy}\right| pY(y)=pX(g−1(y))⋅ dydg−1(y)
其中 g − 1 ( y ) = e y − 1 α g^{-1}(y) = \frac{e^y - 1}{\alpha} g−1(y)=αey−1,导数为:
d g − 1 ( y ) d y = e y α \frac{dg^{-1}(y)}{dy} = \frac{e^y}{\alpha} dydg−1(y)=αey
所以:
p Y ( y ) = p X ( e y − 1 α ) ⋅ e y α p_Y(y) = p_X\left(\frac{e^y - 1}{\alpha}\right) \cdot \frac{e^y}{\alpha} pY(y)=pX(αey−1)⋅αey
理论上,可以通过调整 α \alpha α使 p Y ( y ) p_Y(y) pY(y)尽可能均匀,从而最小化量化误差。最优的 α \alpha α可以通过最大化 Y Y Y的微分熵来确定:
α ∗ = arg max α H ( Y ) = arg max α ( − ∫ p Y ( y ) log p Y ( y ) d y ) \alpha^* = \arg\max_{\alpha} H(Y) = \arg\max_{\alpha} \left(-\int p_Y(y) \log p_Y(y) dy\right) α∗=argαmaxH(Y)=argαmax(−∫pY(y)logpY(y)dy)
其中 H ( Y ) H(Y) H(Y)是 Y Y Y的微分熵。
自适应量化在深度学习中的应用
权重量化
对于卷积神经网络的权重量化,每个卷积层的权重统计特性可能差异很大。自适应量化可针对不同层设定不同的量化参数:
W ^ l = s l ⋅ clip ( round ( W l − z l s l ) , n , p ) + z l \hat{W}_l = s_l \cdot \text{clip}\left(\text{round}\left(\frac{W_l - z_l}{s_l}\right), n, p\right) + z_l W^l=sl⋅clip(round(slWl−zl),n,p)+zl
其中, s l s_l sl 是缩放因子, z l z_l zl 是零点, n n n 和 p p p 分别是量化范围的下限和上限。这些参数可以通过最小化重构误差来确定:
min s l , z l ∥ W l − W ^ l ∥ F 2 \min_{s_l, z_l} \|W_l - \hat{W}_l\|^2_F sl,zlmin∥Wl−W^l∥F2
具体地,对于对称量化,缩放因子可以通过最大绝对值确定:
s l = max ( ∣ W l ∣ ) 2 b − 1 − 1 s_l = \frac{\max(|W_l|)}{2^{b-1} - 1} sl=2b−1−1max(∣Wl∣)
对于非对称量化,缩放因子和零点可以通过最小值和最大值确定:
s l = max ( W l ) − min ( W l ) 2 b − 1 s_l = \frac{\max(W_l) - \min(W_l)}{2^b - 1} sl=2b−1max(Wl)−min(Wl)
z l = round ( min ( W l ) ⋅ 1 s l ) ⋅ s l z_l = \text{round}\left(\min(W_l) \cdot \frac{1}{s_l}\right) \cdot s_l zl=round(min(Wl)⋅sl1)⋅sl
为了进一步提高量化精度,可以应用通道级别的量化,即对每个输出通道单独量化:
W ^ l , c = s l , c ⋅ clip ( round ( W l , c − z l , c s l , c ) , n , p ) + z l , c \hat{W}_{l,c} = s_{l,c} \cdot \text{clip}\left(\text{round}\left(\frac{W_{l,c} - z_{l,c}}{s_{l,c}}\right), n, p\right) + z_{l,c} W^l,c=sl,c⋅clip(round(sl,cWl,c−zl,c),n,p)+zl,c
其中, W l , c W_{l,c} Wl,c 是第 l l l 层第 c c c 个输出通道的权重, s l , c s_{l,c} sl,c 和 z l , c z_{l,c} zl,c 是相应的缩放因子和零点。在量化感知训练中,还可以考虑权重量化对整体网络性能的影响。通过反向传播优化量化参数,最小化任务损失:
min W , s , z L t a s k ( f ( x ; W ^ ) ) \min_{W, s, z} \mathcal{L}_{task}(f(x; \hat{W})) W,s,zminLtask(f(x;W^))
其中, f ( x ; W ^ ) f(x; \hat{W}) f(x;W^) 是使用量化权重的网络前向传播。
激活值量化
激活值分布通常更加复杂且动态变化,需要更灵活的自适应量化方法。一种常见方法是使用指数移动平均(EMA)来跟踪激活值的统计特性:
μ
t
=
β
⋅
μ
t
−
1
+
(
1
−
β
)
⋅
μ
b
a
t
c
h
\mu_t = \beta \cdot \mu_{t-1} + (1-\beta) \cdot \mu_{batch}
μt=β⋅μt−1+(1−β)⋅μbatch
σ
t
=
β
⋅
σ
t
−
1
+
(
1
−
β
)
⋅
σ
b
a
t
c
h
\sigma_t = \beta \cdot \sigma_{t-1} + (1-\beta) \cdot \sigma_{batch}
σt=β⋅σt−1+(1−β)⋅σbatch
基于这些统计量,可以确定量化参数:
s
=
2
b
−
1
q
m
a
x
−
q
m
i
n
s = \frac{2^b - 1}{q_{max} - q_{min}}
s=qmax−qmin2b−1
z
=
round
(
q
m
i
n
⋅
s
)
z = \text{round}(q_{min} \cdot s)
z=round(qmin⋅s)
其中, q m i n q_{min} qmin 和 q m a x q_{max} qmax 通常设为 μ − γ ⋅ σ \mu - \gamma \cdot \sigma μ−γ⋅σ 和 μ + γ ⋅ σ \mu + \gamma \cdot \sigma μ+γ⋅σ, γ \gamma γ 是控制量化范围的超参数。更进一步,可以建立激活值量化与网络性能之间的关系,通过最小化量化引起的输出变化来优化量化参数。令 y = f ( x ; W ) y = f(x; W) y=f(x;W)为原始网络输出, y ^ = f ( x ; W , Q a ) \hat{y} = f(x; W, Q_a) y^=f(x;W,Qa)为激活值量化后的输出,则最优量化参数可以通过解决如下优化问题获得:
min Q a ∥ y − y ^ ∥ 2 \min_{Q_a} \|y - \hat{y}\|^2 Qamin∥y−y^∥2
具体地,对于第 l l l层的激活值 a l a_l al,其量化参数 s l s_l sl和 z l z_l zl的梯度可以通过链式法则计算:
∂ ∥ y − y ^ ∥ 2 ∂ s l = 2 ( y − y ^ ) T ∂ y ^ ∂ a ^ l ∂ a ^ l ∂ s l \frac{\partial \|y - \hat{y}\|^2}{\partial s_l} = 2(y - \hat{y})^T \frac{\partial \hat{y}}{\partial \hat{a}_l} \frac{\partial \hat{a}_l}{\partial s_l} ∂sl∂∥y−y^∥2=2(y−y^)T∂a^l∂y^∂sl∂a^l
∂ ∥ y − y ^ ∥ 2 ∂ z l = 2 ( y − y ^ ) T ∂ y ^ ∂ a ^ l ∂ a ^ l ∂ z l \frac{\partial \|y - \hat{y}\|^2}{\partial z_l} = 2(y - \hat{y})^T \frac{\partial \hat{y}}{\partial \hat{a}_l} \frac{\partial \hat{a}_l}{\partial z_l} ∂zl∂∥y−y^∥2=2(y−y^)T∂a^l∂y^∂zl∂a^l
其中, a ^ l \hat{a}_l a^l是量化后的激活值。这些梯度可以通过反向传播算法计算,并用于更新量化参数。
自适应量化的理论分析
量化误差分析
在均匀量化中,假设量化误差服从均匀分布 U ( − Δ / 2 , Δ / 2 ) U(-\Delta/2, \Delta/2) U(−Δ/2,Δ/2),其中 Δ \Delta Δ 是量化步长。量化误差的均方差为:
σ q 2 = Δ 2 12 \sigma_q^2 = \frac{\Delta^2}{12} σq2=12Δ2
而对于自适应量化,理论上可以证明,当量化水平趋于无穷时,最优量化方案下的量化误差为:
σ q 2 ≈ 1 12 ⋅ 2 2 b ∫ p ( x ) 1 / 3 d x \sigma_q^2 \approx \frac{1}{12 \cdot 2^{2b}} \int p(x)^{1/3} dx σq2≈12⋅22b1∫p(x)1/3dx
此结果表明,自适应量化的误差随数据分布的光滑程度而减小。这个结果可以通过高分辨率极限理论(High-Resolution Quantization Theory)推导。考虑一个连续随机变量 X X X,其概率密度函数为 p ( x ) p(x) p(x),被量化为 N N N个等级。我们将量化区间 [ t i − 1 , t i ] [t_{i-1}, t_i] [ti−1,ti]对应的量化值设为 r i r_i ri。
在高分辨率假设下(即 N N N很大),如果 x ∈ [ t i − 1 , t i ] x \in [t_{i-1}, t_i] x∈[ti−1,ti],则 p ( x ) p(x) p(x)在该区间内近似为常数 p ( r i ) p(r_i) p(ri)。量化误差的均方值可以表示为:
σ q 2 = ∑ i = 1 N ∫ t i − 1 t i ( x − r i ) 2 p ( x ) d x ≈ ∑ i = 1 N p ( r i ) ∫ t i − 1 t i ( x − r i ) 2 d x \sigma_q^2 = \sum_{i=1}^N \int_{t_{i-1}}^{t_i} (x - r_i)^2 p(x) dx \approx \sum_{i=1}^N p(r_i) \int_{t_{i-1}}^{t_i} (x - r_i)^2 dx σq2=i=1∑N∫ti−1ti(x−ri)2p(x)dx≈i=1∑Np(ri)∫ti−1ti(x−ri)2dx
对于最优量化, r i r_i ri是区间 [ t i − 1 , t i ] [t_{i-1}, t_i] [ti−1,ti]的中点,因此:
∫ t i − 1 t i ( x − r i ) 2 d x = ( t i − t i − 1 ) 3 12 \int_{t_{i-1}}^{t_i} (x - r_i)^2 dx = \frac{(t_i - t_{i-1})^3}{12} ∫ti−1ti(x−ri)2dx=12(ti−ti−1)3
令 Δ i = t i − t i − 1 \Delta_i = t_i - t_{i-1} Δi=ti−ti−1为第 i i i个量化区间的宽度,则:
σ q 2 ≈ ∑ i = 1 N p ( r i ) Δ i 3 12 \sigma_q^2 \approx \sum_{i=1}^N p(r_i) \frac{\Delta_i^3}{12} σq2≈i=1∑Np(ri)12Δi3
在最优量化下,量化区间的宽度应与概率密度的 − 1 / 3 -1/3 −1/3次方成正比,即:
Δ i ∝ p ( r i ) − 1 / 3 \Delta_i \propto p(r_i)^{-1/3} Δi∝p(ri)−1/3
同时,区间宽度需满足约束:
∑ i = 1 N Δ i = R \sum_{i=1}^N \Delta_i = R i=1∑NΔi=R
其中 R R R是量化范围。通过拉格朗日乘数法可得:
Δ i = p ( r i ) − 1 / 3 ∑ j = 1 N p ( r j ) − 1 / 3 ⋅ R \Delta_i = \frac{p(r_i)^{-1/3}}{\sum_{j=1}^N p(r_j)^{-1/3}} \cdot R Δi=∑j=1Np(rj)−1/3p(ri)−1/3⋅R
将此代入量化误差表达式:
σ q 2 ≈ 1 12 ∑ i = 1 N p ( r i ) Δ i 3 = R 3 12 ∑ i = 1 N p ( r i ) p ( r i ) − 1 ( ∑ j = 1 N p ( r j ) − 1 / 3 ) 3 \sigma_q^2 \approx \frac{1}{12} \sum_{i=1}^N p(r_i) \Delta_i^3 = \frac{R^3}{12} \frac{\sum_{i=1}^N p(r_i) p(r_i)^{-1}}{\left(\sum_{j=1}^N p(r_j)^{-1/3}\right)^3} σq2≈121i=1∑Np(ri)Δi3=12R3(∑j=1Np(rj)−1/3)3∑i=1Np(ri)p(ri)−1
在高分辨率极限下,求和可以近似为积分:
σ q 2 ≈ R 3 12 N 3 ∫ p ( x ) 2 / 3 d x ( ∫ p ( x ) 2 / 3 d x ) 3 \sigma_q^2 \approx \frac{R^3}{12N^3} \frac{\int p(x)^{2/3} dx}{\left(\int p(x)^{2/3} dx\right)^3} σq2≈12N3R3(∫p(x)2/3dx)3∫p(x)2/3dx
简化后得到:
σ q 2 ≈ 1 12 N 2 ( ∫ p ( x ) 1 / 3 d x ) 3 \sigma_q^2 \approx \frac{1}{12N^2} \left(\int p(x)^{1/3} dx\right)^3 σq2≈12N21(∫p(x)1/3dx)3
对于 b b b位量化, N = 2 b N = 2^b N=2b,因此:
σ q 2 ≈ 1 12 ⋅ 2 2 b ( ∫ p ( x ) 1 / 3 d x ) 3 \sigma_q^2 \approx \frac{1}{12 \cdot 2^{2b}} \left(\int p(x)^{1/3} dx\right)^3 σq2≈12⋅22b1(∫p(x)1/3dx)3
率失真理论视角
从信息论的率失真理论看,在低位速下,非均匀量化的率失真函数近似为:
D ( R ) ≈ c ⋅ 2 − 2 R ⋅ ( ∫ p ( x ) 1 / 3 d x ) 3 D(R) \approx c \cdot 2^{-2R} \cdot \left( \int p(x)^{1/3} dx \right)^3 D(R)≈c⋅2−2R⋅(∫p(x)1/3dx)3
其中 D D D 是失真, R R R 是位速率, c c c 是常数。这表明自适应量化能够更好地逼近理论最优的率失真界限。
我们可以从率失真理论的角度进一步分析。对于一个信源 X X X,其率失真函数 R ( D ) R(D) R(D)定义为在失真不超过 D D D的条件下,表示该信源所需的最小比特率:
R ( D ) = min p ( x ^ ∣ x ) : E [ d ( X , X ^ ) ] ≤ D I ( X ; X ^ ) R(D) = \min_{p(\hat{x}|x): \mathbb{E}[d(X,\hat{X})]\leq D} I(X;\hat{X}) R(D)=p(x^∣x):E[d(X,X^)]≤DminI(X;X^)
其中 I ( X ; X ^ ) I(X;\hat{X}) I(X;X^)是 X X X和其重构 X ^ \hat{X} X^之间的互信息。在高分辨率量化的假设下,当使用均方误差作为失真度量时,高斯信源的率失真函数为:
R ( D ) = 1 2 log 2 σ X 2 D R(D) = \frac{1}{2}\log_2\frac{\sigma_X^2}{D} R(D)=21log2DσX2
其中 σ X 2 \sigma_X^2 σX2是信源方差。对于非高斯信源,Shannon下界给出了率失真函数的一个近似:
R ( D ) ≥ 1 2 log 2 σ X 2 D − 1 2 log 2 ( 2 π e ) + h ( X ) R(D) \geq \frac{1}{2}\log_2\frac{\sigma_X^2}{D} - \frac{1}{2}\log_2(2\pi e) + h(X) R(D)≥21log2DσX2−21log2(2πe)+h(X)
其中 h ( X ) h(X) h(X)是 X X X的微分熵。对于自适应量化,我们可以将信源分为多个子区间,每个子区间内应用统一量化。当子区间足够小时,每个子区间内的信源可以近似为均匀分布。在这种情况下,总的失真可以表示为:
D = ∑ i = 1 N p i ⋅ Δ i 2 12 D = \sum_{i=1}^{N} p_i \cdot \frac{\Delta_i^2}{12} D=i=1∑Npi⋅12Δi2
其中 p i p_i pi是第 i i i个子区间的概率, Δ i \Delta_i Δi是子区间宽度。在给定总比特率 R R R的情况下,最优的比特分配应满足:
Δ i ∝ 2 − r i \Delta_i \propto 2^{-r_i} Δi∝2−ri
其中 r i r_i ri是分配给第 i i i个子区间的比特率。结合前面的结果,我们有:
Δ i ∝ p i − 1 / 3 ∝ 2 − r i \Delta_i \propto p_i^{-1/3} \propto 2^{-r_i} Δi∝pi−1/3∝2−ri
因此:
r i ∝ 1 3 log 2 p i r_i \propto \frac{1}{3}\log_2 p_i ri∝31log2pi
即比特率应与概率的对数成正比,这正是信息论中的基本原理。总的比特率为:
R = ∑ i = 1 N p i ⋅ r i ∝ 1 3 ∑ i = 1 N p i log 2 p i = − 1 3 H ( p ) R = \sum_{i=1}^{N} p_i \cdot r_i \propto \frac{1}{3}\sum_{i=1}^{N} p_i \log_2 p_i = -\frac{1}{3}H(p) R=i=1∑Npi⋅ri∝31i=1∑Npilog2pi=−31H(p)
其中 H ( p ) H(p) H(p)是离散概率分布 p p p的熵。结合前面的失真表达式,我们可以得到:
D ∝ 2 − 2 R ⋅ ( ∫ p ( x ) 1 / 3 d x ) 3 D \propto 2^{-2R} \cdot \left(\int p(x)^{1/3} dx\right)^3 D∝2−2R⋅(∫p(x)1/3dx)3
这就是自适应量化的率失真特性。