知识蒸馏综述笔记

news2024/11/15 20:48:37

 

 知识蒸馏的目的 将学习能力强的复杂教师模型中的“知识”迁移到简单的学生模型中

1.知识蒸馏的背景知识 

2.解释知识蒸馏的作用机制

3.归纳知识蒸馏中知识的不同形式

4.详细分析和对比了知识蒸馏的各种关键方法,

5.介绍知识蒸馏与其它技术融合、

6.对知识蒸馏在多个不同领域下的应用场景进行了详细的阐述

7.知识蒸馏存在的挑战和未来的研究方向

 

 

 

 模型压缩是

教师网络在相同的带标签的数据集上指导学生网络的训练

来获得简单而高效的网络模型

 

 如何区分呀 

‘ 看标签’ 如果都是有标签的样本 则为 模型压缩

如果 教师网络没有样本 学生网络有样本 其实是可以提高学生的复杂性能 则为 模型增强

 

 

 

 知识蒸馏与迁移学习的四点区别

1.用的数据域不同,知识蒸馏用的是相同的数据集 

而 迁移学习用的是不同领域的数据集 考察的是model的泛化性能

2.网络结构不同

迁移学习 用的是相同的一个网络 跑不同的数据集

知识蒸馏 的两个网络 可以是两个一样的 也可以不一样

3,学习方式也不一样

迁移学习 是可以把其他领域的知识 也就是所谓的权重 也就是所谓的预训练 放到测试的model上

而 蒸馏学习是不会直接使用 学过来的权重的

 

 

与知识蒸馏思想最为接近的工作是 Bucilu 等人 [8] 2006 年提出的“模型压缩” (Model Compression),它通过学习较大但性能更好模型的近似特征来获得轻量级的网络模型.
06年提出模型压缩

 逻辑单元是 Softmax 激活的前一层

类概率 是逻辑单元通过 Softmax 激活函数转化而来

  softmax 的前一层可能包含噪声信息

而这些噪声信息就会导致学生过拟合

从而泛化能力下降

主要是softmax 太直男了哈哈

不够温柔

知识蒸馏 Knowledge distillation(学习笔记)_:)�东东要拼命的博客-CSDN博客

可以看我这一篇讲的很详细

解决办法就是 Hinton老爷子 提出的蒸馏温度

让softmax温柔一些哈哈 

 

 

 

较大 T 值的软目标差异比 T =1 时的差异小,模
型训练时会对较小的逻辑单元给予更多的关注,从
使学生模型学习到这些负样本和正样本之间的关
系信息 . Hinton 等人 [2] 将这样的蕴含在教师模型中
关系信息称之为“暗知识” (Dark Knowledge) ,而
知识蒸馏就是在训练过程中将教师模型的“暗知识”
传递到学生模型中.
这段话 很重要  好好看 好好学
说人话就是 在训练阶段 将softmax尽可能的软化一些,
这样学生就能学到更多的细节
这个细节指的是 

 而这些稍微 明显的高低的关系 就是所谓的暗知识

而这个 解决了之前的难题  老师跟我说 解决这个词 不能乱用 我觉得这里更加适合 提升

 

 

 

只能说 知识蒸馏 真不错 

知识蒸馏的作用机制

知识蒸馏为什么能行对吧 哈哈

就第一句话  这个 软目标 软知识 丰富的知识 给学生模型 提供了正则化约束 

而这个  正则化 还是双向 挺好啊 雨露均沾哈哈

 软目标 标签变得柔和了 顺滑了 术语 叫 标签平滑 

而这个平滑 就能防止过拟合 从另一个角度来说就是 模型泛化能力又强了

 置信度惩罚 说的是loss 与hard 目标

 当然 可以自己来嘛  自己加个正则化 又有何不可嘞

 这个 又是个 好名字呀 特权信息 6其实等价 暗信息 

