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

文章目录

    • 一、完整代码
    • 二、论文解读
      • 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.mzph.cn/news/225382.shtml

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

相关文章

探索Linux服务器配置信息的命令

目录 前言1 uname2 lscpu3 free4 df5 lspci6 lsusb7 lshw结语 前言 Linux系统提供了许多命令,用于获取和查看服务器的软硬件配置信息。这些命令可以帮助管理员和用户了解系统的状态、资源使用情况以及硬件设备的相关信息。以下是一些常用的命令以及它们的作用、使用…

[Vulnhub靶机] DC-1

[Vulnhub靶机] DC-1靶机渗透思路及方法(个人分享) 靶机下载地址: https://download.vulnhub.com/dc/DC-1.zip 靶机地址:192.168.67.25 攻击机地址:192.168.67.3 一、信息收集 1.使用 arp-scan 命令扫描网段内存活的…

html的学习笔记

开发工具:vscode 文字标签 h1:一级标题,h2:二级标题h6 p:段落标签 hr:分隔线 br:换行 strong/b:文字加粗 ins/u:下划线 em/i:倾斜 del/s:删除线 媒体标签 图片…

vue中使用ailwind css

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

泛型的相关内容

首先我们来了解一下什么是泛型&#xff0c;泛型的作用又是什么。 泛型的形式是 ArrayList<Object> objects new ArrayList<>(); 这里的<Object>这个就是泛型&#xff0c;添加泛型的作用又是什么呢&#xff0c;它可以限制添加对象的类型&#xff0c;比如A…

黑马点评05分布式锁 1互斥锁和过期时间

实战篇-09.分布式锁-基本原理和不同实现方式对比_哔哩哔哩_bilibili 1.分布式锁 因为jvm内部的sychonized锁无法在不同jvm之间共享锁监视器&#xff0c;所以需要一个jvm外部的锁来共享。 2.redis setnx互斥锁 加锁解锁即可 2.1不释放锁可能死锁 redis 的setnx不会自动释放锁…

用CC三维建模建出的OSGB格式,用模方打不开,显示该路径包含OSGB瓦块数量0,是什么原因?

答&#xff1a;模方只识别tile命名的模型文件&#xff0c;此模型是不分块输出&#xff0c;要平面切块重新跑。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能&…

巴贝拉葡萄酒是单一品种还是混合品种制成的?

大多数巴贝拉葡萄酒都是由单一的巴贝拉葡萄品种制成的&#xff0c;许多意大利葡萄酒商开始尝试在巴贝拉葡萄酒中加入其它葡萄品种&#xff0c;其中两个最受欢迎的意大利品种是皮埃蒙特的巴贝拉德阿尔巴和达斯蒂。和朋友在一家意大利餐厅吃饭&#xff0c;被酒单吓到了&#xff1…

10.1Linux输入子系统介绍

输入设备介绍 鼠标、键盘、按键、触摸屏等提供输入支持的设备都属于输入设备&#xff0c;在Linux也提供了一套驱动框架“input 子系统”与之对应&#xff0c;用于抽象输入设备&#xff0c;并提供管理输入设备驱动和输入事件处理程序的功能 input 子系统 input 子系统用于管理…

GPT 魔力涌现

GPT 二、Prompt 的典型构成 角色&#xff1a;给 AI 定义一个最匹配任务的角色&#xff0c;比如&#xff1a;「你是一位软件工程师」「你是一位小学老师」指示&#xff1a;对任务进行描述上下文&#xff1a;给出与任务相关的其它背景信息&#xff08;尤其在多轮交互中&#xff…

Java: Random

/*** encoding: utf-8* 版权所有 2023 涂聚文有限公司* 许可信息查看&#xff1a;* 描述&#xff1a; //https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/RandomStringUtils.html* //https://commons.apache.org/pro…

详解RTC:以华人文化打造链上生态

文化是人类在发展的历史长河中淘洗出来的智慧结晶&#xff0c;随着人类社会的进步和变迁&#xff0c;经历了从口口相传到互联网等不同历史时代的传承和创新。在数字技术飞速发展的当今&#xff0c;区块链技术为文化的创新与传承提供了全新的空间和方式&#xff0c;使其得以在新…

ACL与NAT

目录 一、ACL &#xff08;一&#xff09;ACL基本理论 &#xff08;二&#xff09;ACL的类型 1.基本ACL 2.高级ACL 3.二层ACL &#xff08;三&#xff09;基本原理 &#xff08;四&#xff09;项目实验 通配符掩码 二、NAT &#xff08;一&#xff09;基本理论 &am…

ansible的基本使用

本章主要介绍在RHEL8中如何安装ansible 及 ansible 的基本使用。 ansible是如何工作的在 RHEL8中安装ansible编写ansible.cfg和清单文件ansible 的基本用法 如果管理的服务器很多&#xff0c;如几十台甚至几百台&#xff0c;那么就需要一个自动化管理工具了&#xff0c; ansi…

跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)

本文为转载 原文链接&#xff1a; 采用Qt快速绘制多条曲线&#xff08;折线&#xff09;&#xff0c;跟随鼠标动态显示线上点的值&#xff08;基于Qt的开源绘图控件QCustomPlot进行二次开发&#xff09; 内容如下 QCustomPlot是一个开源的基于Qt的第三方绘图库&#xff0c;能…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion 黑白老照片上色修复

在这个时代,我们习惯于拥有高清、色彩丰富的照片,然而,那些古老的黑白色老照片由于年代的久远,往往会出现模糊、破损等现象。 那么今天要给大家介绍的是,用 Stable Diffusion 来修复老照片。 前段时间 ControlNet 的除了上线了“IP-Adapter”模型以外还增加另一个…

【深度学习】TensorFlow深度模型构建:训练一元线性回归模型

文章目录 1. 生成拟合数据集2. 构建线性回归模型数据流图3. 在Session中运行已构建的数据流图4. 输出拟合的线性回归模型5. TensorBoard神经网络数据流图可视化6. 完整代码 本文讲解&#xff1a; 以一元线性回归模型为例&#xff0c; 介绍如何使用TensorFlow 搭建模型 并通过会…

【Android12】Android Framework系列--AMS启动Activity分析

AMS启动Activity分析 通过ActivityManagerService(AMS)提供的方法&#xff0c;可以启动指定的Activity。比如Launcher中点击应用图标后&#xff0c;调用AMS的startActivity函数启动应用。 AMS提供的服务通过IActivityManager.aidl文件定义。 // frameworks/base/core/java/an…