[Knowledge Distillation]论文分析:Distilling the Knowledge in a Neural Network

news2024/11/16 9:48:57

文章目录

    • 一、完整代码
    • 二、论文解读
      • 2.1 介绍
      • 2.2 Distillation
      • 2.3 结果
    • 三、整体总结

论文:Distilling the Knowledge in a Neural Network
作者:Geoffrey Hinton, Oriol Vinyals, Jeff Dean
时间:2015

一、完整代码

这里我们使用python代码进行实现

# 完整代码在这里
# 就是一下softmax
# 有时间再弄

二、论文解读

2.1 介绍

使用一系列模型预测概率的平均值即软投票机制能显著改善模型的性能,但是部署起来是比较不方便的:因为要预测很多的模型结果,再求平均;论文中提到可以把所有模型预测结果的平均值部署在一个模型里面,然后利用这一个模型来预测,这样就可以大大减少部署的难度,这种方法被称为Knowledge Distillation,即知识蒸馏

在知识蒸馏中,我们不需要关心参数数量和大小的变化,我们只需要关心经过这一系列的参数得到的结果变化,如果参数变少,一般来说100%复刻这个结果是很难的;但是我们可以以一定的比例如80%去还原当时的结果,尽管可能得到错误答案,但是错误答案的相对误差可以稍微控制;错误答案的相对误差告诉了我们很多关于繁琐的模型是如何泛化的。例如,一个宝马的形象可能被误认为垃圾车的可能性很小,但这个错误仍然比误认为胡萝卜的可能性大很多倍。

人们普遍认为,用于培训的目标函数应该尽可能接近地反映用户的真实目标。尽管如此,当真正的目标是很好地推广到新数据时,模型通常被训练以优化训练数据的性能。显然,训练模型进行泛化良好会更好,但这需要关于正确的泛化方法的信息,而这些信息通常是不可用的。然而,当我们将知识从大模型中提取出来到小模型中时,我们可以训练小模型以与大模型相同的方式进行泛化。如果繁琐的模型概括,例如,它是一个大型的平均不同的模型,一个小模型训练推广以同样的方式通常会做更好的测试数据比一个小模型训练的正常方式在相同的训练集用于训练集成。

将繁琐模型的泛化能力转移到小模型的一个明显方法是使用麻烦模型产生的类概率作为训练小模型的“软目标”。在这个转移阶段,我们可以使用相同的训练集或一个单独的“转移”集。当繁琐的模型是一个更简单的模型的大型集合时,我们可以使用它们各自的预测分布的算术或几何平均值作为软目标。当软目标高熵,他们提供更多的信息比硬目标和更少的方差之间的梯度训练情况下,所以小模型通常可以训练的数据比原始繁琐的模型和使用更高的学习率。

2.2 Distillation

在多分类问题上,神经网路依赖于softmax产生各个类别的概率,其中T是一个参数可以让输出概率变得平滑;

T越大,输出的概率越平滑;

在最简单的蒸馏形式中,知识通过在转移集上训练模型并在传输集中的每个情况下使用软目标分布来转移到蒸馏模型,该分布是通过在其softmax中使用高T的原模型或者原模型集合产生的;我们可以在在训练蒸馏模型时使用相同的T,但经过训练后,把T变为1;

当我们知道输入的正确输出时,我们可以利用对目标函数简单加权的方式去构造最终的目标函数,第一个目标函数是与软目标的交叉熵,这个交叉熵是用与蒸馏模型的softmax相同的T来生成软目标来计算的。第二个目标函数是具有正确标签的交叉熵。这是用蒸馏模型的softmax中完全相同的类来计算的,但T为1;因为在预测的时候T便是1;

对第一个目标函数求导:

T很大的时候,我们有:

∑ z j = ∑ v j = 0 \sum z_j=\sum v_j=0 zj=vj=0的时候,我们又有:

