知识蒸馏(Knowledge Distillation)

知识蒸馏 目录 一 引言 1.1 深度学习的优点 1.2 深度学习的缺点 二 什么是知识蒸馏 2.1 模型压缩 2.2 什么是学习 2.3 什么是知识蒸馏 2.4 知识蒸馏的一般流程 三 知识蒸馏的分类 3.1 模型结构的种类 3.2 知识的分类 3.3 如何蒸馏 四 输出层知识蒸馏 《Distilling the Knowledge in a Neural Network 》 2015 五 中间层知识蒸馏 《Learning Metrics from Teachers: Comp 阅读详情

知识蒸馏是做什么的?

知识蒸馏的概念由Hinton在Distilling the Knowledge in a Neural Network中提出,目的是把 一个大模型或者多个模型集成 学到的知识迁移到另一个轻量级模型上。
Knowledge Distillation,简称KD,顾名思义,就是将已经训练好的模型包含的知识(Knowledge),蒸馏(Distill)提取到另一个模型里面去。
简而言之,就是模型压缩的一种方法,是一种基于“教师-学生网络思想”的训练方法。

做模型压缩的原因:一般情况下,我们在训练模型的时候使用了大量训练数据和计算资源来提取知识,但是大模型不方便部署到服务中去,一是因为大模型的推理速度慢,二是对设备的资源要求高,因此我们希望对训练好的模型进行压缩,在保证推理效果的前提下减小模型的体量。
····················································································································································································
插一句别的:我们可以从模型参数量和训练数据量之间的相对关系来理解underfitting和overfitting。在网上看到一个很形象的解释:模型就像一个容器,训练数据中蕴含的知识就像是要装进容器里的水。当数据知识量(水量)超过模型所能建模的范围时(容器的容积),加再多的数据也不能提升效果(水再多也装不进容器),因为模型的表达空间有限(容器容积有限),就会造成underfitting;而当模型的参数量大于已有知识所需要的表达空间时(容积大于水量,水装不满容器),就会造成overfitting,即模型的variance会增大(想象一下摇晃半满的容器,里面水的形状是不稳定的)。
一个模型的参数量基本决定了其所能捕获到的数据内蕴含的“知识”的量。这个想法基本正确,但是要注意:
(1)模型的参数量和其所能捕获的“知识“量之间并非线性关系(下图中的1),而是接近边际收益逐渐减少的一种增长曲线(下图中的2和3)
(2)完全相同的模型架构和模型参数量,使用完全相同的训练数据,能捕获的“知识”量并不一定完全相同,另一个关键因素是训练的方法。合适的训练方法可以使得在模型参数总量比较小时,尽可能地获取到更多的“知识”(下图中的3与2曲线的对比)。
图源:【经典简读】知识蒸馏(Knowledge Distillation) 经典之作
在这里插入图片描述


知识蒸馏的理论依据

下面介绍一下知识蒸馏所用到的理论依据。

名词解释

  • Teacher:大而笨重的模型
  • Student:小而紧凑的模型
  • transfer set:用于小模型训练的数据,也是获得Teacher模型soft target输出的输入数据集
  • hard target:样本原始标签
  • soft target:Teacher模型输出的预测结果
  • temperature:softmax函数中的超参数
  • knowledge:可以理解为从输入向量到输出向量学习到的映射

符号定义

  • z z z:Logits,模型去除输出层的输出。
    对于一般的分类问题,比如图片分类,输入一张图片后,经过深度神经网络各种非线性变换,在网络最后的Softmax层之前,会得到这张图片属于各个类别的大小数值 z i z_i zi​,某个类别的 z i z_i zi​数值越大,模型认为输入图片属于这个类别的可能性就越大。那么什么是Logits?这些汇总了网络内部各种信息后,得出的属于各个类别的汇总分值 z i z_i zi​就是Logits, i i i代表第 i i i个类别, z i z_i zi​代表属于第 i i i类的可能性。因为Logits不是概率值,所以一般在Logits数值上会用Softmax函数进行变换,得出的概率值作为最终分类结果概率。Softmax一方面把Logits数值在各类别之间进行概率归一,使得各个类别归属数值满足概率分布;另外一方面,它会放大Logits数值之间的差异,使得Logits得分两极分化,Logits得分高的得到的概率值更偏大一些,而较低的Logits数值,得到的概率值则更小。
  • p p p:probality,每个类的概率

Teacher Model和Student Model

知识蒸馏采取Teacher-Student模式:将复杂且大的模型作为Teacher,Student模型结构较为简单,用Teacher来辅助Student模型的训练,Teacher学习能力强,可以将它学到的知识迁移给学习能力相对弱的Student模型,以此来增强Student模型的泛化能力。复杂笨重但是效果好的Teacher模型不上线,就单纯是个导师角色,真正部署上线进行预测任务的是灵活轻巧的Student小模型。
在这里插入图片描述

