睡眠 应该用 a加权 c加权_在神经网络中提取知识:学习用较小的模型学得更好...

在传统的机器学习中,为了获得最先进的(SOTA)性能,我们经常训练一系列整合模型来克服单个模型的弱点。 但是,要获得SOTA性能,通常需要使用具有数百万个参数的大型模型进行大量计算。 SOTA模型(例如VGG16 / 19,ResNet50)分别具有138+百万和23+百万个参数。 在边缘设备部署这些模型是不可行的。

0bca789e63b28f1bfe85e761c900b3fd.png

智能手机和IoT传感器等边缘设备是资源受限的设备,无法在不影响设备性能的情况下进行训练或实时推断。 因此,研究集中在将大型模型压缩为小型紧凑的模型,将其部署在边缘设备时性能损失最小至零。

以下是一些可用的模型压缩技术,尽管它不限于以下内容:

· 修剪和量化

· 低阶分解

· 神经网络架构搜索(NAS)

· 知识蒸馏

在这篇文章中,重点将放在[1]提出的知识蒸馏上,参考链接[2]提供了上面列出的模型压缩技术列表的详尽概述。

知识蒸馏

知识蒸馏是利用从一个大型模型或模型集合中提取的知识来训练一个紧凑的神经网络。利用这些知识,我们可以在不严重影响紧凑模型性能的情况下,有效地训练小型紧凑模型。

大、小模型

我们称大模型或模型集合为繁琐模型或教师网络,而称小而紧凑的模型为学生网络。

一个简单的类比是,一个大脑小巧紧凑的学生为了考试而学习,他试图从老师那里吸收尽可能多的信息。然而老师只是教所有的东西,学生不知道在考试中会出哪些问题,尽力吸收所有的东西。

在这里,压缩是通过将知识从教师中提取到学生中而进行的。

c695e44c88efa19ab3c80da21dea3b91.png

在提取知识之前,繁琐的模型或教师网络应达到SOTA性能,此模型由于其存储数据的能力而通常过拟合。 尽管过拟合,但繁琐的模型也应该很好地推广到新数据。 繁琐模型的目的是使正确类别的平均对数概率最大化。 较可能正确的类别将被分配较高的概率得分,而错误的类别将被赋予较低的概率。

下面的示例显示了在给定的"鹿"图像上进行推理时以及softmax之后的结果。下图。要获得预测,我们采用最大类概率评分的argmax,这将使我们有60%的机会是正确的。

aec07744f607e8b192cc6da03a513f9f.png

然而,鉴于上面的图2。(为了说明的目的),我们知道与"船"相比,"马"与"鹿"非常相似。因此,在推断过程中,我们有60%是正确的,39%是错误的。由于"鹿"与"马"之间存在一定的空间相似性,因此网络预测"马"的准确性是不容置疑的。如果在网络中提供"我认为这幅图60%是鹿,39%是马"的信息,如[deer: 0.6, horse: 0.39, ship: 0.01],那么网络就会提供更多的信息(高熵)。使用类概率作为目标类比仅仅使用原始目标提供了更多的信息。

蒸馏

教师将预测类别概率的知识提取给学生作为"软目标"。这些数据集又称为"转移集",其目标为教师提供的类别概率,如上图所示。蒸馏过程是通过在softmax函数中引入一个超参数T(温度)来进行的,这样教师模型就可以为学生模型生成一个适当的传递集目标的软目标集合。

软目标擅长帮助模型泛化,并且可以充当正则化函数来防止模型过于自信。

165ca40e7495cc15218bd92daba0b4cd.png

训练教师和学生模型

首先,我们训练繁琐/教师模型,因为我们要求繁琐的模型很好地归纳为新数据。 在蒸馏过程中,学生模型目标函数是两个不同目标函数Loss1和Loss2的加权平均值。

loss1 软目标的交叉熵损失

温度T > 1乘以权重参数alpha的教师q和学生p的两个温度softmax的交叉熵损失(CE)。

d4db638554871e8e82308e883f22257a.png

loss2 硬目标的交叉熵损失

正确标签和T = 1的学生硬目标的交叉熵(CE)损失。Loss2很少注意(1- alpha)学生模型为匹配软目标而制定的硬目标(student_pred) q来自教师模型。

97a789effbc21be928e64fee5363a972.png

学生模型的目标是蒸馏损失,它是Loss1和Loss2之和。

然后在训练学生模型时,以最大程度地减少其蒸馏损失。

结果

MNIST实验

