模型压缩
对于复杂问题建模时,深度学习模型在容纳更多参数的情况下,效果一般更好,但是模型占内存大,预测时间长的,往往限制其在小型或普通配制的硬件上使用。一般使用模型压缩方法给模型减肥,主要方法总结如下。
模型剪枝
移除对结果作用很小的参数权重,如接近0的参数。具体如去掉某些卷积核,或者卷积核中的某些权重,还有对通通道的减枝,对层的减枝,对注意力头的减枝等。
![[Pasted image 20220925094745.png]]
模型量化
减少存储权重所需的比特数,比如将 float32 降到 int8,基于KMeans的量化方案等等(将训练好的所有参数分成几簇,然后把权重转换成簇索引)。
参数共享
通过共享参数,达到减少网络参数的目的。一个不熟悉的词可由常用词定义,或者用普通单词的嵌入的稀疏组合;又如ALBERT可跨层共享所有参数。
低秩分解
低秩分解的方法运用了矩阵分解和矩阵乘法的结合律。把较大的卷积核分解为两个级联的行卷积核和列卷积核。比如:将一个3×3的卷积层,替换为一个3×1的卷积层加上一个1×3的卷积核。
知识蒸馏
将 teacher 的能力蒸馏到 student上,最近看了一些论文总结如下:
- 第一次提出知识蒸馏
外链:论文阅读_神经网络知识蒸馏_DK - 第一次将知识蒸馏用于自然语言处理
外链:论文阅读_BERT知识蒸馏 - 针对Transformer结构使用知识蒸馏
外链:论文阅读_模型蒸馏_TinyBERT - 另一篇基于Transformer结构的优化,更易用
外链:论文阅读_知识蒸馏_MobileBERT - 结合元学习和知识蒸馏
外链:论文阅读_知识蒸馏_Meta-KD - 包含蒸馏源码的工具包
外链:EasyNLP