需要注意的是,这里蒸馏的目的是小网络的概率分布趋近于大网络,而非单纯的正确率趋近于大网络。 Hinton注意到,虽然我们最终分类依靠的是softmax后的最大概率结果,但其实那些概率很小类之间的差别蕴含着网络进行特征提取的很多信息。例如,猫、狗、狮子三个类的输出分别是0.99,0.001,0.009,则很明显:狮子与猫的相似程度比狮子与狗高。
因此,从理论上来说:只有小网络的所有大小输出与大网络都非常相近,才可以视为大小网络间概率分布非常接近。


知识蒸馏分类

知识蒸馏是对模型的能力进行迁移,根据迁移的方法不同可以简单分为基于目标蒸馏(也称为Soft-target蒸馏或Logits方法蒸馏)和基于特征蒸馏的算法两个大的方向,下面我们对其进行介绍。
···················································································································································································

目标蒸馏-Logits方法

目标蒸馏方法中最经典的论文就是来自于2015年Hinton发表的Distilling the Knowledge in a Neural Network。下面以这篇论文为例,讲一下目标蒸馏方法的原理。
在这篇论文中,Hinton将问题限定在分类问题下,分类问题的共同点是模型最后会有一个softmax层,其输出值对应了相应类别的概率值。在知识蒸馏时,由于我们已经有了一个泛化能力较强的Teacher模型,在利用Teacher模型来蒸馏训练Student模型时,可以直接让Student模型去学习Teacher模型的泛化能力。一个很直白且高效的迁移泛化能力的方法就是:使用softmax层输出的类别的概率来作为“Soft-target” 。

Hard-target 和 Soft-target

【KD的训练过程和传统的训练过程的对比】

  • 传统的神经网络training过程:定义一个损失函数,目标是使预测值尽可能接近于真实值(Hard-target),损失函数就是使神经网络的损失值和尽可能小。这种训练过程是对ground truth求极大似然。
  • KD的training过程:是使用大模型的类别概率作为Soft-target的训练过程。

在这里插入图片描述
从这张图可以看出:
Hard-target:原始数据集标注的 one-shot 标签,除了正标签为 1,其他负标签都是 0。
Soft-target:Teacher模型softmax层输出的类别概率,每个类别都分配了概率,正标签的概率最高。

知识蒸馏用Teacher模型预测的 Soft-target 来辅助 Hard-target 训练 Student模型的方式为什么有效呢?

softmax层的输出,除了正例之外,负标签也带有Teacher模型归纳推理的大量信息,比如某些负标签对应的概率远远大于其他负标签,则代表 Teacher模型在推理时认为该样本与该负标签有一定的相似性。而在传统的训练过程(Hard-target)中,所有负标签都被统一对待。也就是说,知识蒸馏的训练方式使得每个样本给Student模型带来的信息量大于传统的训练方式。

如在MNIST数据集中做手写体数字识别任务,假设某个输入的“2”更加形似"3",softmax的输出值中"3"对应的概率会比其他负标签类别高;而另一个"2"更加形似"7",则这个样本分配给"7"对应的概率会比其他负标签类别高。这两个"2"对应的Hard-target的值是相同的,但是它们的Soft-target却是不同的,由此我们可见Soft-target蕴含着比Hard-target更多的信息。

在这里插入图片描述

在使用 Soft-target 训练时,Student模型可以很快学习到 Teacher模型的推理过程;而传统的 Hard-target 的训练方式,所有的负标签都会被平等对待。因此,Soft-target 给 Student模型带来的信息量要大于 Hard-target,并且Soft-target分布的熵相对高时,其Soft-target蕴含的知识就更丰富。同时,使用 Soft-target 训练时,梯度的方差会更小,训练时可以使用更大的学习率,所需要的样本也更少。这也解释了为什么通过蒸馏的方法训练出的Student模型相比使用完全相同的模型结构和训练数据只使用Hard-target的训练方法得到的模型,拥有更好的泛化能力。

好模型的目标不是拟合训练数据,而是学习如何泛化到新的数据。所以蒸馏的目标是让student学习到teacher的泛化能力,理论上得到的结果会比单纯拟合训练数据的student要好。另外,对于分类任务,如果soft targets的熵比hard targets高,那显然student会学习到更多的信息。采用软标签的知识蒸馏方法,一方面压缩了模型,另一方面,增强了模型的泛化能力。

知识蒸馏的具体方法

神经网络使用 softmax 层来实现 logits 向类别概率(class probabilities)的转换。

