网络压缩之知识蒸馏(knowledge distillation)

news2024/9/21 4:40:07

        因为直接训练一个小的网络,往往结果就是没有从大的网络剪枝好。知识蒸馏的概念是 一样的,因为直接训练一个小的网络,没有小的网络根据大的网络来学习结果要来得 好。

        因而,先训练一个 大的网络,这个大的网络在知识蒸馏里面称为教师网络(teachernetwork),其是老师。我们 要训练的是真正想要的小的网络,即学生网络(studentnetwork)。先训练一个大的网络称为 教师网络。再根据这个大的网络来制造学生网络。在网络剪枝里面,直接把那个大的网络做一 些修剪,把大的网络里面一些参数拿掉,就把它变成小的网络。在知识蒸馏里面是不一样的, 这个小的网络(学生网络)是去根据教师网络来学习。假设要做手写数字识别,就把训练数据 都丢到教师里面,教师就产生输出,因为这是一个分类的问题,所以教师的输出其实是一个分 布。 比如教师的输出可能是看到这张图片1的分数是0.7,7的分数是0.2,9 这个数字的分 数是0.1 等等。接下来给学生一模一样的图片,但是学生不是去看这个图片的正确答案来学 习,它把老师的输出就当做正确答案,也就是老师输出1要0.7,7要0.2,9要0.1。学生的 输出也就要尽量去逼近老师的输出,尽量去逼近1是0.7、7是0.2、9是0.1这样的答案。学 生就是根据老师的答案学,就算老师的答案是错的,学生就去学一个错的东西。

        其实知识蒸馏也不是新的技术,知识蒸馏最知名的一篇文章Hinton在15年的时候已经 发表论文了。很多人会觉得知识蒸馏是Hinton提出来的,因为Hinton有一篇论文“Distilling the Knowledge in a Neural Network”。但其实在 Hinton 提出知识蒸馏这个概念之前,其实就 有看过其他文章使用了一模一样的概念。举例来说,论文“Do Deep Nets Really Need to be Deep”是一篇 13 年的文章里面,也提出了网络蒸馏的想法。

        为什么知识蒸馏会有帮助呢?一个比较直觉的解释是教师网络会提供学生网络额外的信 息,如图1 所示,如果直接跟学生网络这是1,可能太难了。因为1可能跟其他的数字有 点像,比如1跟7也有点像,1跟9也长得有点像,所以对学生网络,我们告诉它:看到这张 图片我们要输出1。7、9的分数都要是0,可能很难,它可能学不起来,所以让它直接去跟 老师学,老师会告诉它这是1。我们没有办法让它是1分,也没有关系。其实1跟7是有点 像的,老师都分不出1跟7的差别。老师说1是0.7,7是0.2,学生只要学到1是0.7,7是 0.2 就够了。这样反而可以让小的网络,学得比直接从头开始训练,直接根据正确的答案要学 来得要好。

图1 知识蒸馏

        Hinton 论文里面甚至可以做到教师告诉学生哪些数字之间有什么样的关系这件事情,就 可以让学生在完全没有看到某些数字的训练数据下,就可以把那一个数字学会。假设训练数 据里面完全没有数字7,但是教师在学的时候有看过数字7,但是学生从来没有看过数字7 。但光是凭着教师告诉学生说1跟7有点像,7跟9有点像这样子的信息,都有机会让学生 可以学到7长什么样子。就算它在训练的时候,从来没有看过7的训练数据。这是知识蒸馏 的基本概念。

        教师网络不一定要是单一的巨大网络,它甚至可以是多个网络的集成,训练多个模型,输 出的结果就是多个模型,投票的结果就结束了。或者是把多个模型的输出平均起来的结果当 做是最终的答案。虽然在比赛里面,常常会使用到集成的方法。如果在一个机器学习的比赛排 行榜里面要名列前茅,往往凭借的就是集成技术,就是训练多个模型,把那么多的模型的结果 通通平均起来。但是在实用上,集成会遇到的问题就训练了1000个模型,进来一笔数据,我 们要1000 个模型都跑过,再取它的平均,计算量也未免太大了。打比赛还勉强可以。要用在 实际的系统上显然是不行的,可以把多个集成起来的网络综合起来变成一个,如图2所示。

