知识蒸馏的目的 将学习能力强的复杂教师模型中的“知识”迁移到简单的学生模型中
1.知识蒸馏的背景知识
2.解释知识蒸馏的作用机制
3.归纳知识蒸馏中知识的不同形式
4.详细分析和对比了知识蒸馏的各种关键方法,
5.介绍知识蒸馏与其它技术融合、
6.对知识蒸馏在多个不同领域下的应用场景进行了详细的阐述
7.知识蒸馏存在的挑战和未来的研究方向
模型压缩是
教师网络在相同的带标签的数据集上指导学生网络的训练
来获得简单而高效的网络模型
如何区分呀
‘ 看标签’ 如果都是有标签的样本 则为 模型压缩
如果 教师网络没有样本 学生网络有样本 其实是可以提高学生的复杂性能 则为 模型增强
知识蒸馏与迁移学习的四点区别
1.用的数据域不同,知识蒸馏用的是相同的数据集
而 迁移学习用的是不同领域的数据集 考察的是model的泛化性能
2.网络结构不同
迁移学习 用的是相同的一个网络 跑不同的数据集
知识蒸馏 的两个网络 可以是两个一样的 也可以不一样
3,学习方式也不一样
迁移学习 是可以把其他领域的知识 也就是所谓的权重 也就是所谓的预训练 放到测试的model上
而 蒸馏学习是不会直接使用 学过来的权重的
逻辑单元是 Softmax 激活的前一层
类概率 是逻辑单元通过 Softmax 激活函数转化而来
softmax 的前一层可能包含噪声信息
而这些噪声信息就会导致学生过拟合
从而泛化能力下降
主要是softmax 太直男了哈哈
不够温柔
知识蒸馏 Knowledge distillation(学习笔记)_:)�东东要拼命的博客-CSDN博客
可以看我这一篇讲的很详细
解决办法就是 Hinton老爷子 提出的蒸馏温度
让softmax温柔一些哈哈
而这些稍微 明显的高低的关系 就是所谓的暗知识
而这个 解决了之前的难题 老师跟我说 解决这个词 不能乱用 我觉得这里更加适合 提升
只能说 知识蒸馏 真不错
知识蒸馏的作用机制
知识蒸馏为什么能行对吧 哈哈
就第一句话 这个 软目标 软知识 丰富的知识 给学生模型 提供了正则化约束
而这个 正则化 还是双向 挺好啊 雨露均沾哈哈
软目标 标签变得柔和了 顺滑了 术语 叫 标签平滑
而这个平滑 就能防止过拟合 从另一个角度来说就是 模型泛化能力又强了
置信度惩罚 说的是loss 与hard 目标
当然 可以自己来嘛 自己加个正则化 又有何不可嘞
这个 又是个 好名字呀 特权信息 6其实等价 暗信息
从莫种意义上来说 其实就是软目标 的信息很丰富
这个软目标 就是能告诉你 枪往哪打 教师 能引导学生 往哪里优化 不停地迭代自己 成为更好的自己
这个 比喻很牛逼 很高级
真的很卷好吗 还嫌弃软目标的知识不够 求知若渴的student model
一看就是一个好学生 至于聪明不聪明哈哈 不知道 就是想学
扯远了 输出特征知识 答案
中间特征知识 解题过程
关系特征知识 解题方法
结构特征知识 完整的知识体系 理论知识
看看这格局 至下而上的学习方式
看看这个中文表达 这个结构特征 一看就比这个关系特征牛
输出特征知识 逻辑单元 软目标 教师模型的最终预测
复习一下 逻辑单元
这里注意一下 不同任务的输出特征知识 是不同的
尤其是目标检测 不仅有分类头 还有检测头 里面有着定位信息
教师 给的软目标 只能 在学生深层的layer上指方向
也就是说 学生自己提取特征的技术还得自学
所以在这个内卷的时代 光学习深层的知识 学生model还不知足
这是就需要学习中间特征知识 这里指的是 教学生怎么提取特征
因为
这个问题
所以提出
中间特征知识
来解决 教师和学生模型在容量之间的 代沟问题 gap
中间特征知识的主要思想
这里重要的是 最早使用教师模型中间特征的是
[27] Romero A, Ballas N, Kahou S E, Chassang A, Gatta C, Bengio Y.
Fitnets: hints for thin deep nets//Proceedings of the 3rd Internati-onal Conference on Learning Representations. San Diego, USA,2015:1-13
这个 十分重要 非常重要
这个 中间层的知识学习 1.可以逐层 2.可以隔层3. 甚至可以逐块
1.可以通过 模仿学习 例子 可学习的投影矩阵 和定义的注意力映射图
2. 通过 共享网络 直接利用教师的中间特征
很重要 中间特征的知识蒸馏是要最小化教师与学生之间的中间特征映射距离
用到 度量学习 度量学习在知识蒸馏领域应用最广的是 KL散度
用于 最小化教师与学生的model输出的相对概率分布
关系特征知识 指的是教师模型 不同层之间 和 不同数据样本之间的关系知识
第一阶段 最小化师生间的FSP矩阵距离
第二阶段 使用正常的分类损失来优化学生模型
基于关系的知识蒸馏分成三类
1.基于网络层的关系
1. 雅克比矩阵 可以捕获网络层映射相似性
2.使用径向基函数 计算层间的相关性
这两个方法 不收师生网络结构的限制 很适合学生model的模型压缩
2。基于样本间的关系
学习排名 Learning to rank
传递交叉样本的1.相似性知识来改善学生模型
还可以利用
2.相互关系知识
3.相关性知识
3.相关任务的关系
包含的最广的 怎么说来着
广度最大的是 结构特征知识
结构特征知识蒸馏 是以互补的形式
利用多种知识
来促使学生的预测 能包含和教师一样丰富的结构知识.
这里有点乱整理一下
结构化知识可以是 样本特征 +样本间关系 +特征空间变换
可以是像素关系+像素间整体知识
可以是输出特征+中间特征+全局预测特征
可以借助对比学习找
可以借助生成对抗网络找(干 现在的diffusion)来capture 结构化特征知识
当然 对抗性学习还可以用来调整师生网络结构的全局预测
知识蒸馏的常见方法
1.知识合并
好多老师教你不同的科目 你就可以同时处理多个任务 孩子你真苦啊 studentmodel说我还能学,给我插上电源
有一种方法将多个教师模型的特征知识进行融合 由融合得到的特征作为学生模型学习参数的指导
一个是 将多个教师的特征压缩到紧凑且有区别的特征集
另一个是 使用辅助模块 来提取多个任务对应的特征
我也不知道我现在突然看不进去 这一段
只能慢慢分析了
首先 我们用到了一个 共享网络层
这个共享网络层直接去学习多个教师model的特征
来达到一个目的 实现多任务知识的合并 是不是可以理解为多个不同领域知识的融合
而达到这个目的的操作是
把教师model的相应层?替换为学生model要学习的层 学生要学的层不应该就是 教师model的相应层 这不是离谱
往下看 使学生的网络块与相应的教师一起学习??? 满脸黑线 教师model 还要学习???
下面举了一个例子 学生将不同领域的融合知识 投射到 每个教师的专业领域知识
并以计算损失的方式更新学生模型的参数
这个例子讲的很清楚 学生model将学到的融合知识 投射到 相应老师的相关领域来计算loss
其实就是学生学的好坏 与训练时的指引 至于中间这个描述 真的好迷
2.多教师学习
这段话说的很好 举出了知识合并和多教师学习 的相同点与不同点
相同的是 知识合并和多教师学习 都是让学生model同时学习多个教师的知识
不同的是 目的 多教师相当于 多个相同专业的老师教你 让你对一个专业的理解加深 在单任务上处理变强
知识合并 是不同专业的老师教你 目的是让你的高考的每一个科目都能同时处理并且拿高分
3.教师助理
就这一段话吓我一跳 还以为自己的创新点完蛋了 还好 只能说还没提及 让我更坚信了自己的创新点的可行性 只能说有点相似
4.跨模态蒸馏
可以给阳仔这个创新点
5.相互蒸馏
在线蒸馏 好牛啊 用的是 KL散度
看看 都是啥 CVPR ICCV NIPS
6.终身蒸馏
还有啊 个人觉得 看文献综述的阶段不要那么执着于数学公式 真的 除非就是 真的发那种全都是数学公式的顶刊 不然真的没必要 还有就是确定某一个具体方向 那就应该深耕 而不是 全都钻进去 时间真的很重要
θs 为网络的共享参数
θo 为旧任务参数
目的是增加一个新任务参数 θn
并让 θn 在新旧任务上都能获得高性能.
(通过缓存一小部分旧任务数据和产生旧任务相似的输出值或视觉模式都能使网络在学习新任务的同时保持旧任务性能. )
7.自蒸馏
只能说自蒸馏很棒
思想很novalty
这里有跟我相关 的Transform 多个层压缩到一个层
或者是引入自适应层
看了这么多 从一开始就带有一个疑问 那么哪种知识蒸馏方式最厉害嘞
答案是目前尚无定论哈哈
但是可以说得是
我们既然决定要整知识蒸馏了 就要知道每种知识以及不同种类组合的知识的作用
1.基于特征的知识在模仿教师特征产生的过程
2.基于关系的知识用于捕获数据样本间 网络层 特征的关系 结构化咋不提啦?
当教师模型与学生模型容量差别较小的时候 (也小不到哪里去)
软目标就够用了
但基本上都是差别很大的时候比较多 所以就要用将多种蒸馏的知识形式和方法结合起来来表示出教师model
读完这一段之后 我能告诉你最优的是组合 至于怎么组合 组合什么知识 什么技术 目前尚无定论
知识其实是一个黑盒问题
这一段话指出了一个问题 那么网络层之中 或者样本间 再或是 输出的特征 到底哪里的知识是最好的呀
首先我们知道教师模型和学生模型从直观上就是大小不一样
再深入认识之后 那网络结构也肯定不一样
而至于教师网络中哪一层最具代表性 也是一个知识蒸馏理论上的未知问题
还有要知道的是
关系蒸馏跟网络容量大小没有关系 关系蒸馏仅仅获取的是 网络层和样本间的关系 并非容量差异gap 问题 原因是 知识也是个黑盒 不可知嘛哈哈
这一段话说的是 知识蒸馏与网络架构无关 其实从另一层角度来看 对科研小白比较友好
它无需大改网络 只需要确定好一个教师模型 to find an excellent student model 就好
逻辑反推 没有确定好老师 就没办法找到好的学生 控制变量
这个可太重要了
睁大眼睛好好学
老师教的好不好 我们通常看学生考的高不高
而这里就是看student的performance (测试阶段)
而在训练阶段 我们就要明确 关于**问题我们需要采用**的损失函数来找到学生学的和老师教的最接近的情况
需要提前设计好 loss function
常见的有三种
1.余弦相似(缺点就是会使得教师和student的随机分布上的相似度非对称)
2.KL散度(缺陷是不能考虑到向量的大小 优点是突出了两个向量方向上的差异)
3.MSE(在高位特征并不明显,很容易被随机特征混淆)
这一段告诉大家 知识蒸馏很厉害很值得搞探究
它融合了模型压缩 模型增强 牛得不得了
最后感谢 写这篇综述的peer 让我这科研小白再次了解一个新的field
感谢