下表1是论文[1]的结果,该论文显示了使用在MNIST数据集上训练了60,000个训练案例的教师、学生和提炼模型的性能。 所有模型都是两层神经网络,分别具有1200、800和800个神经元,分别用于教师,学生和提炼模型。 当使用精简模型与学生模型进行比较时,温度设置为20时,教师和精简模型之间的测试误差相当。但是,仅使用具有硬目标的学生模型时,其推广性就变的很差。

6278c70e2dc206ebba3f426c5ab872bc.png

语音识别实验

下表2是论文[1]的另一个结果。 教师模型是由85M参数组成的语音模型,该参数是根据2000个小时的英语口语数据进行训练的,其中包含大约700M的训练示例。 表2中的第一行是在100%的训练示例上训练的基线模型,其准确性为58.9%。 第二行仅使用3%的训练示例进行训练,这会导致严重的过度拟合。最后,第三行是用3%的训练样本用同样的3%的软目标训练得到的同样的语音模型,只用3%的训练数据就可以达到57%的准确率。

218be2633f94dcdb9bdfb661b698bc54.png

结论

知识蒸馏是一种用于将计算带到边缘设备的模型压缩技术。 目标是拥有一个紧凑的小型模型来模仿繁琐模型的性能。 这是通过使用软目标来实现的,这些目标充当正则化器,以允许小型紧凑的学生模型泛化并从教师模型中恢复几乎所有信息。

根据Statista[3]的数据,到2025年,联网设备的安装总数预计将达到215亿。随着大量的边缘设备的出现,为边缘设备带来计算是使边缘设备更智能的一个日益增长的挑战。知识蒸馏允许我们执行模型压缩而不影响性能的边缘设备。

引用

[1] Hinton, Geoffrey, Oriol Vinyals, and Jeff Dean. "Distilling the knowledge in a neural network." arXiv preprint arXiv:1503.02531 (2015).

[2] An overview of model compression techniques for deep learning in space

[3] IoT number of connected devices worldwide

作者:Kelvin

deephub翻译组

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

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

相关文章

matlab读txt文件不完整,求助Matlab批量读取TXT文件出错

我用dlmread函数批量读取txt文件中的一个数据,但运行结果1.txt文件中只有一个数据0,调试时报错:错误使用 dlmread (line 147)文件结尾不支持空的格式字符串,文件有128列,78行,下面没有列全文件格式是&#…

面向对象代码_面向对象的代码生成方法

面向对象代码代码生成是减少无聊任务的不健康负担的一种常用方法,这些任务常常使我们急切地对代码苦恼。 我见过的许多代码生成框架都使用模板替换重复方法,在该模板中,您编写了模板,以了解生成的代码文件的外观,然后替…

LeetCode 20.有效括号

原题链接 方法一:解题思路,使用栈 模拟法;首先遍历将是左括号形式的部分压入栈中。然后对于右括号形式与栈顶元素进行比对,看是否匹配。如果匹配的话删除栈顶元素,不匹配直接返回false。最后栈为空则全部的括号匹配…

gpu编程如何一步步学习_如何学习贴片机编程

学习贴片机编程首选要对贴片机有所熟悉了解,另外对常用的电脑编辑软件要会使用。目前通常学习贴片机编程有专门的培训学校,或者跟着生产线上现有的贴片机编程师傅学习熟练后再进行编程操作。下面深圳智驰科技就来分享一下如何学习贴片机编程。对贴片机编…

plotcylinder matlab,Matlab在任意两点之间绘制三维圆柱

Matlab在任意两点之间绘制三维圆柱Matlab在任意两点之间绘制三维圆柱此函数可能存在一些不足,请多多指教!function plotcylinder(u1,u2,color_a,r)Lnorm(u1-u2);RODu2-u1;[X,Y,Z]cylinder(r,100);x1X*0;y1Y*0;z1Z*0;ZL*Z-L/2;ROD_midpoint(u1u2)/2;xROD_…

简单内存池设计

