#模型压缩与轻量化专项强化题库(第十三批:剪枝、稀疏化与知识蒸馏)

#一、高频问题速览

编号 问题 核心考点
257 大模型剪枝有哪些类型?结构化 vs 非结构化有何优劣? 剪枝类型、稀疏性、硬件友好性
258 什么是 Lottery Ticket Hypothesis?对剪枝有何启示? LTH、子网络、初始化重要性
259 magnitude-based 剪枝的局限是什么?如何改进? 剪枝准则、敏感度分析、gradual pruning
260 知识蒸馏中,软标签相比硬标签有何优势?温度系数作用? KD、软标签、温度、暗知识
261 大模型的知识蒸馏有哪些挑战?如何让小学生学好? 容量差距、中间层蒸馏、特征对齐
262 什么是动态推理/早退?如何根据输入调整计算量? Early Exit、动态深度、输入自适应
263 稀疏注意力有哪些实现形式?如何平衡稀疏与效果? Sparse Attention、Longformer、BigBird
264 量化感知训练 (QAT) 相比 PTQ 有何优劣? QAT、PTQ、训练成本、精度恢复
265 模型压缩的「不可能三角」是什么?如何权衡? 精度、速度、通用性权衡
266 LLM.int8()、GPTQ、AWQ、GGUF 等量化方案的核心差异? 量化粒度、分组、激活感知

#二、逐题详细解答

#257. 大模型剪枝有哪些类型?结构化 vs 非结构化有何优劣?

#知识点

  • 结构化剪枝(整头/整层)
  • 非结构化剪枝(单个权重)
  • 稀疏性、硬件友好性
  • 正则化、重训练

#详细解答

剪枝类型

  1. 非结构化剪枝(Unstructured Pruning)
    • 剪掉单个权重,把矩阵变成稀疏矩阵(大量 0)。
    • 可以剪掉 80-90% 参数而不掉太多精度(如 Optimal Brain Damage、magnitude pruning)。
    • 缺点:稀疏矩阵需要特殊硬件/库(如 cuSPARSE)才能加速,通用加速器(GPU/TPU)不友好。
  1. 结构化剪枝(Structured Pruning)
    • 剪掉整个结构单元:注意力头、FFN 神经元、甚至整层。
    • 结果仍是密集矩阵,只是维度变小,可直接用标准 BLAS 加速。
    • 缺点:同样压缩比下,精度损失通常比非结构化大。

半结构化剪枝: 如 2:4 稀疏(每 4 个元素保留 2 个),NVIDIA Ampere 及以上 GPU 有专门硬件支持,兼顾稀疏性和硬件效率。

#258. 什么是 Lottery Ticket Hypothesis?对剪枝有何启示?

#知识点

  • LTH (Lottery Ticket Hypothesis)
  • 子网络、winning ticket
  • 初始化重要性
  • 训练效率

#详细解答

Lottery Ticket Hypothesis(彩票假说)是 Frankle & Carlin 2019 年提出的:一个随机初始化的密集网络包含一个子网络(winning ticket),如果单独训练这个子网络(保持原初始化),可以达到甚至超过原网络的性能,且训练更快。

发现过程

  1. 随机初始化并训练一个大网络。
  2. 剪枝掉小权重,得到 mask。
  3. 关键:把剩余权重重置回初始值(而非保留训练后的值)。
  4. 用这个子网络重新训练,发现性能很好。

对剪枝的启示

  • 初始化重要:不是所有随机初始化都能挖出 winning ticket,需要"运气好"的初始化。
  • 重训练策略:剪枝后重训练时,用原初始化而非训练后权重往往更好(避免训练后期的"锁定")。
  • 高效训练:如果能先找到 winning ticket,后续训练可以大幅加速。

#259. Magnitude-based 剪枝的局限是什么?如何改进?

#知识点

  • 幅度剪枝、一阶/二阶方法
  • 敏感度分析
  • 渐进式剪枝
  • 重要性重估计

#详细解答

Magnitude-based 剪枝(剪掉绝对值小的权重)是最简单的剪枝策略,但有明显局限:

  1. 忽视权重交互:单独看权重小不代表不重要,可能与其他权重协同作用。
  2. 层间不平衡:不同层对剪枝敏感度不同,统一阈值会过度剪掉敏感层或放过冗余层。
  3. 忽视激活:没考虑该权重在实际输入上的激活频率(dead weight 即使大也可以剪)。

改进方向

  1. 二阶方法(OBD、OBS):用 Hessian 矩阵估计权重对损失的影响,剪掉"影响小"的而非"绝对值小"的。
  1. 敏感度分析:逐层评估剪枝对精度的影响,设置层相关阈值。
  1. 渐进式剪枝(Iterative/Gradual Pruning)
    • 不一次性剪掉,而是训练过程中逐渐增加稀疏度。
    • target_sparsity = target * (1 - (1 - t/T)^3),让网络有适应过程。
  1. 激活感知:结合权重大小和激活频率(如 SNIP、GraSP),剪掉"不怎么被激活"的权重。

