1503.02531-Distilling the Knowledge in a Neural Network.md
原来交叉熵还有一个tempature,这个tempature有如下的定义:
$$
q_i=\frac{e^{z_i/T}}{\sum_j{e^{z_j/T}}}
$$
其中T就是tempature,一般这个T取值就是1,如果提高:
In [6]: np.exp(np.array([1,2,3,4])/2)/np.sum(np.exp(np.array([1,2,3,4])/2))
Out[6]: array([0.10153632, 0.1674051 , 0.27600434, 0.45505423])
In [7]: mx.nd.softmax(mx.nd.array([1,2,3,4]))
Out[7]: 
[0.0320586 0.08714432 0.23688284 0.6439143 ]
<NDArray 4 @cpu(0)>
也就是
Using a higher value for T produces a softer probability distribution over classes.
拥有更高的tempature的系统,其entropy会更高,也就是混乱性更高,方向不趋于一致,而这种不一致性,其实是一种信息,
可以描述数据中更多结构的信息。大模型通过强制的正则化,使得最后输出的信息,entropy更低。因此
Our more general solution, called “distillation”, is to raise the temperature of the final softmax until the cumbersome model produces a suitably soft set of targets. We then use the same high temperature when training the small model to match these soft targets. We show later that matching the logits of the cumbersome model is actually a special case of distillation.
也就是在训练大模型的时候就强制高tempature?但是感觉这样会更加重这种问题才对?
训练大模型的时候,正常训练。其logits使用的时候,用高T,小模型训练的时候,也使用高T,但是验证的时候,使用T1.
In the simplest form of distillation, knowledge is transferred to the distilled model by training it on a transfer set and using a soft target distribution for each case in the transfer set that is produced by using the cumbersome model with a high temperature in its softmax. The same high temperature is used when training the distilled model, but after it has been trained it uses a temperature of 1.
可以同时使用softlabel和数据集的label来做训练,但是softlabel使用不同的T的时候,需要将softlabel的loss相应的乘以\(T^2\)
使用softtarget的好处是,softtarget携带了更多的信息,因此可以用更少的数据来训练。
多个大模型蒸馏出来的模型,可能比多个模型组合有更好的性能。
多个模型如何蒸馏?用多个模型的输出,作为最终蒸馏模型的target,多个target的loss相加。也就是一种多任务学习。
confusion matrix 这个东西可以被用来探查模型最容易弄错的是哪些分类。
看错了,似乎论文最后只是在讨论训练多个speciallist model,但是并没有谈到如何把这些models组合回一个大模型。这可能是个问题。
1503.02531-Distilling the Knowledge in a Neural Network.md的更多相关文章
- Distilling the Knowledge in a Neural Network
		
url: https://arxiv.org/abs/1503.02531 year: NIPS 2014   简介 将大模型的泛化能力转移到小模型的一种显而易见的方法是使用由大模型产生的类概率作 ...
 - 【DKNN】Distilling the Knowledge in a Neural Network 第一次提出神经网络的知识蒸馏概念
		
原文链接 小样本学习与智能前沿 . 在这个公众号后台回复"DKNN",即可获得课件电子资源. 文章已经表明,对于将知识从整体模型或高度正则化的大型模型转换为较小的蒸馏模型,蒸馏非常 ...
 - 【论文考古】知识蒸馏 Distilling the Knowledge in a Neural Network
		
论文内容 G. Hinton, O. Vinyals, and J. Dean, "Distilling the Knowledge in a Neural Network." 2 ...
 - 论文笔记:蒸馏网络(Distilling the Knowledge in Neural Network)
		
Distilling the Knowledge in Neural Network Geoffrey Hinton, Oriol Vinyals, Jeff Dean preprint arXiv: ...
 - 论文笔记之:Progressive Neural Network   Google DeepMind
		
Progressive Neural Network Google DeepMind 摘要:学习去解决任务的复杂序列 --- 结合 transfer (迁移),并且避免 catastrophic f ...
 - Recurrent Neural Network[Content]
		
下面的RNN,LSTM,GRU模型图来自这里 简单的综述 1. RNN 图1.1 标准RNN模型的结构 2. BiRNN 3. LSTM 图3.1 LSTM模型的结构 4. Clockwork RNN ...
 - Recurrent Neural Network[survey]
		
0.引言 我们发现传统的(如前向网络等)非循环的NN都是假设样本之间无依赖关系(至少时间和顺序上是无依赖关系),而许多学习任务却都涉及到处理序列数据,如image captioning,speech ...
 - [Tensorflow] Cookbook - Neural Network
		
In this chapter, we'll cover the following recipes: Implementing Operational Gates Working with Gate ...
 - (zhuan) Recurrent Neural Network
		
Recurrent Neural Network 2016年07月01日 Deep learning Deep learning 字数:24235 this blog from: http:/ ...
 
随机推荐
- oracle 的 exp 和imp命令
			
数据导出: 1 将数据库TEST完全导出,用户名gdoa 密码123 导出到D:\TEST_BK.dmp中 exp gdoa/123@TEST file=d:\TEST_BK.dmp full=y ...
 - QT心电图设计
			
不需要别的UI设置,直接放在QT文件中即可 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #includ ...
 - 剑指offer 13.代码的完整性 调整数组顺序使奇数位于偶数前面
			
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 本渣渣解题思路: ...
 - css格式
			
<head> <style>body {color:#000000;font-weight:normal;} .c1{ color: #fff; background-colo ...
 - Sqlserver 计算两坐标距离函数
			
mark if exists (select * from dbo.sysobjects where id = object_id(N'UF_ETL_GetDistance') and xtype i ...
 - VMware 打开虚拟机的时候提示 internal error    内部错误 遇到这个问题时我的解决方法
			
任务栏右键,启动任务管理器,选择“服务”选项卡 找到这个服务 启动这个服务后,再次尝试打开虚拟机,就OK了.
 - 关于Rabbitmq的routingkey的作用
			
对于消息发布者而言它只负责把消息发布出去,甚至它也不知道消息是发到哪个queue,消息通过exchange到达queue,exchange的职责非常简单,就是一边接收发布者的消息一边把这些消息推到qu ...
 - subprocess模块 sys模块
			
常用模块学习—subprocess模块详解 要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用 ...
 - scrapy实战之scrapyrt的使用
			
scrapyrt为scrapy提供了一个http接口,有了它,我们不用再执行命令,而是直接请求一个http接口来启动项目,如果项目是部署在远程的,会比较方便. 1.安装: pip install sc ...
 - 基于consul高可用
			
1.介绍consul Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License ...