神经网络量化与调度技术解析
立即解锁
发布时间: 2025-08-30 01:54:13 阅读量: 5 订阅数: 17 AIGC 

# 神经网络量化与调度技术解析
## 1. 神经网络量化技术
### 1.1 量化过程形式化
量化过程可以形式化为以下步骤:
- 调整阈值:$T_{adj} = clip(\alpha, 0.5, 1) \cdot T_{I}$ (6.13)
- 计算缩放因子:$S_{I} = \frac{2^{n} - 1}{T_{adj}}$ (6.14)
- 量化输入:$I_{q} = \lfloor I \cdot S_{I} \rfloor$ (6.15)
权重的量化过程与之类似。当前的量化方案包含两个不可微函数,即取整和裁剪。它们的导数定义如下:
- 取整函数:$I_{q} = \lfloor I \rfloor$ (6.16)
- 取整函数导数:$\frac{dI_{q}}{dI} = 1$ (6.17)
- 裁剪函数:$X_{c} = clip(X, a, b)$ (6.18)
- 裁剪函数导数:$\frac{dX_{c}}{dX} = \begin{cases} 1, & \text{if } X \in [a, b] \\ 0, & \text{otherwise} \end{cases}$ (6.19)
偏置量化的执行方式与相关方法类似:
$b_{q} = clip(\lfloor S_{i} \cdot S_{w} \cdot b \rfloor, -(2^{31} - 1), 2^{31} - 1)$ (6.20)
### 1.2 非对称阈值训练
之前章节描述的对称阈值量化在某些设备上易于实现,但它对整数可用范围的利用效率低下,显著降低了量化模型的准确性。研究人员有效地为移动设备实现了非对称阈值量化,因此决定将上述训练过程应用于非对称阈值。
非对称阈值的左右边界分别为 $T_{l}$ 和 $T_{r}$。为了方便量化过程,使用左边界和宽度这两个值并对其进行训练。若左边界为 0,则对该值进行缩放无效果,因此引入左边界的偏移量,计算方式如下:
- 范围宽度:$R = T_{r} - T_{l}$ (6.21)
- 调整后的阈值:$T_{adj} = T_{l} + clip(\alpha_{T}, min_{\alpha_{T}}, max_{\alpha_{T}}) \cdot R$ (6.22)
系数 $min_{\alpha_{T}}$ 和 $max_{\alpha_{T}}$ 通过经验设置。对于有符号变量,它们分别为 -0.2 和 0.4;对于无符号变量,分别为 0 和 0.4。范围宽度的选择方式类似,$min_{\alpha_{R}}$ 和 $max_{\alpha_{R}}$ 也是经验值,分别为 0.5 和 1。
- 调整后的范围宽度:$R_{adj} = clip(\alpha_{R}, min_{\alpha_{R}}, max_{\alpha_{R}}) \cdot R$ (6.23)
### 1.3 向量量化
由于权重值范围较大,有时可以使用卷积层不同滤波器的不同阈值,更柔和地执行离散化过程。因此,对于整个卷积层,不再使用单个量化因子(标量量化),而是为每个输出通道使用一组因子(向量量化或逐通道量化)。此过程不会使设备实现复杂化,但能显著提高量化模型的准确性。对于使用深度可分离卷积架构的模型,准确性有显著提升,如 MobileNet - v1 和 MobileNet - v2。
### 1.4 无标签数据训练
大多数与神经网络量化相关的文章使用有标签的数据集来训练离散化阈值或直接训练网络权重。在提出的方法中,建议丢弃训练数据的初始标签,这可显著加快从训练好的非量化网络向量化网络的转换,因为它降低了对训练数据集的要求。同时,建议在应用 softmax 函数之前,优化量化网络和原始网络输出之间的均方根误差(RMSE),同时保持原始网络的参数不变。
总损失函数 $L$ 的计算公式如下:
$L(x; W_{T}, W_{A}) = \alpha H(y, z_{T}) + \beta H(y, z_{A}) + \gamma H(z_{T}, z_{A})$ (6.24)
在本文中,$\alpha$ 和 $\beta$ 等于 0,且:
$H(z_{T}, z_{A}) = \sqrt{\frac{\sum_{i = 1}^{N} (z_{T_{i}} - z_{A_{i}})^{2}}{N}}$ (6.25)
其中:
- $z_{T}$ 是非量化神经网络的输出
- $z_{A}$ 是量化神经网络的输出
- $N$ 是批量大小
- $y$ 是 $x$ 示例的标签
### 1.5 深度可分离卷积量化
在对具有深度可分离卷积层(DWS - 层)的模型进行量化时,发现对于某些模型(如 MobileNet - v2、低分辨率输入图像的 MNasNet),向量量化的准确性远高于标量量化。此外,仅对 DWS - 层使用向量量化而非标量量化,可提高准确性。
与标量量化不同,向量量化分别考虑每个滤波器的权重分布,每个滤波器都有自己的量化阈值。若对值进行重新缩放,使每个滤波器的量化阈值相同,则缩放数据的标量和向量量化过程将等效。
对于某些模型,此方法可能不适用,因为不允许对缩放数据进行任何非线性操作(如 swish、sigmoid 或 tanh 激活函数),也不允许添加具有不同缩放因子的数据。对于特定情况 DWS → [ReLU] → Conv,可以进行数据缩放,此时仅模型的权重发生变化。
### 1.6 MobileNet - V2(带 ReLU6)的权重缩放
上述方法不适用于使用非线性激活函数的模型。在 MobileNet 中,卷积操作之间存在 ReLU6 激活函数($ReLU6(x) = min(max(x, 0), 6)$)。当缩放 DWS - 滤波器的权重时,DWS - 层的输出也会缩放。为保持神经网络推理结果不变,一种方法是修改 ReLU6 函数,使第 $k$ 个通道的饱和阈值等于 $6 \cdot S_{W}[k]$,但这不适用于标量量化技术。
在实践中,对于网络的大量输入数据,DWS - 层某些通道的输出数据 $X_{k}$ 可能小于 6.0。可以对这些通道进行重新缩放,但有一定限制。每个通道的缩放因子必须使通道 $X_{k}$ 的输出数据不超过 6.0。
若 $X_{k} < 6$ 且 $X_{k} \cdot S_{W}[k] < 6$,则:
$min(6, X_{k} \cdot S_{W}[k]) = S_{W}[k] \cdot min(6, X_{k})$ (6.26)
因此:
$ReLU6(X_{k} \cdot S_{W}[k]) = S_{W}[k] \cdot ReLU6(X_{k})$ (6.27)
提出的缩放 DWS - 滤波器权重的方案如下:
1. 找到 DWS - 层每个滤波器权重的最大绝对值。
2. 使用校准数据集,确定 DWS - 层每个通道输出在应用 ReLU6 之前达到的最大值。
3. 将输出值超
0
0
复制全文
相关推荐










