I-ViT: 用于高效视觉Transformer推理的纯整数量化
Li Z, Gu Q. I-vit: Integer-only quantization for efficient vision transformer inference[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2023: 17065-17075.
1. 引言
视觉Transformer(ViTs)在计算机视觉任务中展现出了卓越的性能,但其庞大的内存占用和计算开销严重阻碍了在资源受限的边缘设备上的部署。模型量化作为一种有效的压缩方法,通过降低权重和激活参数的表示精度来提升模型效率。现有的整数推理管线基于卷积神经网络(CNNs)的齐次性条件设计,然而这一条件并不适用于ViTs中的非线性组件,使得ViTs的纯整数推理成为一个亟待解决的开放性问题。
本文提出I-ViT,这是首个专门为ViTs设计的纯整数量化方案。I-ViT使得ViTs能够在整个推理过程中仅使用整数算术和位移操作,完全避免浮点运算。线性操作(如MatMul和Dense)遵循带有二进制算术的整数管线,而非线性操作(如Softmax、GELU和LayerNorm)则通过我们提出的轻量级整数算术方法进行近似。
2. 方法论框架
2.1 整体架构
图1描述 :该图对比了FasterTransformer和I-ViT在处理非线性操作时的计算流程。图1(a)显示FasterTransformer需要在Softmax、GELU和LayerNorm操作前进行反量化(Dequantization)转换到FP32精度,执行浮点运算后再量化回INT8。而图1(b)展示了I-ViT的创新之处——通过Shiftmax、ShiftGELU和I-LayerNorm实现纯整数运算,整个过程保持在INT8精度,避免了浮点运算和精度转换的开销。
ViTs的主体结构是一系列堆叠的块,每个块包含多头自注意力(MSA)模块和多层感知器(MLP)模块:
X ^ = MSA ( LayerNorm ( X ) ) + X \hat{X} = \text{MSA}(\text{LayerNorm}(X)) + X
X ^ = MSA ( LayerNorm ( X ) ) + X
Y = MLP ( LayerNorm ( X ^ ) ) + X ^ Y = \text{MLP}(\text{LayerNorm}(\hat{X})) + \hat{X}
Y = MLP ( LayerNorm ( X ^ ) ) + X ^
MSA模块通过计算全局注意力学习patch间的表示:
MSA ( X ) = Concat ( Attn 1 , Attn 2 , . . . , Attn h ) W O \text{MSA}(X) = \text{Concat}(\text{Attn}_1, \text{Attn}_2, ..., \text{Attn}_h)W^O
MSA ( X ) = Concat ( Attn 1 , Attn 2 , . . . , Attn h ) W O
其中每个注意力头计算为:
Attn i = Softmax ( Q i ⋅ K i T d ) V i \text{Attn}_i = \text{Softmax}\left(\frac{Q_i \cdot K_i^T}{\sqrt{d}}\right)V_i
Attn i = Softmax ( d Q i ⋅ K i T ) V i
这里Q i = X W i Q Q_i = XW_i^Q Q i = X W i Q ,K i = X W i K K_i = XW_i^K K i = X W i K ,V i = X W i V V_i = XW_i^V V i = X W i V 是通过线性投影获得的查询、键和值矩阵。
图3描述 :该图展示了I-ViT的完整计算流程。整个计算图完全使用整数算术实现,其中线性的MatMul和Dense操作遵循二进制算术管线,而提出的Shiftmax、ShiftGELU和I-LayerNorm完成非线性操作。图中清晰标注了数据流的精度:除了特别标记的INT32位置,其余数据流均为INT8精度。重量化(Requantization)步骤通过I A = ( I A ′ ⋅ b ) ≫ c I_A = (I_A' \cdot b) \gg c I A = ( I A ′ ⋅ b ) ≫ c 实现,其中b / 2 c = D N ( S Q ⋅ S K / S A ) b/2^c = DN(S_Q \cdot S_K / S_A) b / 2 c = D N ( S Q ⋅ S K / S A ) 。
2.2 量化方案
我们采用最简单的对称均匀量化:
I = ⌊ clip ( R , − m , m ) S ⌉ , where S = 2 m 2 k − 1 I = \left\lfloor \frac{\text{clip}(R, -m, m)}{S} \right\rceil, \quad \text{where} \quad S = \frac{2m}{2^k - 1}
I = ⌊ S clip ( R , − m , m ) ⌉ , where S = 2 k − 1 2 m
其中R R R 和I I I 分别表示浮点值和量化后的整数值,S S S 是缩放因子,m m m 是通过min-max方法确定的截断值,k k k 是量化位精度,⌊ ⋅ ⌉ \lfloor \cdot \rceil ⌊ ⋅ ⌉ 是舍入操作。
3. 线性操作的二进制算术
对于线性操作,当输入为Q = ( S Q , I Q ) Q = (S_Q, I_Q) Q = ( S Q , I Q ) 和K = ( S K , I K ) K = (S_K, I_K) K = ( S K , I K ) 时,输出计算过程如下:
A ′ = S A ′ ⋅ I A ′ = S Q ⋅ S K ⋅ ( I Q ∗ I K T ) A' = S_{A'} \cdot I_{A'} = S_Q \cdot S_K \cdot (I_Q * I_K^T)
A ′ = S A ′ ⋅ I A ′ = S Q ⋅ S K ⋅ ( I Q ∗ I K T )
其中I A ′ = I Q ∗ I K T I_{A'} = I_Q * I_K^T I A ′ = I Q ∗ I K T 执行纯整数算术。根据实际硬件实现原则(如DP4A),当输入I Q I_Q I Q 和I K I_K I K 为INT8类型时,输出I A ′ I_{A'} I A ′ 为INT32类型。因此需要将I A ′ I_{A'} I A ′ 重量化为INT8类型:
I A = ⌊ S A ′ ⋅ I A ′ S A ⌉ = ⌊ S Q ⋅ S K S A ⋅ ( I Q ∗ I K T ) ⌉ I_A = \left\lfloor \frac{S_{A'} \cdot I_{A'}}{S_A} \right\rceil = \left\lfloor \frac{S_Q \cdot S_K}{S_A} \cdot (I_Q * I_K^T) \right\rceil
I A = ⌊ S A S A ′ ⋅ I A ′ ⌉ = ⌊ S A S Q ⋅ S K ⋅ ( I Q ∗ I K T ) ⌉
为避免浮点运算,将缩放转换为二进制数(Dyadic Number):
D N ( S Q ⋅ S K S A ) = b 2 c DN\left(\frac{S_Q \cdot S_K}{S_A}\right) = \frac{b}{2^c}
D N ( S A S Q ⋅ S K ) = 2 c b
其中b b b 和c c c 都是正整数。这样缩放可以高效地通过整数乘法和位移完成:
I A = ( b ⋅ ( I Q ∗ I K T ) ) ≫ c I_A = (b \cdot (I_Q * I_K^T)) \gg c
I A = ( b ⋅ ( I Q ∗ I K T ) ) ≫ c
4. Shiftmax: 整数化Softmax
4.1 理论推导
Softmax在ViTs中将注意力分数转换为概率:
Softmax ( x i ) = e x i ∑ j = 1 d e x j = e S x i ⋅ I x i ∑ j = 1 d e S x j ⋅ I x j \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^d e^{x_j}} = \frac{e^{S_{x_i} \cdot I_{x_i}}}{\sum_{j=1}^d e^{S_{x_j} \cdot I_{x_j}}}
Softmax ( x i ) = ∑ j = 1 d e x j e x i = ∑ j = 1 d e S x j ⋅ I x j e S x i ⋅ I x i
由于非线性特性,Softmax无法直接遵循二进制算术管线。为解决这个问题,我们首先平滑数据分布并防止溢出:
Softmax ( x i ) = e S Δ i ⋅ I Δ i ∑ j e S Δ j ⋅ I Δ j = e S x i ⋅ ( I x i − I max ) ∑ j e S x j ⋅ ( I x j − I max ) \text{Softmax}(x_i) = \frac{e^{S_{\Delta_i} \cdot I_{\Delta_i}}}{\sum_j e^{S_{\Delta_j} \cdot I_{\Delta_j}}} = \frac{e^{S_{x_i} \cdot (I_{x_i} - I_{\max})}}{\sum_j e^{S_{x_j} \cdot (I_{x_j} - I_{\max})}}
Softmax ( x i ) = ∑ j e S Δ j ⋅ I Δ j e S Δ i ⋅ I Δ i = ∑ j e S x j ⋅ ( I x j − I m a x ) e S x i ⋅ ( I x i − I m a x )
其中I max = max { I x 1 , I x 2 , . . . , I x d } I_{\max} = \max\{I_{x_1}, I_{x_2}, ..., I_{x_d}\} I m a x = max { I x 1 , I x 2 , . . . , I x d } ,I Δ i = I x i − I max ≤ 0 I_{\Delta_i} = I_{x_i} - I_{\max} \leq 0 I Δ i = I x i − I m a x ≤ 0 。
4.2 基数转换与近似
为充分利用硬件移位器,我们将指数基数从e e e 转换为2。由于log 2 e \log_2 e log 2 e 可以近似为二进制( 1.0111 ) b (1.0111)_b ( 1 . 0 1 1 1 ) b ,浮点乘法可通过整数移位实现:
e S Δ ⋅ I Δ = 2 S Δ ⋅ ( I Δ ⋅ log 2 e ) ≈ 2 S Δ ⋅ ( I Δ + ( I Δ ≫ 1 ) − ( I Δ ≫ 4 ) ) e^{S_\Delta \cdot I_\Delta} = 2^{S_\Delta \cdot (I_\Delta \cdot \log_2 e)} \approx 2^{S_\Delta \cdot (I_\Delta + (I_\Delta \gg 1) - (I_\Delta \gg 4))}
e S Δ ⋅ I Δ = 2 S Δ ⋅ ( I Δ ⋅ l o g 2 e ) ≈ 2 S Δ ⋅ ( I Δ + ( I Δ ≫ 1 ) − ( I Δ ≫ 4 ) )
记幂次项为S Δ ⋅ I p S_\Delta \cdot I_p S Δ ⋅ I p ,其中I p = I Δ + ( I Δ ≫ 1 ) − ( I Δ ≫ 4 ) I_p = I_\Delta + (I_\Delta \gg 1) - (I_\Delta \gg 4) I p = I Δ + ( I Δ ≫ 1 ) − ( I Δ ≫ 4 ) 。由于S Δ ⋅ I p S_\Delta \cdot I_p S Δ ⋅ I p 不保证是整数,我们将其分解:
2 S Δ ⋅ I p = 2 ( − q ) + S Δ ⋅ ( − r ) = 2 S Δ ⋅ ( − r ) ≫ q 2^{S_\Delta \cdot I_p} = 2^{(-q) + S_\Delta \cdot (-r)} = 2^{S_\Delta \cdot (-r)} \gg q
2 S Δ ⋅ I p = 2 ( − q ) + S Δ ⋅ ( − r ) = 2 S Δ ⋅ ( − r ) ≫ q
其中S Δ ⋅ ( − r ) ∈ ( − 1 , 0 ] S_\Delta \cdot (-r) \in (-1, 0] S Δ ⋅ ( − r ) ∈ ( − 1 , 0 ] 是小数部分,q q q 和r r r 都是正整数。
4.3 线性近似与整数除法
对于小数部分2 S Δ ⋅ ( − r ) 2^{S_\Delta \cdot (-r)} 2 S Δ ⋅ ( − r ) ,我们使用线性函数近似:
2 S Δ ⋅ ( − r ) ≈ S Δ ⋅ ( − r ) 2 + 1 = S Δ ⋅ [ ( ( − r ) ≫ 1 ) + I 0 ] 2^{S_\Delta \cdot (-r)} \approx \frac{S_\Delta \cdot (-r)}{2} + 1 = S_\Delta \cdot [((-r) \gg 1) + I_0]
2 S Δ ⋅ ( − r ) ≈ 2 S Δ ⋅ ( − r ) + 1 = S Δ ⋅ [ ( ( − r ) ≫ 1 ) + I 0 ]
其中I 0 = ⌊ 1 / S Δ ⌉ I_0 = \lfloor 1/S_\Delta \rceil I 0 = ⌊ 1 / S Δ ⌉ 。完成分子近似后,即S Δ ⋅ I exp ≈ e S Δ ⋅ I Δ S_\Delta \cdot I_{\exp} \approx e^{S_\Delta \cdot I_\Delta} S Δ ⋅ I e x p ≈ e S Δ ⋅ I Δ ,通过分数化简可以去除S Δ S_\Delta S Δ 。最终通过整数除法得到输出:
I o u t i = IntDiv ( I exp i , ∑ j I exp j , k o u t ) = ( ⌊ 2 M ∑ j I exp j ⌋ ⋅ I exp i ) ≫ ( M − ( k o u t − 1 ) ) I_{out_i} = \text{IntDiv}(I_{\exp_i}, \sum_{j} I_{\exp_j}, k_{out}) = \left(\left\lfloor \frac{2^M}{\sum_j I_{\exp_j}} \right\rfloor \cdot I_{\exp_i}\right) \gg (M - (k_{out} - 1))
I o u t i = IntDiv ( I e x p i , j ∑ I e x p j , k o u t ) = ( ⌊ ∑ j I e x p j 2 M ⌋ ⋅ I e x p i ) ≫ ( M − ( k o u t − 1 ) )
S o u t i = 1 / 2 k o u t − 1 S_{out_i} = 1/2^{k_{out}-1}
S o u t i = 1 / 2 k o u t − 1
5. ShiftGELU: 整数化GELU
5.1 GELU近似
GELU激活函数可以通过sigmoid函数近似:
GELU ( x ) = x ⋅ 1 2 π ∫ − ∞ x e − t 2 / 2 d t ≈ x ⋅ σ ( 1.702 x ) = S x ⋅ I x ⋅ σ ( S x ⋅ 1.702 I x ) \text{GELU}(x) = x \cdot \frac{1}{\sqrt{2\pi}} \int_{-\infty}^x e^{-t^2/2}dt \approx x \cdot \sigma(1.702x) = S_x \cdot I_x \cdot \sigma(S_x \cdot 1.702I_x)
GELU ( x ) = x ⋅ 2 π 1 ∫ − ∞ x e − t 2 / 2 d t ≈ x ⋅ σ ( 1 . 7 0 2 x ) = S x ⋅ I x ⋅ σ ( S x ⋅ 1 . 7 0 2 I x )
首先,1.702可以近似为二进制( 1.1011 ) b (1.1011)_b ( 1 . 1 0 1 1 ) b ,因此1.702 I x 1.702I_x 1 . 7 0 2 I x 可通过整数移位实现:
I p = I x + ( I x ≫ 1 ) + ( I x ≫ 3 ) + ( I x ≫ 4 ) I_p = I_x + (I_x \gg 1) + (I_x \gg 3) + (I_x \gg 4)
I p = I x + ( I x ≫ 1 ) + ( I x ≫ 3 ) + ( I x ≫ 4 )
5.2 Sigmoid的整数化
我们等价变换sigmoid函数:
σ ( S x ⋅ I p ) = 1 1 + e − S x ⋅ I p = e S x ⋅ I p e S x ⋅ I p + 1 \sigma(S_x \cdot I_p) = \frac{1}{1 + e^{-S_x \cdot I_p}} = \frac{e^{S_x \cdot I_p}}{e^{S_x \cdot I_p} + 1}
σ ( S x ⋅ I p ) = 1 + e − S x ⋅ I p 1 = e S x ⋅ I p + 1 e S x ⋅ I p
进一步变换得到:
σ ( S x ⋅ I p ) = e S x ⋅ ( I p − I max ) e S x ⋅ ( I p − I max ) + e S x ⋅ ( − I max ) \sigma(S_x \cdot I_p) = \frac{e^{S_x \cdot (I_p - I_{\max})}}{e^{S_x \cdot (I_p - I_{\max})} + e^{S_x \cdot (-I_{\max})}}
σ ( S x ⋅ I p ) = e S x ⋅ ( I p − I m a x ) + e S x ⋅ ( − I m a x ) e S x ⋅ ( I p − I m a x )
这里分子与Shiftmax中的分子形式完全相同,因此两者实现一致。完成整数除法后,再乘以S x ⋅ I x S_x \cdot I_x S x ⋅ I x 即得到GELU的整数近似。
6. I-LayerNorm: 整数化层归一化
LayerNorm在隐藏特征维度上归一化输入:
LayerNorm ( x ) = x − Mean ( x ) Var ( x ) ⋅ γ + β \text{LayerNorm}(x) = \frac{x - \text{Mean}(x)}{\sqrt{\text{Var}(x)}} \cdot \gamma + \beta
LayerNorm ( x ) = Var ( x ) x − Mean ( x ) ⋅ γ + β
其中γ \gamma γ 和β \beta β 是线性仿射因子。与BatchNorm不同,LayerNorm需要在推理阶段动态计算统计量。虽然整数算术单元可以直接计算均值和方差,但不支持平方根运算。
我们通过位移改进了轻量级整数迭代方法:
I i + 1 = I i + ⌊ Var ( I x ) / I i ⌋ 2 = ( I i + ⌊ Var ( x ) / I i ⌋ ) ≫ 1 I_{i+1} = \frac{I_i + \lfloor \text{Var}(I_x)/I_i \rfloor}{2} = (I_i + \lfloor \text{Var}(x)/I_i \rfloor) \gg 1
I i + 1 = 2 I i + ⌊ Var ( I x ) / I i ⌋ = ( I i + ⌊ Var ( x ) / I i ⌋ ) ≫ 1
其中I i I_i I i 是第i i i 次迭代的结果,I 0 I_0 I 0 初始化为2 ⌊ bit ( Var ( I x ) ) / 2 ⌋ 2^{\lfloor \text{bit}(\text{Var}(I_x))/2 \rfloor} 2 ⌊ bit ( Var ( I x ) ) / 2 ⌋ 。朴素的停止准则是I i + 1 ≥ I i I_{i+1} \geq I_i I i + 1 ≥ I i ,但这无法保证恒定延迟。实验发现10次迭代可实现大部分收敛,因此我们将停止准则修改为迭代次数以便于硬件实现。
7. 实验结果与分析
7.1 准确率评估
图2描述 :该图展示了I-ViT和FP基线在DeiT和Swin模型上的准确率-速度曲线。横轴表示每秒处理的图像数(Images/s),纵轴表示Top-1准确率(%)。可以看到,整数化的DeiT和Swin(实线)相比FP基线(虚线)在保持相似甚至略高准确率的同时,实现了3.72~4.11倍的显著加速。这充分证明了I-ViT在精度和速度之间取得了优秀的平衡。
表1展示了详细的准确率和延迟结果。I-ViT在各种模型上都保持了与FP32基线相当的准确率。例如,DeiT-S通过I-ViT量化后达到80.12%的Top-1准确率,比FP32基线(79.85%)还高0.27%。相比之下,FasterTransformer由于保留了浮点运算,加速效果有限(仅3.53倍);I-BERT由于近似不匹配,准确率下降明显(-0.74%)。
7.2 延迟评估
图4描述 :该图展示了DeiT-S在不同批大小(8、16、32、64)下的延迟结果。纵轴使用对数刻度表示延迟(ms)。可以观察到,I-ViT(紫色柱)在所有批大小下都保持了相对于基线(蓝色柱)、FasterTransformer(橙色柱)和I-BERT(绿色柱)的恒定加速比例。这表明I-ViT对批大小具有良好的鲁棒性,能够在不同的部署场景下保持稳定的加速效果。
硬件实现细节:我们使用TVM在RTX 2080Ti GPU上部署I-ViT。尽管GPU不是纯整数硬件,但依靠DP4A指令,I-ViT可以在Turing Tensor Cores上执行高效的纯整数推理。值得注意的是,TVM的软件支持和Turing Tensor Cores的硬件支持并非最优——批大小增加时并未实现完全并行化。因此,在专用硬件(如FPGA)上部署I-ViT将进一步提升加速潜力。
7.3 消融研究
表2的消融研究揭示了各组件的重要性。将Shiftmax和ShiftGELU替换为I-BERT的二阶多项式近似会导致准确率下降和延迟增加。在DeiT-B上,多项式GELU导致0.86%的准确率损失和0.17ms的延迟增加。这是因为多项式GELU仅对特定区间进行近似,不适用于ViTs的全定义域。
使用L1 LayerNorm虽然略微减少了延迟(-0.02ms),但导致了严重的准确率下降(DeiT-B上-2.49%,Swin-S上-3.32%)。这说明我们提出的I-LayerNorm在保持准确率方面的重要性。
LIS(Log-Int-Softmax)方法基于I-BERT并添加了对数函数,但同样遇到了数据分布不匹配的问题,准确率和延迟表现都不如Shiftmax。
8. 结论
I-ViT首次实现了ViTs的完整计算图量化,使整个推理过程仅需整数运算和位移操作,完全避免了浮点运算。通过提出的Shiftmax、ShiftGELU和I-LayerNorm,非线性操作得以高效地用整数算术实现。实验结果表明,I-ViT在保持甚至略微提升准确率的同时,实现了3.72~4.11倍的推理加速,为ViTs在资源受限设备上的部署提供了实用的解决方案。
附录:数学推导
A. Shiftmax完整推导
A.1 指数函数的二进制近似
从指数函数的换底公式开始:
e x = 2 x ⋅ log 2 e e^x = 2^{x \cdot \log_2 e}
e x = 2 x ⋅ l o g 2 e
其中log 2 e = 1.4426950408889... \log_2 e = 1.4426950408889... log 2 e = 1 . 4 4 2 6 9 5 0 4 0 8 8 8 9 . . . 。为了使用整数运算,我们需要找到log 2 e \log_2 e log 2 e 的二进制近似。通过分析:
log 2 e ≈ 1 + 1 2 − 1 16 = 1.4375 \log_2 e \approx 1 + \frac{1}{2} - \frac{1}{16} = 1.4375
log 2 e ≈ 1 + 2 1 − 1 6 1 = 1 . 4 3 7 5
误差为∣ 1.4426950408889 − 1.4375 ∣ = 0.0051950408889 < 0.006 |1.4426950408889 - 1.4375| = 0.0051950408889 < 0.006 ∣ 1 . 4 4 2 6 9 5 0 4 0 8 8 8 9 − 1 . 4 3 7 5 ∣ = 0 . 0 0 5 1 9 5 0 4 0 8 8 8 9 < 0 . 0 0 6 ,相对误差小于0.4%。
因此:
e S Δ ⋅ I Δ ≈ 2 S Δ ⋅ I Δ ⋅ ( 1 + 1 / 2 − 1 / 16 ) = 2 S Δ ⋅ ( I Δ + I Δ / 2 − I Δ / 16 ) e^{S_\Delta \cdot I_\Delta} \approx 2^{S_\Delta \cdot I_\Delta \cdot (1 + 1/2 - 1/16)} = 2^{S_\Delta \cdot (I_\Delta + I_\Delta/2 - I_\Delta/16)}
e S Δ ⋅ I Δ ≈ 2 S Δ ⋅ I Δ ⋅ ( 1 + 1 / 2 − 1 / 1 6 ) = 2 S Δ ⋅ ( I Δ + I Δ / 2 − I Δ / 1 6 )
用位移表示:
I p = I Δ + ( I Δ ≫ 1 ) − ( I Δ ≫ 4 ) I_p = I_\Delta + (I_\Delta \gg 1) - (I_\Delta \gg 4)
I p = I Δ + ( I Δ ≫ 1 ) − ( I Δ ≫ 4 )
A.2 幂次分解的数学基础
对于2 S Δ ⋅ I p 2^{S_\Delta \cdot I_p} 2 S Δ ⋅ I p ,其中S Δ ⋅ I p S_\Delta \cdot I_p S Δ ⋅ I p 不是整数,我们需要分解为整数和小数部分。设:
S Δ ⋅ I p = − q + f S_\Delta \cdot I_p = -q + f
S Δ ⋅ I p = − q + f
其中q = ⌊ − S Δ ⋅ I p ⌋ q = \lfloor -S_\Delta \cdot I_p \rfloor q = ⌊ − S Δ ⋅ I p ⌋ 是正整数(因为I p ≤ 0 I_p \leq 0 I p ≤ 0 ),f ∈ [ 0 , 1 ) f \in [0, 1) f ∈ [ 0 , 1 ) 是小数部分。
为了计算方便,我们重新参数化:
S Δ ⋅ I p = − q + S Δ ⋅ ( − r ) S_\Delta \cdot I_p = -q + S_\Delta \cdot (-r)
S Δ ⋅ I p = − q + S Δ ⋅ ( − r )
其中r = − f / S Δ r = -f/S_\Delta r = − f / S Δ ,满足S Δ ⋅ ( − r ) ∈ ( − 1 , 0 ] S_\Delta \cdot (-r) \in (-1, 0] S Δ ⋅ ( − r ) ∈ ( − 1 , 0 ] 。
因此:
2 S Δ ⋅ I p = 2 − q ⋅ 2 S Δ ⋅ ( − r ) = 2 S Δ ⋅ ( − r ) 2 q 2^{S_\Delta \cdot I_p} = 2^{-q} \cdot 2^{S_\Delta \cdot (-r)} = \frac{2^{S_\Delta \cdot (-r)}}{2^q}
2 S Δ ⋅ I p = 2 − q ⋅ 2 S Δ ⋅ ( − r ) = 2 q 2 S Δ ⋅ ( − r )
A.3 小数幂次的Taylor展开
对于2 S Δ ⋅ ( − r ) 2^{S_\Delta \cdot (-r)} 2 S Δ ⋅ ( − r ) ,其中S Δ ⋅ ( − r ) ∈ ( − 1 , 0 ] S_\Delta \cdot (-r) \in (-1, 0] S Δ ⋅ ( − r ) ∈ ( − 1 , 0 ] ,使用Taylor展开:
2 x = 1 + x ln 2 + ( x ln 2 ) 2 2 ! + ( x ln 2 ) 3 3 ! + . . . 2^x = 1 + x\ln 2 + \frac{(x\ln 2)^2}{2!} + \frac{(x\ln 2)^3}{3!} + ...
2 x = 1 + x ln 2 + 2 ! ( x ln 2 ) 2 + 3 ! ( x ln 2 ) 3 + . . .
对于x ∈ ( − 1 , 0 ] x \in (-1, 0] x ∈ ( − 1 , 0 ] ,保留前两项:
2 x ≈ 1 + x ln 2 = 1 + 0.693147 x 2^x \approx 1 + x\ln 2 = 1 + 0.693147x
2 x ≈ 1 + x ln 2 = 1 + 0 . 6 9 3 1 4 7 x
为了使用整数运算,我们近似ln 2 ≈ 1 / 2 \ln 2 \approx 1/2 ln 2 ≈ 1 / 2 (误差约为27.7%,但在小区间内可接受):
2 S Δ ⋅ ( − r ) ≈ 1 + S Δ ⋅ ( − r ) 2 2^{S_\Delta \cdot (-r)} \approx 1 + \frac{S_\Delta \cdot (-r)}{2}
2 S Δ ⋅ ( − r ) ≈ 1 + 2 S Δ ⋅ ( − r )
重新整理:
2 S Δ ⋅ ( − r ) ≈ S Δ ⋅ [ ( − r ) 2 + 1 S Δ ] = S Δ ⋅ [ ( ( − r ) ≫ 1 ) + I 0 ] 2^{S_\Delta \cdot (-r)} \approx S_\Delta \cdot \left[\frac{(-r)}{2} + \frac{1}{S_\Delta}\right] = S_\Delta \cdot [((-r) \gg 1) + I_0]
2 S Δ ⋅ ( − r ) ≈ S Δ ⋅ [ 2 ( − r ) + S Δ 1 ] = S Δ ⋅ [ ( ( − r ) ≫ 1 ) + I 0 ]
其中I 0 = ⌊ 1 / S Δ ⌉ I_0 = \lfloor 1/S_\Delta \rceil I 0 = ⌊ 1 / S Δ ⌉ 。
B. ShiftGELU的Sigmoid推导
B.1 Sigmoid函数的等价变换
从sigmoid函数的定义开始:
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}}
σ ( x ) = 1 + e − x 1
分子分母同时乘以e x e^x e x :
σ ( x ) = e x e x + 1 \sigma(x) = \frac{e^x}{e^x + 1}
σ ( x ) = e x + 1 e x
为了防止溢出,引入偏移量x max x_{\max} x m a x :
σ ( x ) = e x − x max e x − x max + e − x max \sigma(x) = \frac{e^{x-x_{\max}}}{e^{x-x_{\max}} + e^{-x_{\max}}}
σ ( x ) = e x − x m a x + e − x m a x e x − x m a x
这个形式的分子与Softmax中单个元素的分子完全相同,可以复用Shiftmax的实现。
B.2 GELU近似的误差分析
GELU的精确定义:
GELU ( x ) = x ⋅ Φ ( x ) = x ⋅ 1 2 π ∫ − ∞ x e − t 2 / 2 d t \text{GELU}(x) = x \cdot \Phi(x) = x \cdot \frac{1}{\sqrt{2\pi}} \int_{-\infty}^x e^{-t^2/2}dt
GELU ( x ) = x ⋅ Φ ( x ) = x ⋅ 2 π 1 ∫ − ∞ x e − t 2 / 2 d t
使用sigmoid近似:
GELU ( x ) ≈ x ⋅ σ ( α x ) \text{GELU}(x) \approx x \cdot \sigma(\alpha x)
GELU ( x ) ≈ x ⋅ σ ( α x )
其中α = 2 / π ⋅ exp ( 1 / π ) ≈ 1.702 \alpha = \sqrt{2/\pi} \cdot \text{exp}(1/\pi) \approx 1.702 α = 2 / π ⋅ exp ( 1 / π ) ≈ 1 . 7 0 2 。
这个近似的最大绝对误差约为0.02,相对误差在∣ x ∣ < 3 |x| < 3 ∣ x ∣ < 3 的范围内小于2%。
C. I-LayerNorm的收敛性分析
C.1 Newton-Raphson方法
求平方根v \sqrt{v} v 等价于求解方程f ( x ) = x 2 − v = 0 f(x) = x^2 - v = 0 f ( x ) = x 2 − v = 0 。
Newton-Raphson迭代公式:
x i + 1 = x i − f ( x i ) f ′ ( x i ) = x i − x i 2 − v 2 x i = x i + v / x i 2 x_{i+1} = x_i - \frac{f(x_i)}{f'(x_i)} = x_i - \frac{x_i^2 - v}{2x_i} = \frac{x_i + v/x_i}{2}
x i + 1 = x i − f ′ ( x i ) f ( x i ) = x i − 2 x i x i 2 − v = 2 x i + v / x i
这正是我们使用的迭代公式。
C.2 收敛速度
Newton-Raphson方法具有二次收敛性。设ϵ i = ∣ x i − v ∣ \epsilon_i = |x_i - \sqrt{v}| ϵ i = ∣ x i − v ∣ 是第i i i 次迭代的误差,则:
ϵ i + 1 ≤ ϵ i 2 2 v \epsilon_{i+1} \leq \frac{\epsilon_i^2}{2\sqrt{v}}
ϵ i + 1 ≤ 2 v ϵ i 2
这意味着每次迭代误差的有效数字位数大约翻倍。
C.3 初始值选择
我们选择I 0 = 2 ⌊ bit ( Var ( I x ) ) / 2 ⌋ I_0 = 2^{\lfloor \text{bit}(\text{Var}(I_x))/2 \rfloor} I 0 = 2 ⌊ bit ( Var ( I x ) ) / 2 ⌋ 作为初始值。这保证了:
Var ( I x ) 2 ≤ I 0 ≤ 2 Var ( I x ) \frac{\sqrt{\text{Var}(I_x)}}{2} \leq I_0 \leq 2\sqrt{\text{Var}(I_x)}
2 Var ( I x ) ≤ I 0 ≤ 2 Var ( I x )
初始相对误差最多为2倍,经过10次迭代后,相对误差小于2 − 1024 2^{-1024} 2 − 1 0 2 4 ,远超过INT8精度要求。
D. 量化误差分析
D.1 量化噪声模型
均匀量化引入的噪声可以建模为:
e = R − S ⋅ I e = R - S \cdot I
e = R − S ⋅ I
其中e e e 近似服从均匀分布U ( − S / 2 , S / 2 ) U(-S/2, S/2) U ( − S / 2 , S / 2 ) 。
量化噪声的方差:
Var ( e ) = S 2 12 \text{Var}(e) = \frac{S^2}{12}
Var ( e ) = 1 2 S 2
D.2 误差传播
对于线性操作Y = W X Y = WX Y = W X ,量化误差传播为:
e Y = W ⋅ e X + e W ⋅ X + e W ⋅ e X e_Y = W \cdot e_X + e_W \cdot X + e_W \cdot e_X
e Y = W ⋅ e X + e W ⋅ X + e W ⋅ e X
忽略二阶项e W ⋅ e X e_W \cdot e_X e W ⋅ e X ,误差方差:
Var ( e Y ) ≈ ∥ W ∥ F 2 ⋅ Var ( e X ) + ∥ X ∥ F 2 ⋅ Var ( e W ) \text{Var}(e_Y) \approx \|W\|_F^2 \cdot \text{Var}(e_X) + \|X\|_F^2 \cdot \text{Var}(e_W)
Var ( e Y ) ≈ ∥ W ∥ F 2 ⋅ Var ( e X ) + ∥ X ∥ F 2 ⋅ Var ( e W )
这表明误差随层数线性累积,但通过合理的缩放因子选择可以控制在可接受范围内。
评论(0)