1.模型压缩背景
随着深度学习技术的不断发展,模型的规模和复杂度也随之增加。大型模型往往具有更高的精度和更强的泛化能力,但在实际应用中,模型的大小却成为了一个制约因素。模型体积过大会导致存储、传输和推理速度等方面的瓶颈,限制了模型在资源受限设备上的部署和应用。因此,模型压缩技术应运而生,旨在减少模型的体积,同时尽可能地保持模型的性能。
下面的这张图(推理流程图)可以看到模型压缩在整个模型推理流程中的位置,模型压缩处于离线推理模块中;
模型压缩的主要方法:
1.模型量化
2.模型剪枝
3.知识蒸馏
2.模型量化基础
1.深度学习神经网络模型的特点:
- 数据参数量大
- 计算量大
- 内存占用大
- 模型精度高
2.模型量化的概念
模型量化是一种将浮点计算转成低比特定点计算的技未,可以有效的降低模型计算强度、参数大小和内存消耗,但往往带来巨大的精度损失。无其是在极低比特(<4bit)、二值网络(Ibit)、甚至将梯度进行量化时,带来的精度挑战更大。
常见模型精度:
3.模型量化的优点
- 保持精度:只要把控好量化的程度,对于高级任务精度的影响可以做到很小
- 加速计算:传统的卷积运算一般采用FP32计算,INT8与其比可以增加3倍速度
- 节省内存:INT8比FP32占用的空间更小,传输时间也能大幅下降
- 节能:使用的位数少,做运算时搬运的数据少,访存次数就少了
4.模型量化方法
-
量化训练(Quant Aware Training,QAT)
量化训练让模型感知量化运算对模型精度带来的影响,通过finetune训练降低量化误差
-
动态离线量化(Post Training Quantization Dynamic,PTQ Dynamic)
动态离线量化仪将模型中特定算子的权重从FP32类型唤射成INT8/16类型
-
静态离线量化(Post Training Quantization Static,PTQ Static)
静态离线量化使用少量无标签校准数据,采用KL散度等方法计算量化比例因子。
5.量化原理
模型量化桥接了定点与浮点,建立了一种有效的数据映射关系,使得以较小的精度损失代价获得了较好的收益
3.模型剪枝基础
1.模型剪枝的概念
模型剪枝是一种从神经网络中移除“不必要”权重或偏差(weight/bias)的模型压缩技术。它可以通过减少模型的大小和计算量来提高模型的效率和速度。模型剪枝可以分为细粒度剪枝、粗粒度剪枝和结构化剪枝等不同的剪枝方法。
2.模型剪枝分类
- Unstructured Pruning(非结构化剪枝)
- 随机对独立的权重或神经元链接进行剪枝
- 剪枝算法简单,模型压缩比高
- 但精度不可控,剪枝后权重矩阵稀疏
- Structured Pruning(结构化剪枝)
- 对filter/channel/layer进行剪枝
- 大部分算法在channel/layer上进行,相较非结构化更加保留原始结构
- 剪枝算法相对复杂
3.常见剪枝算法
-
L1正则化剪枝
-
L2正则化剪枝
-
稀疏结构学习剪枝
-
通道剪枝
-
卷积核剪枝
-
低秩分解剪枝
-
基于Hessian矩阵的剪枝
4.剪枝的优缺点
-
模型剪枝的优点是可以减少模型的大小和计算量,提高模型的运行速度和效率。同时,模型剪枝可以提高模型的泛化能力,减少过拟合的风险。
-
模型剪枝的缺点是可能会牺牲模型的准确率和压缩比,而且非结构化剪枝需要依赖于专门的运行库和硬件设备。
5.剪枝VS量化
-
模型量化是通过减少权重表示或者激活所需的比特数来压缩模型
精度:32bit—>8bit
-
模型剪枝研究的是模型权重中的冗余部分,尝试删除冗余的和非关键的部分
精度不变,删除冗余和非关键的部分
4.知识蒸馏(Knowledge Distillation)基础
1.概念介绍
知识蒸馏(Knowledge Distillation,简记为 KD)是一种经典的模型压缩方法,核心思想是通过引导轻量化的学生模型“模仿”性能更好、结构更复杂的教师模型(或多模型的 ensemble),在不改变学生模型结构的情况下提高其性能。
2.蒸馏主要思想
知识蒸馏就是将已经训练好的模型包含的知识,蒸馏到另一个模型中去。具体来说,知识蒸馏,可以将一个网络的知识转移到另一个网络,两个网络可以是同构或者异构。一般是将一个复杂模型(或集成模型)蒸馏到一个轻量级模型中以提升运行速度,但也有以提升指标为目的的蒸馏。
蒸馏的常规做法是先训练一个 teacher 网络,然后使用这个 teacher 网络的输出和数据的真实标签去训练 student 网络。
3.知识蒸馏算法的关键组成
- Knowledge
- 蒸馏算法Distillate
- 师生架构
4.知识蒸馏方法
-
Offline distillaction(离线蒸馏)
- 大多数知识蒸馏均采用该方法;该方法主要分为两个部分:1.预训练教师模型;2.蒸馏算法迁移知识
- 大多采用单向知识迁移和两阶段训练过程;
- 在训练教师模型时时间较长,但对学生模型的蒸馏比较高效
-
Online distillaction(在线蒸馏)
- 主要针对参数量大、精度性能好的教师模式不可获得的情况下;
- 教师模型和学生模型同时更新
- 但现有的online distillaction往往难以获得在线环境下参数量大、精度性能好的教师模型;
-
Self-distillaction(自监督蒸馏)
- 教师模型和学生模型使用相同结构的网络
- 两者都采取端到端的可训练方案
- 属于online distillaction一种特例;
5.总结
- Offline Distillation 像知识渊博的老师向传授学生知识;
- Online Distillation 更像老师和学生共同学习;
- Self-Distillation 更像学生自己学习知识。
日常学习总结