原始的softmax函数: q i = e x p ( z i ) ∑ j e x p ( z j ) q_i= \frac{exp(z_i)}{\sum_jexp(z_j)} qi​=∑j​exp(zj​)exp(zi​)​
但是直接使用softmax层的输出值作为soft label,会有一个问题:当softmax输出的概率分布熵相对较小时,负标签的值都很接近0,对损失函数的贡献非常小,小到可以忽略不计。因此“温度”这个变量就派上了用场。

加上temperature变量之后的softmax函数: q i = e x p ( z i / T ) ∑ j e x p ( z j / T ) q_i= \frac{exp(z_i/T)}{\sum_jexp(z_j/T)} qi​=∑j​

知识蒸馏简介(Knowledge Distillation) 知识蒸馏的背景,概念,知识传递形式,不同蒸馏方法的优缺点,例子的相关介绍 阅读详情

相关推荐

什么是知识蒸馏?

研究目录一、知识蒸馏的基本原理二、知识蒸馏在苹果公司LLMs中的应用三、什么是知识蒸馏?四、知识蒸馏的基本原理是什么?五、知识蒸馏如何提高模型性能?六、知识蒸馏与模型压缩的关系是什么?七、知识蒸馏如何减少计算复杂度?八、知识蒸馏如何降低资源需求?九、知识蒸馏如何提高模型的泛化能力?十、知识蒸馏中的教师模型和学生模型是什么?十一、教师模型如何训练?十二、学生模型如何模仿教师模型?十三、知识蒸馏中的数据增强技术有哪些?十四、如何设计知识蒸馏的损失函数?十五、如何优化模型架构以提高知识蒸馏效果?十六、知识蒸馏在自

百态·数智思维 | 聚焦大数据、量化与未来AI 4301

深度学习之知识蒸馏(Knowledge Distillation)

本文参考以下链接,如有侵权,联系删除 论文 参考 引言 知识蒸馏是一种模型压缩方法,是一种基于“教师-学生网络思想”的训练方法,由于其简单,有效,在工业界被广泛应用。 Knowledge Distillation,简称KD,顾名思义,就是将已经训练好的模型包含的知识(”Knowledge”),蒸馏(“Distill”)提取到另一个模型里面去。 温度: 我们都知道“蒸馏”需要在高温下进行,那么这个“蒸馏”的温度代表了什么,又是如何选取合适的温度? 背景 虽然在一般情况下,我们不会去区分训练和部署使用的模型,但

AndyJ的学习之旅 1万+

【知识蒸馏】知识蒸馏(Knowledge Distillation)技术详解

知识蒸馏综述

Roaddd的博客 4万+

知识蒸馏 综述 Knowledge Distillation: A Survey

Knowledge Distillation: A Survey 本文译自Knowledge Distillation: A Survey,论文地址:https://arxiv.org/abs/2006.05525 (有翻译不周之处,敬请指正) 1. Introduction 深度学习取得了巨大进步,但是受限于庞大的计算量和参数量很难实际应用与资源受限设备上。 为了使深度模型更加高效,主要有以下两个方向的研究: 高效的网络模块构建:如MobileNets, ShuffeNets .

doctor_strange**** 1万+

Decoupled Knowledge Distillation解耦知识蒸馏

在过去的几十年里,计算机视觉领域已经被深度神经网络(DNN)彻底改变,它成功地促进了各种真实场景的任务,如图像分类、目标检测和语义分割。然而,大的网络通常受益于大的模型容量,引入了高计算和存储成本。在广泛部署轻量级模型的工业应用中,这样的成本并不可取。在文献中,降低成本的一个潜在方向是知识蒸馏(KD)。KD代表了一系列专注于将知识从重模型(教师)——转移到轻模型(学生)的方法,这可以在不引入额外成本的情况下提高轻模型的性能。

weixin_43238909的博客 1958

Knowledge Distillation 知识蒸馏详解

文章目录往期文章链接目录Shortcoming of normal neural networksGeneralization of InformationKnowledge DistillationA few DefinitionsGeneral idea of knowledge distillationTeacher and StudentTemperature & EntropyTraining the Distil Model往期文章链接目录 往期文章链接目录 Currently, esp

Jay_Tang的博客 2935

【知识蒸馏】 Knowledge Distillation from A Stronger Teacher

近年来,视觉模型的精度凭借更高级的训练策略和模型结构取得了大幅度的提升,但更新颖的模型也给知识蒸馏的应用带来了许多挑战。当前大部分知识蒸馏方法仍然是在传统的基准训练策略和模型上进行研究和实验,而在精度更高的新颖模型和策略下的表现甚至低于不使用知识蒸馏。以往的工作大多将此归结为模型的容量差异(capacity gap)导致的蒸馏效果下降。本文将介绍来自商汤研究团队和悉尼大学等机构的研究人员提出的一种logits层面的知识蒸馏算法DIST。