#260. 知识蒸馏中,软标签相比硬标签有何优势?温度系数作用?

#知识点

  • 软标签(Soft Target)
  • 暗知识(Dark Knowledge)
  • 温度系数 τ
  • KL 散度损失

#详细解答

硬标签 vs 软标签

  • 硬标签:one-hot(如 [0,0,1,0]),只告诉学生"正确答案是 C"。
  • 软标签:教师模型的 softmax 输出(如 [0.1, 0.2, 0.6, 0.1]),包含更多信息:
    • A 和 B 也有一定可能性;
    • C 和 D 虽然都是错的,但 C 比 D 更接近正确。

这种"错误选项间的相对关系"就是 Dark Knowledge(暗知识),体现了教师模型的泛化能力。

温度系数 τ

带温度的 softmax:

softmax(x_i / τ) = exp(x_i/τ) / Σ exp(x_j/τ)
  • τ → 0:趋向 argmax,接近硬标签。
  • τ → ∞:趋向均匀分布。
  • τ > 1:软化概率分布,让小的 logit 差异也能被学生感知。

通常先高温(τ=2~5)训练,再降温到 τ=1 微调,兼顾暗知识学习和最终精度。

#261. 大模型的知识蒸馏有哪些挑战?如何让小学生学好?

#知识点

  • 容量差距(Capacity Gap)
  • 中间层蒸馏(Hidden State KD)
  • 注意力蒸馏
  • 多教师蒸馏

#详细解答

大模型蒸馏的挑战

  1. 容量差距:教师(175B)与学生(7B)差距过大,学生根本"学不会"教师的复杂决策边界。
  1. 任务差异:教师可能在某些子任务上表现极好,学生完全没能力模仿。
  1. 蒸馏效率:大模型前向成本高,为蒸馏大量生成软标签很昂贵。

解决策略

  1. 中间层蒸馏
    • 不只蒸馏最终输出,还让学生模仿教师的隐藏状态、注意力图。
    • 如 MiniLLM、TinyBERT:引入 transformer 层间的 MSE loss。
    • 需要教师和学生层维度对齐(或通过投影层对齐)。
  1. 助教模型(Teacher Assistant)
    • 不直接大→小,而是大→中→小,逐步蒸馏。
  1. 数据增强/筛选
    • 用教师模型筛选"高质量、有信息增益"的样本蒸馏,而非随机采样。
    • 如使用教师模型的置信度或困惑度筛选。
  1. 多教师集成
    • 多个 specialized 教师的软标签加权,让学生学到更全面的分布。

#262. 什么是动态推理/早退?如何根据输入调整计算量?

#知识点

  • Early Exit
  • 动态深度
  • 置信度阈值
  • 输入自适应计算

#详细解答

动态推理核心思想:不是所有输入都需要完整模型的计算量。简单样本可以用浅层解决,只有难样本需要深层。

Early Exit(早退)机制

在 transformer 的某些层后插入分类头(exit points)。前向传播时,每层后评估置信度:

  • 如果 confidence > threshold,提前返回结果。
  • 否则继续深层计算。

实现细节

  1. 置信度度量
    • 最大 softmax 概率
    • 预测分布的熵(越低越确定)
    • 相邻层预测一致性
  1. 训练策略
    • 每个 exit point 都有 loss,联合训练。
    • 可以引入权重:浅层 exit 的 loss 权重更高,确保浅层也能学会。
  1. 阈值策略
    • 固定阈值:简单,但可能不均匀。
    • 预算控制:给定平均计算预算,调整阈值使其满足。

应用场景

  • 移动端部署,省电优先。
  • 批处理混合难度样本。

#263. 稀疏注意力有哪些实现形式?如何平衡稀疏与效果?

#知识点

  • Sparse Attention Pattern
  • Longformer、BigBird、Reformer
  • 局部+全局注意力
  • 线性注意力近似

#详细解答

稀疏注意力的动机:标准 attention 是 O(n²),长序列时爆炸。稀疏 attention 只计算部分位置的注意力,降到 O(n) 或 O(n log n)。

