知识蒸馏
- 知识蒸馏简介
- 蒸馏作用背景
主要是为了减少模型计算量,降低模型复杂度,减少需要的计算资源
模型压缩基本方法:
裁剪
-
- 为什么要进行知识蒸馏
当前深度学习模型参数越来越多,规模越来越大,在处理数据和模型部署的时候,对设备和时间要求比较高的情况下,很难满足需求,因此需要对模型进行压缩。
1.3知识蒸馏原理
一般认为,模型经过训练后,其中的参数保留了学习到的知识,知识可以看作是一种输入到输出之间的映射,训练一个teacher网络,然后,把teacher网络的输出结果q作为student网络的学习目标,对student网络进行训练,使得其训练结果p逐渐接近q。在这里用到的损失函数为交叉熵。如果直接用teacher网络的训练结果,往往很难达到预期,因为此时模型会倾向于对的还是对的,错的还是错的,也就是说“老师”一开始就没学好,那后面教育“学生”的时候也不会有什么改进,在论文中提到,softmax target,作为“学生”网络的时候训练目标,使得输出结果分布比较均匀,起到一定的平滑作用,保留相似信息。
Teacher网络可以把知识转移给student网络,这两个网络可以是同样结构也可以是不同结构,大概流程:先训练teacher网络,然后把模型的输出和数据的真实标签去训练student网络,相当于把大网络转化为小网络,保留了大网络的性能,当然,也可以把“多个教师”网络学到的知识转移到一个网络中,集百家之长。
Teacher和student,teacher在学习知识的时候,能够知道哪些错误数据之间是存在一定关联的,也就是logit分布,student网络在学习的时候,把这些错误信息进行纠正,提高模型准确率
- 相关论文
论文开山之作:Distilling the Knowledge in a Neural Network
访问链接:https://arxiv.org/abs/1503.02531
建议观看一下B站同济子豪兄对该篇论文的详解。
- 基本策略方法
在训练student网络时,teacher网络一般是固定不更新的。
- 实战应用
4.1 Bert蒸馏
4.2蒸馏工具和技巧
nlp bert 模型蒸馏大全和工具_HxShine的博客-CSDN博客_nlp蒸馏
TextBrewer工具,专门为NLP进行设计,
Patient-KD
DisitilBERT
DynaBERT
TinyBERT
五、相关讨论
5.1 蒸馏与迁移学习关系
从一个领域迁移到另一个领域,知识蒸馏是将知识从一个网络迁移到另一个网络。迁移学习中两个网络所面对的数据集是不一样的,而知识蒸馏面对的是同一数据集,其目的是让小网络学到大网络中的一些性质,而这些性质是各种label之间的相关性。
5.2 模型剪枝与量化和蒸馏有什么关联
在这里简单概括一下,因为每一项都可以展开说,先挖个坑,后面再填吧。
剪枝:顾名思义,对模型进行修剪,如去掉transformer中多余的“头”,或者使用较少层数的transformer,现在最大的transformer已经达到了100层。
量化:主要是通过牺牲精度换取模型速度,
因式分解,
蒸馏:教师-学生
神经网络架构搜索(NAS):类似于“化学结构式的重构”,以模型大小和推理速度进行模型结构搜索,获得更高效的网络结构。
5.3 具体是如何通过知识蒸馏,来实现模型剪枝压缩的
5.4 在用小网络预测的时候,还需要teacher网络吗
在预测的时候,是不需要teacher网络的,
在训练student网络的时候,会把teacher网络固定不更新