AaaA00000001的博客 2598

ArcGIS插值可视化气象数据

前言 地图底图的制作和气象数据的预处理见我上两篇博客 ArcGIS精美中国地图制作(详解) python处理日值气象数据 在前面我们已经将日值的地温数据处理成了年均地温,添加了站点经纬度坐标并导出为excel格式。 得到如下数据: 导入数据 在Arcmap中 文件-添加XY数据 将年均地温和站点位置数据导入。 注意:excel表格的格式要另存为97-2003工作簿形式,否则会有"arcgi...

江北20190411的博客 2万+

Palabos User Guide中文解读 | 第一章 | 介绍

译者的话:本人在学习palabos时,发现国内中文资料甚少,恰好网上可以直接搜到palabos user guide这种英文资料,加之时间充裕,便打算开始翻译,能不能完成全本翻译再说,而且文中我也会标记我不确定的地方,以传达意思为主,翻译不当的地方还请各位读者帮忙指正。 Palabos User Guide Release 1.0 r1 Copyright © 2019 University of...

Yulan Fang's notes. 6950

人工智能入门系列之一: 鸢尾花(Iris)多分类的神经网络详解及代码实现

这是最好的时代,我们一起来打造属于自动驾驶汽车上路、无人机飞天、智能机器人管工厂的AI未来 人工智能领域分化为两个阵营:其一是规则式(rule-based)方法,在人工智能早期占主峰;其二是神经网络(neural network)方法,后起之秀。随着硬件水平的提高,算力的指数式增长;人工智能的重心已经从规则式的专家时代转移到神经网络的数据时代。 “神经网络”不选择把人脑熟稔的逻辑规则传授给计算机...

NLP家的码奴小荷的博客 2万+

Cursor插件安装CodeX保姆级教程:从登录到调整面板布局,一步不落

本文提供Cursor编辑器安装CodeX插件的详细教程,涵盖从登录到调整面板布局的全流程。通过优化界面布局和配置参数,帮助开发者提升编码效率,特别适合需要智能代码补全的编程场景。

weixin_42648844的博客 4486

Unity+ARFoundation 探坑之路

前两天想要上手Unity来AR方面的项目东东 ,探索过程中出现了各种各样的问题,现在将这个过程中遇到的各种各样问题梳理一下,希望后来者能开开心心上手Unity+AR。 注意:这是一篇踩坑博客,具体搭建还请自行百度。 一、ARFoundation or ARCore or ARKit Unity作为一个平台,不直接提供XR(包括VR、AR和MR)的开发包,这时就需要其他公司提供各种各样的SDK工具包...

qq_43575926的博客 7119

7.29华为OD机试真题 新系统 - 能量对撞 (Java/Py/C/C++/Js/Go)

7.29华为OD机试真题 新系统 - 能量对撞 (Java/Py/C/C++/Js/Go)

算法大师! 1180

FastAPI基础项目:仿头条新闻的web项目,实现基本的新闻列表页和详情页查看功能

该项目是一个基于FastAPI和MySQL的新闻应用入门项目。主要包含新闻列表页和详情页两个功能页面。项目结构清晰,包含主应用文件、数据库脚本和HTML模板。使用SQLAlchemy进行数据库操作,通过脚本可自动生成50条示例新闻数据。环境配置简单,仅需安装FastAPI、MySQL驱动等基础依赖,通过.env文件管理数据库连接。该项目适合作为FastAPI+MySQL的入门学习案例,展示了基本的CRUD操作、分页查询和模板渲染功能。

数据知道的博客 4395

SAP FICO 金税系统-金税->SAP接口功能开发说明书(接口字段)

SAP FICO 金税系统-金税->SAP接口功能开发说明书(接口字段)

我好像病了的博客 1237

ffmpeg-4.2.2-win64 Windows下已经编译好的ffmpeg可执行的程序(下载即用)

ffmpeg-4.2.2-win64 Windows下已经编译好的ffmpeg可执行的程序(下载即用), 只需要把执行路径添加到PATH中, 就可以方便应用了。

dummy机械臂出自稚晖君_dummy-solidworks-.zip

dummy机械臂出自稚晖君_dummy-solidworks-

TOGAF 10.0 企业架构自学整理材料

适合TOGAF10.0自学的各位同学,适合TOGAF10.0自学的各位同学,感兴趣的同学可以下载,如有问题,私信沟通

matlab模糊PID控制二阶倒立摆仿真.zip

matlab模糊PID控制二阶倒立摆仿真.zip

上一篇: 深入理解注意力机制
琉璃幻
博客等级 码龄8年 11粉丝 9原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值