关键词 内存池 链表 class A { public:static void* operator new(size_t size);static void operator delete(void* phead);static int m_iCout;//分配计数统计,每new一次,就统计一次static int m_iMallocCount;//每次malloc一次,统计一次p…

jdk8和hotspot_HotSpot的-XshowSettings标志的简单性和价值

jdk8和hotspot一个方便的HotSpot JVM标志 ( 选项为Java启动 java )是-XshowSettings选项。 Oracle Java启动器描述页面中对此选项进行了如下描述 : -XshowSettings : category显示设置并继续。 该选项的可能类别参数包括&#xf…

怎样自动提取邮件的内容_这些最新的外贸搜索开发工具(图灵搜、谷歌搜索提取工具、易查查),你会使用吗?...

贸业务开展过程中,搜寻买家信息,开发买家客户,是开展外贸的前提。而掌握B2B、谷歌、搜索引擎、社交网站及众多搜索工具的运用技巧,则是外贸业务人员的基本功。本篇文章将结合图灵搜、谷歌搜索提取工具、易查查,三款工具…

LeetCode 面试题55 二叉树的深度

原题链接 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:int maxDepth(TreeNode* root) {if(rootNULL)…

matlab信号分割与比对,matlab测量计算信号的相似度

本示例说明如何测量信号相似度。将回答以下问题:如何比较具有不同长度或不同采样率的信号?如何确定测量中是否存在信号或仅有噪声?有两个信号相关吗?如何测量两个信号之间的延迟?比较具有不同采样率的信号考虑一个音频…

Spring Bootstrap中具有配置元数据的高级配置

在简要介绍了配置元数据并涵盖了我之前的文章《 在Spring Boot中使用配置元数据Pimp您的配置》中的基础知识之后,现在该看看如何进一步执行此步骤并进一步自定义配置。 在这篇文章中,我计划提出对配置属性的弃用,并讨论各种值提供程序&#x…

ssh 与 telnet 有何不同?_采用创新面料Nike Infinalon的全新瑜珈系列究竟有何不同?...

采用创新面料Nike Infinalon的全新瑜珈系列究竟有何不同?无拘无束自由运动——这是耐克瑜伽系列新品的核心设计理念。全新系列为你提供垫上瑜伽时毫无束缚的舒适感,采用了耐克创新型面料:Nike Infinalon。Nike Infinalon应用于耐克最新瑜伽系…

matlab中的导函数驻点,Matlab用导数作定性分析

Matlab用导数作定性分析5.1知识要点:函数作图 —用导数定性描述函数【 clf,xlinspace(-8,8,30);f(x-3).^2./(4*(x-1)); plot(x,f) 】【 fplot((x-3)^2/(4*(x-1)),[-8,8])) 】【 clf,xsym(x); f(x-3)^2/(4*(x-1)); ezplot(f,[-8,8]) ,ti…

java lambda循环_使用Java 8 Lambda简化嵌套循环

java lambda循环对于每个经常需要在Java 8&#xff08;或更高版本&#xff09;中使用多维数组的人来说&#xff0c;这只是一个快速技巧。 在这种情况下&#xff0c;您可能经常会以类似于以下代码的结尾&#xff1a; float[][] values ... for (int i 0; i < values.leng…

原生态基于OpenCV图像处理软件开发

部分功能效果图 GitHub:https://github.com/CnYiXiaoNaiHe/OpenCV- 持续更新

git.exe 启动 慢_四川成都surface电脑启动到一半黑屏维修服务地址电话

联系人&#xff1a;刘工 欢迎来电 地址&#xff1a;成都市一环路南二段1号(磨子桥口)数码科技大厦(新世纪电脑城对面)4楼413专业surface全系列维修因为专注&#xff0c;所以专注&#xff0c;所以surface配件都有现货。微软电脑&#xff0c;微软平板电脑专业维修服务点surface R…

php7.1 split,PHP 函数 split()

函数array split (string pattern, string string [, int limit])定义和用法返回一个字符串数组&#xff0c;每个单元为 string 经区分大小写的正则表达式 pattern 作为边界分割出的子串。如果设定了 limit&#xff0c;则返回的数组最多包含 limit 个单元&#xff0c;而其中最后…

java永生代和新生代_Java:永生的对象和对象的复活

java永生代和新生代什么是物体复活&#xff1f; 当没有其他对象引用该对象时&#xff0c;该Java对象可以进行垃圾回收。 当JVM&#xff1a;s垃圾收集器最终将要删除未使用的对象时&#xff0c;将调用该对象的finalize()方法。 但是&#xff0c;如果我们再次使用对象自己的final…

【FFMPEG应用篇】基于C++使用ffmpeg和QT开发播放器

音视频基础知识 1.MPEG-4是一套用于音频&#xff0c;视频信息的亚索编码标准。 2.常见的封装格式 MP4 MOV AVI&#xff1a;压缩标准可以任意选择 FLV &#xff1a;FLV封装格式详细参考 TS&#xff1a;直播流媒体使用&#xff1b; 3.常用视频编码格式 H264&#xff0…

python和c#哪个简单-最近学习 Python 的一些感触 (对比 C#)

反驳下Pythoner说的简单 之前很多人都说Python用起来简单&#xff0c;我的第一感觉就是胡扯&#xff0c;现在我稍微学了一点&#xff0c;更加坚信了那是胡扯。 当然Python在很小很小的项目里面可能是简单&#xff0c;例如Python写一个HelloWorld&#xff0c;其只要一句print &q…