徐州城乡建设局安监处网站,网站开发创建画布,什么网站服务器好,android开发环境搭建九、模型压缩与知识蒸馏
出于对响应速度#xff0c;存储大小和能耗的考虑#xff0c;往往需要对大模型进行压缩。
模型压缩方法主要可以分为以下四类#xff1a;
参数修剪和量化#xff08;Parameter pruning and quantization#xff09;#xff1a;用于消除对模型表…九、模型压缩与知识蒸馏
出于对响应速度存储大小和能耗的考虑往往需要对大模型进行压缩。
模型压缩方法主要可以分为以下四类
参数修剪和量化Parameter pruning and quantization用于消除对模型表现影响不大的冗余参数。早期工作表明网络修剪和量化在降低网络复杂性和解决过拟合问题上是有效的。它可以为神经网络带来正则化效果从而提高泛化能力。参数修剪和量化可以进一步分为三类量化和二值化网络剪枝和结构化矩阵。量化可以看作是“量子级别的减肥”神经网络模型的参数一般都用float32的数据表示但如果我们将float32的数据计算精度变成int8的计算精度则可以牺牲一点模型精度来换取更快的计算速度。而剪枝则类似“化学结构式的减肥”将模型结构中对预测结果不重要的网络结构剪裁掉使网络结构变得更加 ”瘦身“。比如在每层网络有些神经元节点的权重非常小对模型加载信息的影响微乎其微。如果将这些权重较小的神经元删除则既能保证模型精度不受大影响又能减小模型大小。结构化矩阵则是用少于 m×n 个参数来描述一个 m×n 阶矩阵以此来减少内存消耗。低秩分解Low-rank factorization卷积神经网络中的主要计算量在于卷积计算而卷积计算本质上是矩阵分析问题因此可以通过对多维矩阵进行分解的方式用多个低秩矩阵来逼近该矩阵比如将一个3D卷积转换为3个1D卷积从而降低参数复杂度和运算复杂度。迁移/压缩卷积滤波器Transferred/compact convolutional filters通过构造特殊结构的卷积滤波器来降低存储空间、减小计算复杂度。知识蒸馏Knowledge distillation类似“老师教学生”使用一个效果好的大模型指导一个小模型训练因为大模型可以提供更多的软分类信息量所以会训练出一个效果接近大模型的小模型。
9.1 知识蒸馏
知识蒸馏knowledge distillation是模型压缩的一种常用的方法不同于模型压缩中的剪枝和量化知识蒸馏是通过构建一个轻量化的小模型利用性能更好的大模型的监督信息来训练这个小模型以期达到更好的性能和精度。最早是由 Hinton 在 2015 年首次提出并应用在分类任务上面这个大模型我们称之为 teacher教师模型小模型我们称之为 Student学生模型。来自 Teacher 模型输出的监督信息称之为 knowledge(知识)而 student 学习迁移来自 teacher 的监督信息的过程称之为 Distillation(蒸馏)。
9.1.1 知识蒸馏的原理
一般使用蒸馏的时候往往会找一个参数量更小的 student 网络那么相比于 teacher 来说这个轻量级的网络不能很好的学习到数据集之前隐藏的潜在关系如上图所示相比于 one hot 的输出teacher 网络是将输出的 logits 进行了 softmax更加平滑的处理了标签即将数字 1 输出成了 0.6对 1 的预测和 0.4对 0 的预测然后输入到 student 网络中相比于 1 来说这种 softmax 含有更多的信息。好模型的目标不是拟合训练数据而是学习如何泛化到新的数据。所以蒸馏的目标是让 student 学习到 teacher 的泛化能力理论上得到的结果会比单纯拟合训练数据的 student 要好。另外对于分类任务如果 soft targets 的熵比 hard targets 高那显然 student 会学习到更多的信息。最终 student 模型学习的是 teacher 模型的泛化能力而不是“过拟合训练数据” 1. 如上图所示左边的教师网络是一个复杂的大模型以它带有温度参数T的softmax输出作为软目标作为学生网络学习的软目标。2. 学生网络在学习时也通过带有温度参数T的softmax进行概率分布预测与软目标计算soft loss。3. 同时也通过正常的训练流程获得预测的样本类别与真实的样本类别计算hard loss。4 最终根据 γ∗softloss(1−γ)∗hardloss作为损失函数来训练学生网络。
这个公式就是知识蒸馏的核心理论。其实就是要让学生模型学习到老师模型的泛化能力。
9.1.2 知识蒸馏的种类
1、 离线蒸馏
离线蒸馏方式即为传统的知识蒸馏如上图a。用户需要在已知数据集上面提前训练好一个 teacher 模型然后在对 student 模型进行训练的时候利用所获取的 teacher 模型进行监督训练来达到蒸馏的目的而且这个 teacher 的训练精度要比 student 模型精度要高差值越大蒸馏效果也就越明显。一般来讲teacher 的模型参数在蒸馏训练的过程中保持不变达到训练 student 模型的目的。蒸馏的损失函数 distillation loss 计算 teacher 和 student 之前输出预测值的差别和 student 的 loss 加在一起作为整个训练 loss来进行梯度更新最终得到一个更高性能和精度的 student 模型。
2、 半监督蒸馏
半监督方式的蒸馏利用了 teacher 模型的预测信息作为标签来对 student 网络进行监督学习如上图b。那么不同于传统离线蒸馏的方式在对 student 模型训练之前先输入部分的未标记的数据利用 teacher 网络输出标签作为监督信息再输入到 student 网络中来完成蒸馏过程这样就可以使用更少标注量的数据集达到提升模型精度的目的。
3、 自监督蒸馏
自监督蒸馏相比于传统的离线蒸馏的方式是不需要提前训练一个 teacher 网络模型而是 student 网络本身的训练完成一个蒸馏过程如上图c。具体实现方式 有多种例如先开始训练 student 模型在整个训练过程的最后几个 epoch 的时候利用前面训练的 student 作为监督模型在剩下的 epoch 中对模型进行蒸馏。这样做的好处是不需要提前训练好 teacher 模型就可以变训练边蒸馏节省整个蒸馏过程的训练时间。
9.1.3 知识蒸馏的作用
1、提升模型精度
用户如果对目前的网络模型 A 的精度不是很满意那么可以先训练一个更高精度的 teacher 模型 B通常参数量更多时延更大然后用这个训练好的 teacher 模型 B 对 student 模型 A 进行知识蒸馏得到一个更高精度的模型。
2、降低模型时延压缩网络参数
用户如果对目前的网络模型 A 的时延不满意可以先找到一个时延更低参数量更小的模型 B通常来讲这种模型精度也会比较低然后通过训练一个更高精度的 teacher 模型 C 来对这个参数量小的模型 B 进行知识蒸馏使得该模型 B 的精度接近最原始的模型 A从而达到降低时延的目的。
3、图片标签之间的域迁移
用户使用狗和猫的数据集训练了一个 teacher 模型 A使用香蕉和苹果训练了一个 teacher 模型 B那么就可以用这两个模型同时蒸馏出一个可以识别狗猫香蕉以及苹果的模型将两个不同与的数据集进行集成和迁移。
4、降低标注量
该功能可以通过半监督的蒸馏方式来实现用户利用训练好的 teacher 网络模型来对未标注的数据集进行蒸馏达到降低标注量的