图2 使用网络集成作为教师网络的输出

        这个就要用知识蒸馏的做法,就把多个网络集成起来的结果当做是教师网络的输出。让学生 网络去学集成的结果,让学生网络去学集成的输出,让学生网络去逼进一堆网络集成起来的 正确率。

        在使用知识蒸馏的时候有一个小技巧。这个小技巧是稍微改一下 Softmax 函数,会在 Softmax 函数上面加一个温度(temperature)。Softmax 要做的事情就是把每一个神经元的输 出都取指数,再做归一化,得到最终网络的输出,如下式 所示。网络的输出变成一个概 率的分布,网络最终的输出都是介于0到1之间的。所谓温度,就是在做取指数之前,把每 一个数值都除上T,如下式 所示。

        其中T 是一个需要调整的超参数。假设T >1,温度T 的作用就是把本来比较集中的分 布变得比较平滑一点。举个例子,如下式所示,假设y1,y2,y3 是原始的值,y′ 1,y′ 2,y′ 3 是 Softmax 后的值,softmax 后的值都趋近于 0。 

         假设教师网络的输出如上式所示,让学生要叫教师网络去跟这个结果学,跟直接和 正确的答案学完全没有不同。跟教师学的一个好处就是,老师会告诉我们说哪些类别其实是 比较像的,让学生网络在学的时候不会那么辛苦。但是假设老师的输出非常地集中,其中某 一个类别是1,其他都是0。这样子跟正确答案学没有不同,所以要取一个温度。假设温度T 设为100,如下式所示,对于教师,加上温度,分类的结果是不会变的。做完Softmax 以后, 最高分的还是最高分,最低分的还是最低分。所有类别的排序是不会变的,分类的结果是完全 不会变的。但好处是每一个类别得到的分数会比较平滑、比较平均,我们拿这一个结果去给学 生学才有意义,才能够把学生学得好。这是知识蒸馏的一个小技巧。

        温度太大,模型会会改变很多。假设温度接近无穷大,这样所有的类别的分数就变得差不 多,学生网络也学不到东西了,因此T 又是另外一个超参数,它就跟学习率一样,这个是我 们在做知识蒸馏的时候要调的参数。 

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

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

相关文章

Flutter 初识:Chip控件

Flutter Chip控件小结 Chip属性解析示例 InputChip属性解析示例 ChoiceChip属性解析示例 FilterChip属性解析示例 ActionChip属性解析示例 在 Flutter 中,Chip 是一种用于显示简洁信息的组件。它通常用来展示标签、属性、短的文本片段等,并可以包含可选的…

C语言推箱子迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> typedef stru…

python内置模块datetime.date类详细介绍

Python的datetime模块是一个强大的日期和时间处理库&#xff0c;它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。 使用datetime模块 要使用 datetime模块&#xff0c;直接导…

大模型辅助软件开发,助力工程师的开发之路

大模型与软件工程师&#xff1a;改变开发范式的力量 “是人类工程师的能力&#xff0c;而不是大模型的能力&#xff0c;决定了大模型协作式开发的上限。” 这句话深刻地揭示了在人工智能&#xff0c;尤其是大型语言模型&#xff08;LLM&#xff09;飞速发展的今天&#xff0c…

《数字信号处理》学习02-序列的能量及周期性

目录 一&#xff0c;序列的能量 二&#xff0c;序列的周期性 一&#xff0c;序列的能量 序列能量在数字信号处理中的应用&#xff1a;能量归一化。在信号处理中&#xff0c;有时需要对信号进行归一化处理&#xff0c;使得信号的能量为特定的值&#xff0c;这在一些算法和系统…

无主灯吊顶的精致做法:打造光影艺术的居家空间

在现代家居设计中&#xff0c;无主灯吊顶以其独特的照明效果和空间层次感&#xff0c;逐渐成为追求高品质生活人群的首选。无主灯设计不仅能够有效避免传统主灯带来的刺眼感&#xff0c;还能通过多点光源的巧妙布局&#xff0c;营造出温馨、舒适的居家氛围。作为无主灯照明灯具…

洛谷 P3183 [HAOI2016]食物链(记忆化搜索/拓扑排序)

[HAOI2016]食物链 给定 n 个物种和 m 条能量流动关系&#xff0c;求其中的食物链条数。物种的名称从 1 到 n 编号&#xff0c; M 条能量流动关系形如 a1​→b1​,a2​→b2​,a3​→b3​⋯am−1​→bm−1​,am​→bm​ 其中 ai​→bi​ 表示能量从物种 ai​ 流向物种 bi​ ,注意…

【Linux 驱动】IMX6ULL interrupt驱动