主流模式

  1. 局部窗口(Local/Sliding Window)
    • 每个 token 只 attend 附近的 w 个邻居(如 Longformer)。
    • 优点:局部依赖性建模好,硬件友好。
    • 缺点:长程依赖需多层传递。
  1. 全局 token(Global Attention)
    • 设置一些特殊 token(如 [CLS])可以 attend 全部、被全部 attend。
    • 结合局部窗口,形成"局部密集+全局稀疏"的混合。
  1. 随机稀疏(Random)
    • 随机选一些位置计算 attention(如 BigBird)。
    • 理论上有满秩保证,实践中增加多样性。
  1. 分层/膨胀(Dilated/Stride)
    • 每隔 k 个 token 计算一次,类似空洞卷积。
  1. LSH/Reformer
    • 用局部敏感哈希把相似向量分到同一桶,只算桶内 attention。

平衡策略

  • 混合模式:BigBird = 局部 + 全局 + 随机,已被证明是通用近似器。
  • 任务适配:NLU 任务全局信息重要,可适当增加全局 token;生成任务局部性更强。

#264. 量化感知训练 (QAT) 相比 PTQ 有何优劣?

#知识点

  • QAT (Quantization-Aware Training)
  • PTQ (Post-Training Quantization)
  • 伪量化、Straight-Through Estimator
  • 训练成本、精度恢复

#详细解答

特性 PTQ QAT
流程 训练后直接量化 训练中模拟量化
成本 低,无需重新训练 高,需要 fine-tune
精度 通常下降较多(尤其低比特) 通常能恢复精度
适用 快速部署、验证 生产环境、低比特需求
实现 简单,校准集即可 复杂,需修改训练流程

QAT 核心机制

  1. 伪量化(Fake Quantization)
    • 前向时模拟量化-反量化:wq = round(w / scale) * scale
    • 让网络"感受"到量化的噪声。
  1. STE(Straight-Through Estimator)
    • 反向传播时,量化操作的梯度直接用 identity(即跳过 round 的梯度)。
    • 这样梯度能流回,权重可以更新。
  1. 学习范围
    • 可以学习 scale、zero-point,而非固定统计值。

选择建议

  • 时间紧、8-bit 量化:PTQ 通常够用。
  • 4-bit、追求精度:QAT 通常是必须的。

#265. 模型压缩的「不可能三角」是什么?如何权衡?

#知识点

  • 精度、效率、通用性
  • 任务特定压缩
  • 动态自适应
  • 分层异构

#详细解答

模型压缩的不可能三角

  1. 精度(Accuracy):保持原模型性能。
  2. 效率(Efficiency):推理速度、显存占用、功耗。
  3. 通用性(Generality):压缩后的模型能处理多样任务,而非只为单一任务优化。

难以兼得的现实

  • 追求极致效率(如 2-bit 量化)→ 精度下降、或只能用于特定任务。
  • 追求任务无关的通用压缩 → 效率提升有限。

权衡策略

  1. 任务特定蒸馏:为每个下游任务蒸馏专用小模型,牺牲通用性换效率。
  1. 专家混合(MoE)的逆向思路
    • 用小模型处理简单请求,大模型处理复杂请求。
    • 路由器决定走哪条路。
  1. 分层异构
    • 底层共享(通用知识),顶层任务特定(专门化)。
    • 压缩时重点压缩共享层,保留顶层容量。
  1. 动态自适应
    • 根据输入难度动态调整计算量(早退、深度自适应)。

#266. LLM.int8()、GPTQ、AWQ、GGUF 等量化方案的核心差异?

#知识点

  • 混合精度、离群值
  • 分组量化、逐行/逐列
  • 激活感知、权重量化
  • 推理框架兼容

#详细解答

方案 核心思想 量化粒度 特点
LLM.int8() 混合精度:离群值 fp16,其余 int8 逐行/逐列 几乎不掉点,但需特殊 kernel
GPTQ 逐层量化,用 Hessian 补偿误差 分组(如 128) 4-bit 可用,适合静态部署
AWQ 激活感知:保护对激活敏感的权重 分组 精度优于 GPTQ,略慢
GGUF llama.cpp 格式,CPU 友好 多种位宽可选 端侧部署、跨平台

技术细节对比

  1. LLM.int8()(BitsAndBytes):
    • 发现大模型有少量"离群值特征"(outlier features),集中在特定维度。
    • 把这些维度保留 fp16,其余 int8,实现"几乎无损"压缩。
  1. GPTQ
    • Optimal Brain Quantization 的贪心近似。
    • 逐层量化,量化某权重后,把误差扩散到未量化的权重上(用 Hessian 指导)。
    • 适合一次性压缩,无需训练数据。
  1. AWQ(Activation-aware Weight Quantization):
    • 观察:与大幅激活相乘的权重对精度更敏感。
    • 根据激活幅度对权重做缩放保护,再量化。
    • 需要少量校准数据,但精度通常优于 GPTQ。
  1. GGUF
    • llama.cpp 项目的格式,支持 2-8 bit 多种量化。
    • 优化 CPU 推理(ARM NEON、AVX),适合笔记本/手机部署。