Scalar Quantization(标量量化)是一种将连续的模拟信号转换为离散的数字信号的技术,广泛应用于数字通信、音频处理、图像压缩等领域。其原理如下:
- 原理概述:标量量化是通过把输入信号的取值范围划分成有限个区间,然后将落入每个区间的输入值都映射为一个固定的输出值,这个输出值也被称为量化值或重建值。
-
量化过程
- 划分区间:首先,根据量化器的设计,将输入信号的取值范围划分为若干个互不重叠的子区间,每个子区间称为一个量化间隔。例如,对于一个取值范围在[-1, 1]的信号,可以将其划分为[-1, -0.5)、[-0.5, 0)、[0, 0.5)、[0.5, 1]这4个量化间隔。
- 确定量化值:为每个量化间隔指定一个代表值,即量化值。这个量化值通常是该区间的中点或其他特定值。比如在上述例子中,4个量化间隔的量化值可以分别设为-0.75、-0.25、0.25、0.75。
- 映射量化:当输入信号到来时,判断它落入哪个量化间隔,然后将其映射为该间隔对应的量化值。例如,若输入信号的值为0.3,它落入[0, 0.5)这个量化间隔,那么它将被量化为0.25。
- 量化误差:由于量化过程是将连续的输入值映射为有限个离散的量化值,所以不可避免地会产生误差,这种误差称为量化误差。量化误差的大小取决于量化间隔的大小,量化间隔越小,量化误差就越小,但所需的量化级数和存储量就越大。
-
量化器设计准则:在设计标量量化器时,通常需要考虑两个重要的准则,即最小均方误差准则和最大熵准则。最小均方误差准则是指使量化误差的均方值最小,从而使量化后的信号与原始信号在均方意义下最接近。最大熵准则则是在给定量化级数的情况下,使量化后的信号熵最大,从而保留尽可能多的原始信号信息。
image.png
针对 1024维浮点向量进行Scalar Quantization(8位量化)前后的内存占用对比,分析如下:
1. 原始浮点向量的内存占用
假设原始向量使用 单精度浮点数(float32) 存储(机器学习/信号处理中最常见),每个浮点元素占用 4字节(32位)。
- 总内存 = 维度 × 单元素字节数 = ( 1024 \times 4 = 4096 , \text{字节(4KB)} )。
2. 8位标量量化后的内存占用
“8量化”通常指 每个量化后的值用8位(1字节)表示(如无符号整数0255或有符号整数-128127)。
标量量化对每个维度独立处理,量化后每个元素存储为 1字节的整数(而非浮点)。
- 总内存 = 维度 × 单元素字节数 = ( 1024 \times 1 = 1024 , \text{字节(1KB)} )。
3. 对比结果
| 指标 | 原始浮点向量(float32) | 8位量化后(整数) |
|---|---|---|
| 单元素存储大小 | 4字节 | 1字节 |
| 总内存占用 | 4096字节(4KB) | 1024字节(1KB) |
| 压缩比 | — | 4:1(内存减少75%) |
关键假设与说明
- 浮点类型:假设使用单精度浮点数(float32),若为双精度(float64,8字节/元素),原始内存会翻倍(8KB),量化后仍为1KB,压缩比变为8:1。
- 量化方式:标量量化对每个元素独立量化,量化后的值用8位整数表示(无额外元数据,如缩放因子/偏移量的存储未计入,实际应用中可能需额外存储少量参数,但通常可忽略或分摊到大量数据中)。
- 应用场景:常用于模型量化(如神经网络权重/激活值压缩)、数据存储优化,在精度损失可接受的前提下显著减少内存/计算量。
总结
通过8位标量量化,1024维浮点向量的内存占用从 4KB降至1KB,压缩比为 4:1,大幅节省存储空间和传输带宽。