从莫种意义上来说 其实就是软目标 的信息很丰富

 这个软目标 就是能告诉你 枪往哪打 教师 能引导学生 往哪里优化 不停地迭代自己 成为更好的自己

 这个 比喻很牛逼 很高级 

真的很卷好吗 还嫌弃软目标的知识不够 求知若渴的student model 

一看就是一个好学生 至于聪明不聪明哈哈 不知道 就是想学

扯远了 输出特征知识 答案

        中间特征知识 解题过程

        关系特征知识 解题方法

        结构特征知识  完整的知识体系 理论知识 

看看这格局 至下而上的学习方式 

看看这个中文表达 这个结构特征 一看就比这个关系特征牛

 

 输出特征知识  逻辑单元 软目标 教师模型的最终预测

复习一下 逻辑单元

 这里注意一下 不同任务的输出特征知识 是不同的 

尤其是目标检测 不仅有分类头 还有检测头 里面有着定位信息

 

教师 给的软目标 只能 在学生深层的layer上指方向 

也就是说 学生自己提取特征的技术还得自学 

所以在这个内卷的时代 光学习深层的知识 学生model还不知足

这是就需要学习中间特征知识 这里指的是 教学生怎么提取特征

因为

这个问题

所以提出

中间特征知识

来解决 教师和学生模型在容量之间的 代沟问题 gap

中间特征知识的主要思想

从教师中间的网络层中提取特征来充当
学生模型中间层输出的提示 (Hint)知识(信息).这一过程 就称之为 中间特征的知识蒸馏
Hint learning

 

 

