# 1. BitNet(1.58‑bit)体系
Q1:BitNet 是什么?为什么叫 1.58‑bit?
✔ BitNet 权重只有 3 个值:
$$ {-1,\ 0,\ +1} $$✔ 表示 3 个状态所需的最小信息量:
$$ \log_2(3) = 1.58496 $$所以叫 1.58‑bit(理论值)。
实际存储用 2-bit + 压缩 达到平均 1.58-bit。
Q2:BitNet 的激活是什么格式?
激活也是 ternary(−1, 0, +1)。
Q3:BitNet 的训练方式是什么?
必须使用:
- FP32 shadow weights
- ternary quantization
- STE(Straight‑Through Estimator)
- 特殊初始化
- 特殊正则(鼓励权重靠近 −1/0/+1)
- 特殊优化器
- 特殊激活函数
不能直接量化 FP16 模型得到 BitNet。
Q4:BitNet 的推理框架(bitnet.cpp)能训练吗?
不能。
bitnet.cpp 只负责推理,不包含训练代码。
Q5:BitNet 的优点是什么?
- 推理速度极快(CPU 上可达 2–6×)
- 能耗降低 55–82%
- 权重和激活都可用查表 / bitwise 实现
- 理论上可在 CPU 上跑超大模型(100B)
Q6:BitNet 的缺点是什么?
- 训练极难
- 表达能力弱
- 需要大量工程技巧
- 目前没有高质量的大模型(7B/13B/70B)成功训练
- 第三方模型质量明显低于 FP16
# 2. STE(Straight‑Through Estimator)
Q1:为什么量化需要 STE?
量化函数是分段常数:
$$ Q(w) = {-1,0,+1} $$几乎处处不可导 → 梯度断掉。
Q2:STE 的核心思想是什么?
前向用量化,反向假装没量化。
前向:
$$ y = Q(w) \cdot x $$反向:
$$ \frac{\partial L}{\partial w} \approx \frac{\partial L}{\partial y} \cdot x $$Q3:BitNet 中常用的 STE 形式?
$$ \frac{\partial L}{\partial w} = \frac{\partial L}{\partial w_q} \cdot \mathbf{1}_{|w| \le \alpha} $$- 小权重允许梯度通过
- 大权重截断梯度
# 3. FP16 vs 低比特模型(质量差异)
Q1:同样训练数据量下,BitNet vs FP16 差多少?
BitNet ≈ FP16 的 60–80%。
- 语言理解:70–85%
- 数学/逻辑:50–70%
- 长上下文:60–80%
Q2:为什么低比特模型质量下降?
- 表达能力弱
- 量化噪声大
- 梯度不稳定
- 激活分布不均匀
- Transformer 深度放大误差
Q3:FP16 → INT4 / INT2 / 1.58‑bit 的可用性?
| 格式 | 可用性 | 备注 |
|---|---|---|
| FP16 | 完美 | 基准 |
| INT8 | 无损 | 最稳定 |
| INT4 | 可用 | GPTQ/AWQ |
| INT3 | 不可用 | 误差大 |
| INT2 | 崩溃 | 表达能力不足 |
| 1.58‑bit | 只能从头训练 | BitNet |
# 4. INT4 量化(基础)
Q1:FP16 → INT4 的基本量化公式?
$$ \text{scale} = \frac{\max(|W|)}{7} ] [ W_{int4} = \text{round}(W / \text{scale}) ] [ W_{\text{dequant}} = W_{int4} \cdot \text{scale} $$Q2:FP16 → INT4 的例子?
原始:
$$
0.0, 0.5, -1.2, 3.0, -4.0
$$
INT4:
$$
0, 1, -2, 5, -7
$$
反量化:
$$
0.0, 0.5714, -1.1428, 2.857, -4.0
$$
误差小,可用。
Q3:同样例子用 INT3 会怎样?
INT3:
$$
0, 1, -1, 3, -4
$$
误差明显更大(如 0.5 → 1.0)。
# 5. GPTQ(权重敏感性量化)
Q1:GPTQ 是什么?
逐列量化 + Hessian 近似 + 误差补偿
不是简单的 scale + round。
Q2:GPTQ 的核心步骤?
- 逐列量化
- 计算 Hessian 近似
- 量化顺序从“不重要权重”开始
- 每量化一个权重就补偿误差
Q3:GPTQ 的优点?
- INT4 质量高
- 数学/逻辑能力保留较好
- 适合 7B–13B 模型
# 6. AWQ(激活敏感性量化)
Q1:AWQ 的核心思想?
保护重要激活通道,而不是保护权重。
Q2:激活敏感性分析是什么?
计算每个通道的重要性:
$$ \text{importance}(c) = \mathbb{E}(|A_c|) $$或:
$$ \mathbb{E}(|A_c| \cdot |W_c|) $$Q3:AWQ 的量化策略?
- 重要通道 → 大 scale(高精度)
- 不重要通道 → 小 scale(激进量化)
Q4:AWQ vs GPTQ?
| 项目 | GPTQ | AWQ |
|---|---|---|
| 关注点 | 权重 | 激活 |
| 误差处理 | Hessian | 激活敏感性 |
| 稳定性 | 中 | 高(尤其大模型) |
| 适用模型 | 7B–13B | 30B–70B+ |
# 7. SmoothQuant(激活平滑)
Q1:SmoothQuant 是什么?
把激活的峰值“平滑”掉,让激活更容易量化。
Q2:核心公式?
$$ X' = X \cdot s,\quad W' = W / s $$数学等价,不改变模型行为。
Q3:SmoothQuant 的作用?
- 激活分布更平滑
- INT8/INT4 激活量化更稳定
- 常与 GPTQ/AWQ 组合使用
# 8. 量化可行性总结(最重要)
Q:LLM 最低可用量化是多少 bit?
INT4 是最低实用 bit。
| 格式 | 可用性 | 备注 |
|---|---|---|
| FP16 | 完美 | 训练/推理 |
| INT8 | 无损 | 最稳定 |
| INT4 | 可用 | GPTQ/AWQ |
| INT3 | 不可用 | 误差大 |
| INT2 | 崩溃 | 表达能力不足 |
| 1.58‑bit | 只能从头训练 | BitNet |
# 9. BitNet vs INT4(本质区别)
| 项目 | BitNet | INT4 |
|---|---|---|
| 权重值 | {-1,0,+1} | 16 个值 |
| 激活 | ternary | FP16/INT8 |
| 训练方式 | 必须从头训练 | 可 PTQ/QAT |
| 推理速度 | 极快 | 中等 |
| 质量 | 低 | 中高 |
# 10. 工程实践建议
Q:如果我想量化 LLM,应该怎么选?
- 追求质量 → INT8 / INT4(GPTQ/AWQ)
- 追求速度 / 能耗 → BitNet(但训练难)
- 不能接受质量下降 → FP16
- 不能训练 → 不要碰 1.58‑bit / INT2
# 📌 完整笔记结束
如果你愿意,我可以继续为你:
- 画一张 量化技术路线图(FP16 → INT8 → INT4 → INT2 → 1.58‑bit)
- 做一张 GPTQ / AWQ / SmoothQuant 的对比图(更详细)
- 或者把这份笔记进一步扩展成 可打印 PDF 结构图