1. GIC驱动初始化 start_kernel (init\main.c) init_IRQ (arch\arm\kernel\irq.c) irqchip_init (drivers\irqchip\irqchip.c) of_irq_init (drivers\of\irq.c) desc->irq_init_cb match->data; ret desc->irq_init_cb(des…

(已开源-CVPR 2024)YOLO-World: Real-Time Open-Vocabulary Object Detection

169期《YOLO-World Real-Time Open-Vocabulary Object Detection》 You Only Look Once (YOLO) 系列检测模型是目前最常用的检测模型之一。然而&#xff0c;它们通常是在预先定义好的目标类别上进行训练&#xff0c;很大程度上限制了它们在开放场景中的可用性。为了解决这一限制…

医学领域实现基于大模型和本地知识库的智能问答系统

在医学领域实现一个基于大模型和本地知识库的智能问答系统&#xff0c;需要考虑医学领域的专业知识和术语。我们将构建一个简单版本的系统&#xff0c;该系统能够处理医学问题&#xff0c;并且能够从本地知识库中检索相关信息来生成答案。 技术栈&#xff1a; 自然语言处理模型…

编译LineageOS模拟器镜像,导出到AndroidStudio

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 源码下载 LineageOS官网&#xff1a;https://lineageos.org/ LineageOS源码 github 地址&#xff1a;https://github.com/LineageOS/android LineageOS源码国…

讯鹏科技智慧公厕专业供应商,解读智慧公厕有哪些奥秘

在当今科技日新月异的时代&#xff0c;讯鹏科技作为智慧公厕专业供应商&#xff0c;以其先进的技术和创新的解决方案&#xff0c;为人们带来了全新的公共卫生体验。那么&#xff0c;智慧公厕究竟有哪些奥秘呢&#xff1f;让我们一同解读。 一、智慧公厕硬件 1. 环境监测传感器&…

06:【江科大stm32】:定时器输入捕获功能

定时器输入捕获功能 1、通过定时器的输入捕获功能测量PWM波的频率2、PWMI模式测量频率和占空比 1、通过定时器的输入捕获功能测量PWM波的频率 定时器标准库相关的编程接口&#xff1a; ①PWM.c文件的代码如下&#xff1a; /*通过定时器TIM2生成一个分辨率为10us,频率为1KHz的…

八皇后问题代码实现(java,递归)

简介&#xff1a;著名的八皇后问题是由棋手马克斯贝瑟尔在1848年提出来的&#xff0c;要求在 8 8 的棋盘上摆放8个皇后&#xff0c;使”皇后“们不能互相攻击 &#xff0c;当任意两个皇后都不处于同一行、同一列或同一条斜线上时就不会相互攻击&#xff0c;即为目标解。 说明…

C语言中的预处理指令的其中之一——#line

目录 开头1.什么是预处理指令——#line?2.预处理指令——#line的实际应用改__FILE__宏改__LINE__宏改__FILE__宏和__LINE__宏…… 下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们要学一下关于C语言中的预处理指令的其中之一——#line的一些…

4-6 使用bios 中断 显示字符

1 显示的逻辑 bios 首先通过中断&#xff0c;访问到 最前面的中断向量表&#xff0c;然后 通过中断向量表然后 访问到具体的 bios 的函数&#xff0c;这些函数是bios 自带的&#xff0c;具体的位置 &#xff0c; 我也不知道。只知道有这个函数。 3 显示的原理 &#xff1b; 主要…

纯蓝图事件

一、创建事件分发器 1、蓝图中可直接添加Event Dispatchers事件分发器 2、还可以设置事件的传递参数 3、直接将创建好的事件分发器拖入EventGraph中会显示出Call、Bind、UnBind、Assign等方法 二、广播事件通知 三、订阅、取消订阅事件通知

算法数学加油站:一元高斯分布(正态分布)Python精美科研绘图(PDF、CDF、PPF、ECDF曲线;QQ图)

这类博客针对算法学习时可能遇到的数学知识补充&#xff0c;但不会太多废话&#xff0c;主要是公式结合Python代码精美绘图理解&#xff01; 本期重点&#xff1a; 参数&#xff1a;期望、标准差曲线&#xff1a;概率密度曲线PDF、累积概率密度函数CDF、百分点函数PPF应用&am…

14:LDO电源模块的布局

1.器件要和边框相聚5mm的距离作为工艺边&#xff0c;工艺边可以布线&#xff0c;但不能摆放器件 LDO布局原则 ①输出靠近负载端 和DCDC布局一样

Springcloud微服务合并打包,重复路径引发的血案

你好&#xff0c;我是柳岸花开。 在微服务架构的世界里&#xff0c;各种服务之间的接口调用犹如人类的神经系统&#xff0c;构成了整个系统的核心。然而&#xff0c;正是这些看似简单的接口路径&#xff0c;可能会引发一场惊天血案。今天&#xff0c;我们就来揭开一起因“重复路…