这里重要的是 最早使用教师模型中间特征的是 

 [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矩阵距离

第二阶段 使用正常的分类损失来优化学生模型 

FSP 矩阵是测量网络间的关系特征,
后续工作 更强调样本的关系 知识.
基于样本的角度关系和距离关系蒸馏.
其中的角度关系蒸馏用来测量
三个样本角度关系 .

 基于关系的知识蒸馏分成三类

1.基于网络层的关系

 

1. 雅克比矩阵 可以捕获网络层映射相似性

2.使用径向基函数 计算层间的相关性

这两个方法 不收师生网络结构的限制 很适合学生model的模型压缩

 

2。基于样本间的关系

 学习排名 Learning to rank

 

 传递交叉样本的1.相似性知识来改善学生模型

还可以利用

2.相互关系知识

3.相关性知识

(还能借助于辅助技术,如通过图描述数据内部关系来实现样本关系的知识迁移)
优点 优势
基于样本的关系知识蒸馏
不仅1.传递了单个样本的信息,
而且2.传输多个样本间的关系知识,
使学生模型形成与教师相同的关系.

3.相关任务的关系

 

 包含的最广的  怎么说来着

广度最大的是 结构特征知识

结构特征知识蒸馏 是以互补的形式

                                利用多种知识

                                来促使学生的预测  能包含和教师一样丰富的结构知识.

 这里有点乱整理一下

结构化知识可以是 样本特征 +样本间关系 +特征空间变换

                可以是像素关系+像素间整体知识

                可以是输出特征+中间特征+全局预测特征

                可以借助对比学习找

                可以借助生成对抗网络找(干 现在的diffusion)来capture 结构化特征知识

当然 对抗性学习还可以用来调整师生网络结构的全局预测

 知识蒸馏的常见方法

1.知识合并

 好多老师教你不同的科目 你就可以同时处理多个任务 孩子你真苦啊 studentmodel说我还能学,给我插上电源

 有一种方法将多个教师模型的特征知识进行融合 由融合得到的特征作为学生模型学习参数的指导

 一个是 将多个教师的特征压缩到紧凑且有区别的特征集

另一个是 使用辅助模块 来提取多个任务对应的特征

 

我也不知道我现在突然看不进去 这一段

只能慢慢分析了

首先 我们用到了一个 共享网络层

这个共享网络层直接去学习多个教师model的特征

来达到一个目的 实现多任务知识的合并 是不是可以理解为多个不同领域知识的融合

而达到这个目的的操作是

把教师model的相应层?替换为学生model要学习的层 学生要学的层不应该就是 教师model的相应层 这不是离谱

往下看 使学生的网络块与相应的教师一起学习??? 满脸黑线 教师model 还要学习???

下面举了一个例子 学生将不同领域的融合知识 投射到 每个教师的专业领域知识 

并以计算损失的方式更新学生模型的参数

这个例子讲的很清楚 学生model将学到的融合知识 投射到 相应老师的相关领域来计算loss

其实就是学生学的好坏 与训练时的指引 至于中间这个描述 真的好迷

 

2.多教师学习 

 

这段话说的很好 举出了知识合并和多教师学习 的相同点与不同点

相同的是 知识合并和多教师学习 都是让学生model同时学习多个教师的知识

不同的是 目的 多教师相当于 多个相同专业的老师教你 让你对一个专业的理解加深 在单任务上处理变强

知识合并 是不同专业的老师教你 目的是让你的高考的每一个科目都能同时处理并且拿高分 

 

 

 

 

  长期的教师信号提供了稳定的教师信息,保证了师生的差异,
 而短期的教师信号则保证了高质量的教学.

 

 

3.教师助理

 

 就这一段话吓我一跳 还以为自己的创新点完蛋了 还好 只能说还没提及 让我更坚信了自己的创新点的可行性 只能说有点相似 

[57] Mirzadeh S I, Farajtabar M, Li A, Levine N, Matsukawa A, Gha
semzadeh H. Improved knowledge distillation via teacher assis
tant//Proceedings of the AAAI Conference on Artificial Intel
ligence. New Orleans, USA, 2020, 34(04): 5191-5198
[58] Passalis N, Tzelepi M, Tefas A. Heterogeneous knowledge distill
ation using information flow modeling//Proceedings of the IEEE/
CVF Conference on Computer Vision and Pattern Recognition.
Seattle, USA, 2020: 2339-2348
[59] Gao M, Wang Y, Wan L. Residual error based knowledge distilla
tion. Neurocomputing, 2021(433): 154-161好好看好好学

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 

感谢 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/360394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VirtualBox 安装 CentOS 换成 Rocky Linux

1.下载 VirtualBox并安装https://www.virtualbox.org/wiki/Downloads2.下载Rocky Linux选择 Rocky-9.1-x86_64-dvd.iso 镜像 官网https://rockylinux.org/download阿里云镜像服务https://mirrors.aliyun.com/rockylinux/9.1/isos/x86_64/?spma2c6h.25603864.0.0.70c556799nMQL…

设计模式看 Spring。

设计模式看 Spring。 文章目录设计模式看 Spring。自定义 Spring 框架。7.1 Spring 使用回顾。7.2 Spring 核心功能结构。7.1.1 bean 概述。7.3 Spring IoC 相关接口分析。7.3.1 BeanFactory 解析。7.3.2 BeanDefinition 解析。7.3.3 BeanDefinitionReader 解析。7.3.4 BeanDef…

论文阅读 | Video Frame Synthesis using Deep Voxel Flow

前言: 视频帧生成方法(视频插帧/视频预测)ICCV2017 oral Video Frame Synthesis using Deep Voxel Flow 引言 当下进行视频帧合成的方法分为两种,第一种是光流法,光流准确的话效果好,光流不准确的话则生…

手摸手,带你实现3D粒子特效

文章摘要:某天,产品小姐姐找到我,要在页面上放一个动态3D模型…不会webGL?没关系!今天就来聊一聊如何用从零实现3D粒子特效。 背景 近年来,随着互联网的迅速发展,用户对产品的视觉效果需求也更…

内网渗透(四十六)之横向移动篇-使用系统漏洞ms17010横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

leaflet 加载geojson数据,随机显示不同颜色的circleMarker

第086个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet项目中加载geojson数据,随机显示不同颜色的circleMarker. 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共89行)相关API专栏目标示例效果 配置方式…