所以,在高T,同时 ∑ z j = ∑ v j = 0 \sum z_j=\sum v_j=0 zj=vj=0的时候,蒸馏的本质相当于如下: ∂ C ∂ z j   ≈ ∂ ( z j − v j ) 2 2 N T 2 ∂ z j \frac{\partial C}{\partial z_j} \approx \frac{\partial \frac{(z_j-v_j)^2}{2NT^2}}{\partial z_j} zjC zj2NT2(zjvj)2
在较低的T下,蒸馏模型几乎不去关心那些比平均数更小的负值(平均数为0),这是潜在的优势,因为这些数几乎不受用于训练模型集合的代价函数的限制,因此它们可能非常有噪声;另一方面,那些很小的负值可能会传递关于由模型集合所获得的知识的有用信息。其中哪一种影响占主导地位是一个经验问题;我们表明,当蒸馏的模型太小,无法捕获繁琐模型中的所有知识时,不大不小的T效果最好,这强烈表明忽略大的负对数是有用的;

2.3 结果

原模型和原模型集合可以部署在一个小的蒸馏模型中,并且准确性可观:

利用soft targets即软投票机制可以达到regularization即防止过拟合的效果;

可以利用部分模型在部分类中的高准确率提高权重进而提高模型的准确度;或者对一些表现非常好的模型,给予其较高的T

三、整体总结

蒸馏可以很好地将知识从一个集成或从一个大的高度正则化的模型转移到一个更小的蒸馏模型中;

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

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

相关文章

CLIP 对比学习 源码理解快速学习

最快的学习方法,理清思路,找视频讲解,看源码逻辑: CLIP 源码讲解 唐宇 输入: 图像-文本成对配对的数据 训练模型的过程(自己理解): 怎么做的?:利用数据内部…

使用Python实现对word的批量操作

Python在平时写写小工具真是方便快捷,Pyhon大法好。以下所有代码都是找了好多网上的大佬分享的代码按照自己的需求改的。 调用的库为Python-docx、win32com、PyPDF2、xlwings(操作excel)。 因为公司的任务要对上千个word文件进行批量操作&a…

node.js学习(简单聊天室)

在掘金查看该文章 1. TCP服务搭建 1.1 socket 先来粗略了解下socket 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中&am…

uniGUI学习之Cookie

UniApplication.Cookies.SetCookie( const ACookieName: string, const AValue: string, AExpires: TDateTime 0, ASecure: Boolean False, AHTTPOnly: Boolean False, const APath: string / )

Module ‘app‘: platform ‘android-33‘ not found.

目录 一、报错信息 二、解决方法 一、报错信息 Module app: platform android-33 not found. 检查你的应用程序的build.gradle文件中的targetSdkVersion和compileSdkVersion是否正确设置为已安装的Android SDK版本。 确保你的Android Studio已正确安装并配置了所需的Android …

Axure动态面板的使用以及示例分享

目录 一. 什么是动态面板 二. 动态面板教程——以轮播图为例 2.1 创建动态面板 2.2 动态面板自适应大小 2.3 重复状态,将图片导入 2.4 添加交互事件——图片切换 2.5 效果展示 三. 多方式登录示例展示 四. 后台主界面左侧菜单栏示例展示 一. 什么是动态面板…

如何用Python实现量化交易?

Python是一种广泛使用的编程语言,它的语法简洁易学,而且有着丰富的库和工具,使得Python成为一种非常适合初学者和开发人员使用的语言。 Python量化是指使用Python编程语言进行量化投资研究和分析的过程。量化投资是一种基于数据和统计模型的…

scipy.signal.hilbert和scipy.fftpack.hilbert的区别

提示:分析scipy.signal.hilbert和scipy.fftpack.hilbert在应用的区别 一、代码 import matplotlib import matplotlib.pyplot as plt import numpy as np from pyhht import EMD from scipy.signal import hilbert import tftb.processing from scipy import signa…

DevOps云原生创建devops流水线(微服务项目上传git,打包镜像,部署k8s)

