1. 剪枝(Pruning)
剪枝通过删除神经网络中冗余或不重要的权重(或神经元)来减少模型规模。
常见方法:
- 非结构化剪枝:直接去除权重值接近于零的单个参数。
- 结构化剪枝:删除整个卷积核、神经元或注意力头,以减少模型复杂度。
- 动态剪枝:根据输入动态调整剪枝策略,保持灵活性。
示例:
- 剪掉Transformer中不重要的注意力头
- 剪掉CNN中对特征提取贡献小的通道
2. 量化(Quantization)
量化是指将模型的参数(如权重)和激活值从高精度(如FP32)转换为低精度(如INT8、INT4、二值)表示,从而减少模型体积和计算量。。
常见方法:
- 静态量化(Static Quantization):在推理前对模型进行量化。
- 动态量化(Dynamic Quantization):在推理过程中实时量化激活值。
- 对称量化(Symmetric Quantization):用对称区间进行量化。
- 非对称量化(Asymmetric Quantization):用非对称区间进行量化。
典型方法:
✅ INT8量化(8-bit)
✅ INT4量化(4-bit)
✅ FP16量化(半精度浮点数)
✅ 混合精度量化(Mixed Precision)
✅ 二值化(Binarization)(1-bit,见下文)
✅ Ternary量化(3值量化,如-1, 0, +1)
代表算法:
- QAT(Quantization-Aware Training):在训练过程中引入量化感知,保持精度。
- PTQ(Post-Training Quantization):训练后直接量化,速度快但可能损失精度。
- LLM.int8():用于大模型的INT8量化,减少精度损失。
- GPTQ(Quantized GPT):在GPT模型中使用分组量化。
示例:
- 将FP32(32位浮点)转换为INT8(8位整数)
- GPT模型从FP32转换为INT8,推理速度提升约3倍
3. 知识蒸馏(Knowledge Distillation)
将大模型(教师模型)学习到的知识通过监督学习方式传递给小模型(学生模型)。
常见方法:
- Soft Label 迁移:使用教师模型输出的Softmax概率分布作为标签。
- 特征层对齐:对齐学生模型和教师模型的中间层特征。
- 自蒸馏:使用相同结构但不同规模的模型进行蒸馏。
示例:
- BERT 的蒸馏版本
DistilBERT
体积减小40%,推理速度提升60%
- GPT-3 通过知识蒸馏生成小型的推理模型
4. 矩阵分解(Matrix Factorization)
将模型中大规模的权重矩阵分解为多个低秩矩阵,降低计算复杂度。
常见方法:
- SVD(奇异值分解)
- CP分解(CANDECOMP/PARAFAC)
- Tucker分解
示例:
- 对Transformer权重矩阵进行SVD,降低参数数量和计算量
- LLaMA模型通过低秩分解减少自注意力层计算
5. Sparsity(稀疏化)
通过强制设置一部分权重为零,减少非必要的计算。
常见方法:
- L1/L2正则化
- Lottery Ticket Hypothesis(彩票假设)
- 动态稀疏性
示例:
- GPT-3在自注意力中引入稀疏性,减少注意力头数量
- Transformer通过稀疏矩阵乘法降低计算复杂度
6. 权重共享(Weight Sharing)
在模型不同层之间共享权重,减少参数总量。
常见方法:
- 层级共享:不同层使用相同的权重。
- 组共享:将参数按照组进行共享。
示例:
- ALBERT 通过共享 Transformer 层的参数,将 BERT 的参数规模缩小90%
7. 知识压缩(Knowledge Compaction)
通过提取模型中最有用的知识,将模型结构重组并简化。
常见方法:
- 任务特定微调(Task-Specific Fine-tuning)
- 参数高效微调(PEFT)
- LoRA(Low-Rank Adaptation)
示例:
- GPT-3 的 LoRA 微调方式,只需要训练少量可调参数,节省显存和计算量
- BERT 通过任务特定蒸馏减少模型复杂度
8. 神经架构搜索(NAS, Neural Architecture Search)
通过自动搜索最佳的网络结构,找到更小但性能更优的架构。
常见方法:
- 强化学习搜索
- 进化算法搜索
- 差分架构搜索(DARTS)
示例:
- EfficientNet 通过NAS搜索到最佳卷积网络结构
- MobileBERT 通过NAS找到更轻量的Transformer架构
9. 动态推理(Dynamic Inference)
在推理过程中根据输入动态调整模型结构或路径,降低计算负担。
常见方法:
- 动态注意力机制
- 跳跃连接(Skipping Connections)
- 早停(Early Stopping)
示例:
- 在不重要的输入情况下,减少注意力头计算
- 通过条件计算(Conditional Computation)减少推理时间
常见组合策略
- 剪枝 + 量化 → 通过剪枝减少参数数量,量化降低计算复杂度
- 知识蒸馏 + 矩阵分解 → 将教师模型蒸馏后再进行矩阵分解
- 权重共享 + 稀疏化 → 在共享权重的同时,保留稀疏结构
总结:
如果要压缩 大语言模型(LLM),一般采用组合策略:
- 首先使用剪枝减少不必要的参数
- 接着通过量化减少位宽
- 然后通过知识蒸馏保持模型精度
- 最后结合稀疏性和动态推理进一步优化