时间序列数据预测的类型

本文主要内容是使用LSTM网络进行不同类型的时间序列预测任务,不涉及代码,仅仅就不同类型的预测任务和数据划分进行说明。 参考文章:https://machinelearningmastery.com/how-to-develop-lstm-models-for-time-series-forecasting/ 注&#xf…

如何使用Hugo Academic Theme构建自己的github主页

前期条件 自己已经注册好GitHub 原文档:https://wowchemy.com/docs/getting-started/hugo-github-quickstart/ 搜索Hugo Academic Theme(网址) 进入后的网址为:https://academic-demo.netlify.app/ 点击Get Start 出现如下模板…

【观察】昇腾加速AI“走深向实”,打通落地“最后一公里”

毫无疑问,今天AI正与产业结合得越来越紧密,从智能制造,到智慧医疗,智慧金融、智慧城市等,AI已经开始渗透到我们生活的方方面面,即便是目前来自传统行业用户的AI转型需求尚未完全激活爆发,但仅仅…

利用组件注解符精简Spring配置文件

文章目录利用组件注解符精简Spring配置文件一、利用组件注解精简Spring配置文件1、创建新包2、将4个类给拷贝过去3、修改杀龙任务类4、修改救美任务类5、修改勇敢骑士类6、修改救美骑士类7、创建Spring配置文件利用组件注解符精简Spring配置文件 一、利用组件注解精简Spring配…

什么是生命周期?Activity生命周期的三种状态

什么是生命周期生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期。同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态、暂停状态和停止状态。接下来将针对Activity生命周…

【自动化测试】自动化测试框架那些事儿

无论是在自动化测试实践,还是日常交流中,经常听到一个词:框架。在教学的过程中,同学们一直对“框架”这个词知其然不知其所以然。 最近看了很多自动化相关的资料,加上一些实践,算是对“框架”有了一些理解…

JVM13 类的生命周期

1. 概述 在 Java 中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。 按照 Java 虚拟机规范,从 class 文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包…

本地代码推送到Coding

话不多说,开门见山 一、coding准备 注册啊,建项目,这些就不用多说了。 1.创建一个代码仓库 填一下名称和描述就行,其他先不用填,然后点最下面完成创建就行。 2.保存代码仓库地址 二、本地代码仓库准备 已经是在…

Linux 忘记密码解决方法

很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可。 步骤如下: 重启linux系统 3 秒之内要按一下回车,出现如…

Web前端:什么是Vue Native 框架?有什么特点?

Vue Native是一个使用Vue.Js开发本地移动应用程序的框架。该框架将文档转换为React Native,进而为你提供适用于Android和iOS的本地应用程序。实际上,Vue Native应用程序据说是React API的包装。Vue将Vue.js和React结合在一起,让你的开发团队充…

【牛客刷题专栏】0x0C:JZ4 二维数组中的查找(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录前言问题…

Django框架之模板过滤器

过滤器 语法如下: 使用管道符号|来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中。如果过滤器需要参数,则使用冒号:传递参数。 变量|过滤器:参数列举几个如下: safe,禁用转义,告诉模板这个变…

大数据Hadoop教程-01大数据导论与Linux基础

目录 01、大数据导论 02、Linux操作系统概述 P007 P008 P009 P010 P011 P012 P013 P014 P015 P016 P017 01、大数据导论 企业数据分析方向 现状分析(分析当下的数据):现阶段的整体情况,各个部分的构成占比、发展、变…

C++空指针和野指针

空指针:指针被赋值为空 例如: int* p nullptr;int* p NULL; 空指针指向的地址是00000000,但空指针不可以解引用 野指针:指针指向了不可控的位置 例如: 未初始化 int* p; //野指针 越界访问 int intArr[5]{0, 1, …