开发和运维人员的解决方案 一、中间件的部署(Sentinel/MongoDB/MySQL) 二、创建DevOps工程 邀请成员 三、创建流水线 四、编辑流水线 ①、拉取代码(若失败,则将制定容器改为maven) 若失败,则将命令改…

在 Spring Boot 中发送邮件简单实现

Spring Boot 对于发送邮件这种常用功能也提供了开箱即用的 Starter:spring-boot-starter-mail。 通过这个 starter,只需要简单的几行配置就可以在 Spring Boot 中实现邮件发送,可用于发送验证码、账户激活等等业务场景。 本文将通过实际的案…

vue中使用ailwind css

官网地址: 安装 - Tailwind CSS 中文网 推荐一个网站,里面可以查询所有的TailWindCSS的class样式: Tailwind CSS Cheat Sheet npm安装: 注意:1、这里要用npm,不要用cnpm。2、最好用install,不要…

手动添加Git Bash Here到右键菜单(超详细)

通过WindowsR快捷键可以打开“运行窗口”,在“窗口”中输入“regedit”,点击“确定”打开注册表。 依次进入HKEY_CLASSES_ROOT —-》 Directory —-》Background —-》 shell 路径为Computer\HKEY_CLASSES_ROOT\Directory\Background\shell 3.在“s…

overleaf 加载pdf格式的矢量图时,visio 图片保存为pdf格式,如何确保pdf页面大小和图片一致

Overleaf支持多种矢量图形格式,其中一些常见的包括: PDF(Portable Document Format): PDF是一种常见的矢量图形格式,Overleaf可以直接加载和显示PDF文件。许多绘图工具和LaTeX生成的图形都可以导出为PDF格式…

02-MQ入门之RabbitMQ简单概念说明

二:RabbitMQ 介绍 1.RabbitMQ的概念 RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按…

PythonGame图形绘制函数详解

文章目录 五种图形矩形圆形 五种图形 除了直线之外,pygame中提供了多种图形绘制函数,除了必要的绘图窗口、颜色以及放在最后的线条宽度之外,它们的参数如下表所示 函数图形参数/类型rect矩形Rectellipse椭圆Rectarc椭圆弧Rect, st, edcircl…

uniGUI之上传文件UniFileUploadButton

TUniFileUploadButton主要属性: Filter: 文件类型过滤,有图片image/* audio/* video/*三种过滤 MaxAllowedSize: 设置文件最大上传尺寸; Message:标题以及消息文本,可翻译成中文 TUniFileUploadButton控件 支持多…

Kafka-Kafka基本原理与集群快速搭建(实践)

Kafka单机搭建 下载Kafka Apache Download Mirrors 解压 tar -zxvf kafka_2.12-3.4.0.tgz -C /usr/local/src/software/kafkakafka内部bin目录下有个内置的zookeeper(用于单机) 启动zookeeper(在后台启动) nohup bin/zookeeper-server-start.sh conf…

HTML5+CSS3小实例:萤火虫动画效果

目录 一、运行效果 GIF效果 二、项目概述 三、开发环境 四、实现步骤及代码 1.创建空文件夹 2.完成页面内容 3.完成css样式 五、项目总结 六、源码获取 一、运行效果 GIF效果 二、项目概述 本项目是一个基于HTML和CSS的网页动画效果,展示了一个萤火虫的…

微服务保护--线程隔离(舱壁模式)

一、线程隔离的实现方式 线程隔离有两种方式实现: 线程池隔离 信号量隔离(Sentinel默认采用) 如图: 线程池隔离:给每个服务调用业务分配一个线程池,利用线程池本身实现隔离效果 信号量隔离&#xff1a…

Python学习笔记(五):list(列表)、tuple(元组)、str(字符串)、切片、set(集合)、dict(字典、映射)

目录 一、数据容器 1.list(列表) 2.list(列表)的遍历 3.tuple(元组) 4.str(字符串) 5.(序列)的切片 6.set(集合) 7.dict(字典、映射) 二、数据容器对比总结 三、数据容器的通用操作 四、字符串大小比较 一、数据容器 …