当前位置: 首页 > news >正文

知识蒸馏——深度学习的简化之道 !!

文章目录

前言

1、什么是知识蒸馏

2、知识蒸馏的原理

3、知识蒸馏的架构

4、应用

结论


前言

在深度学习的世界里,大型神经网络因其出色的性能和准确性而备受青睐。然而,这些网络通常包含数百万甚至数十亿个参数,使得它们在资源受限的环境下(如移动设备和嵌入式系统)运行变得不切实际。知识蒸馏(Knowledge Distillation)技术应运而生,旨在解决这一挑战,通过将大型网络的知识“蒸馏”到更小、更高效的模型中,以实现类似的性能,但以更低的计算成本。


1、什么是知识蒸馏

知识蒸馏(Distilling the Knowledge in a Neural Network)由Hinton等人于2015年提出。知识蒸馏是一种模型压缩技术,其基本思想是通过训练一个较小的模型(学生模型)来模仿一个大型的、已经训练好的模型(教师模型)。与传统的训练方法相比,知识蒸馏不仅仅依赖于硬标签(即真实标签),而且利用教师模型的预测结果(软标签)来传递更丰富的信息。

2、知识蒸馏的原理

通过训练一个小模型来模仿一个预先训练好的大模型,从而将大模型中所含的“暗知识”传递给小模型。在这个过程中,通过最小化损失函数来传递知识,label是大模型预测的类概率分布。为了提供更多信息,引入了“softmax温度”的概念,通过调整温度参数T,可以影响softmax函数生成的概率分布。当T=1时,得到标准的softmax函数,而当T增大时,softmax函数生成的概率分布变得更加柔和,提供了更多关于模型认为哪些类别与预测类别更相似的信息。这种调整温度的方法可以帮助传递大模型中所含的“暗知识”到小模型中。

3、知识蒸馏的架构

知识蒸馏的两个阶段:

  • 教师模型训练(Teacher Model):使用大型且复杂的模型(如深层神经网络)对训练数据进行训练。这个模型作为知识提供者,由于其复杂性和预训练的专业性,它可以提供更准确和丰富的预测结果。
  • 学生模型训练(Student Model):通过使用教师模型的输出作为目标,用一个更简单的模型来训练。学生模型通常是一个浅层次的模型,它的结构和参数比较简单,容易训练和部署。

损失函数的构成:

  • 蒸馏损失(distillation loss):通过最小化一个损失函数来传递知识,其Label是大模型预测的类概率分布。这个损失函数是基于老师模型的软目标(soft label),用来指导学生模型的训练,使得学生模型能够更好地模仿老师模型的预测行为。
  • 学生损失(student loss):学生模型自身的损失函数,通常用来指导学生模型学习正确的标签信息,以便学生模型能够在接受“暗知识”的同时,保持对真实标签(hard label)的准确预测能力。
  • 将两个损失函数进行加权求和,以平衡模型学习“暗知识”和准确预测真实标签。这样可以确保学生模型在蒸馏过程中既能够有效地获得来自老师模型的知识,又能够保持对真实标签的准确预测能力。

特点:

  • 模型压缩:知识蒸馏允许将复杂模型中的知识压缩到一个更小和更简单的模型中,减少了模型的复杂性和存储需求。
  • 提高推理性能:学生模型通过从教师模型学习到的知识来提高自身的推理性能,实现了在相对简单的模型上获得接近复杂模型效果的性能。
  • 加速推理:由于学生模型相对较小和简单,它的推理速度更快,可在资源有限的环境中使用,如嵌入式设备或移动设备。
  • 知识蒸馏可以被看作是一种迁移学习(利用一个领域的知识来改善另一个领域学习的技术)的形式,将知识从一个模型迁移到另一个模型以改善后者的性能。

  总之,通过知识蒸馏可以将复杂模型中的宝贵知识传递给简化的模型,从而在保持性能的同时减少模型的复杂度,使得小模型可以在资源受限的环境中进行高效部署,获得更高的推理效率和速度。

4、应用

知识蒸馏的应用范围广泛,它在许多深度学习领域中都发挥着重要作用,包括但不限于图像识别、自然语言处理和语音识别。以下是一些主要应用场景:

  1. 移动和边缘计算:在移动设备和边缘设备上运行深度学习模型时,计算资源和电源通常受限。通过知识蒸馏,可以将大型模型的知识迁移到更小、更高效的模型中,从而使得这些模型能够在资源有限的设备上运行,同时保持较高的准确率。
  2. 实时应用:对于需要实时响应的应用,如视频分析和在线翻译,快速的推理速度至关重要。知识蒸馏可以帮助开发更快的模型,从而减少延迟时间,提高用户体验。
  3. 模型融合:知识蒸馏也可以用于模型融合,即将多个模型的知识融合到一个模型中。这不仅能提高模型的性能,还能减少部署多个模型所需的资源。
  4. 隐私保护:通过知识蒸馏,可以在不直接访问敏感或私有数据的情况下,从一个已经训练好的模型传递知识到另一个模型。这对于遵守数据隐私法规特别重要。

结论

知识蒸馏为解决深度学习模型在资源受限环境中的部署和应用提供了一种有效的解决方案。通过将大型模型的复杂性和知识转移到更小、更高效的模型中,它不仅有助于节省计算资源,还保持了模型的性能。尽管存在一些挑战,但随着研究的深入,知识蒸馏有望在未来的深度学习应用中发挥更大的作用。

参考:

Distilling the Knowledge in a Neural Network

https://arxiv.org/pdf/1503.02531.pdf

https://intellabs.github.io/distiller/knowledge_distillation.html

萌即是正义——观其形明其意

相关文章:

知识蒸馏——深度学习的简化之道 !!

文章目录 前言 1、什么是知识蒸馏 2、知识蒸馏的原理 3、知识蒸馏的架构 4、应用 结论 前言 在深度学习的世界里,大型神经网络因其出色的性能和准确性而备受青睐。然而,这些网络通常包含数百万甚至数十亿个参数,使得它们在资源受限的环境下&…...

【爬虫】Selenium打开新tab页截图并关闭

如果说 你曾苦过我的甜 我愿活成你的愿 愿不枉啊 愿勇往啊 这盛世每一天 山河无恙 烟火寻常 可是你如愿的眺望 孩子们啊 安睡梦乡 像你深爱的那样 🎵 王菲《如愿》 在自动化测试和网页抓取中,Selenium WebDriver 是一个强大的工具&…...

09 事务和连接池

文章目录 properties文件连接池service层实现类dao层实现类dao层实现类 连接池类: 创建线程池静态常量,用于放连接。 创建Properties静态常量,用于解析properties文件 静态代码块中,解析properties文件,将解析结果用于创建连接池 …...

P4344 [SHOI2015] 脑洞治疗仪 线段树+二分

主要是维护一个连续区间,比较经典的题目,还要考虑一下二分的情况,否则很难处理,比较有难度。这里和序列操作一题的区别是不需要考虑1的个数,因为不需要取反。传送门https://www.luogu.com.cn/problem/P4344 #include&…...

解决大型语言模型中的幻觉问题:前沿技术的综述

大型语言模型中的幻觉问题及其解决技术综述 摘要 大型语言模型(LLM)如GPT-4、PaLM和Llama在自然语言生成能力方面取得了显著进步。然而,它们倾向于产生看似连贯但实际上不正确或与输入上下文脱节的幻觉内容,这限制了它们的可靠性和安全部署。随着LLM在…...

机器学习流程—AutoML

文章目录 机器学习流程—AutoMLAutoML工具Auto-SKLearnMLBoxTPOTRapidMinerPyCaretAuto-KerasH2OAutoML谷歌AutoML云Uber LudwigTransmogrifAIAutoGluonAutoWekaDataRobot...

Ubuntu 23.10 tar包安装和配置Elasticsearch kibana 7.13.3

目录 一、环境说明 二、准备工作 三、安装elasticsearch 3.1 安装elasticsearch 3.2 添加服务和设置开机启动 四、安装kibana 4.1. 安装kibana 4.2 添加服务和设置开机启动 出于工作需要,需要在Ubuntu 23.10系统上通过tar包方式安…...

glibc内存管理ptmalloc

1、前言 今天想谈谈ptmalloc如何为应用程序分配释放内存的,基于以下几点原因才聊它: C/C 70%的问题是内存问题。了解一点分配器原理对解决应用程序内存问题肯定有帮助。C也在用ptmalloc. 当你在C中new一个对象时,底层还是依赖glibc中的ptma…...

HarmonyOS入门学习

HarmonyOS入门学习 前言快速入门ArkTS组件基础组件Image组件Text组件TextInput 文本输入框Buttonslider 滑动组件 页面布局循环控制ForEach循环创建组件 List自定义组件创建自定义组件Builder 自定义函数 状态管理Prop和LinkProvide和ConsumeObjectLink和Observed ArkUI页面路由…...

【Mock|JS】Mock的get传参+获取参数信息

mockjs的get传参 前端请求 const { data } await axios("/video/childcomments", {params: {sort: 1,start: 2,count: 5,childCount: 6,commenIndex: 0,},});后端获取参数 使用正则匹配url /*** # 根据url获取query参数* param {Url} urlStr get请求获取参数 eg:…...

spring cloud gateway k8s优雅启停

通过配置readiness探针和preStop hook,实现优雅启动和停止(滚动部署) 1. k8s工作负载配置 readinessProbe:httpGet:path: /datetimeport: 8080scheme: HTTPinitialDelaySeconds: 30timeoutSeconds: 1periodSeconds: 30successThreshold: 1fa…...

嵌入式软件面试-linux-中高级问题

Linux系统启动过程: BIOS自检并加载引导程序。引导程序(如GRUB)加载Linux内核到内存。内核初始化硬件,加载驱动,建立内存管理。加载init进程(PID为1),通常是systemd或SysVinit。init…...

css禁用元素指针事件,鼠标穿透,点击下层元素,用`pointer-events:none;`

pointer-events: 对鼠标事件的反应 MDN pointer-events 英文 https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events 菜鸟教程 CSS pointer-events 属性 https://www.runoob.com/cssref/css3-pr-pointer-events.html 常用取值 auto 和 none pointer-events: aut…...

Eureka的介绍和作用,以及搭建

一、Eureka的介绍和作用 Eureka是Netflix开源的一种服务发现和注册工具,它为分布式系统中的服务提供了可靠的服务发现和故障转移能力。Eureka是Netflix的微服务架构的关键组件之一,它能够实时地监测和管理服务实例的状态和可用性。 在Eureka架构中&…...

shell和linux的关系

Shell 和 Linux 之间存在密切的关系,但它们并不是同一个东西。让我们分别了解一下它们: Linux: Linux 是一个自由和开放源代码的类UNIX操作系统。 Linux 的内核由林纳斯托瓦兹(Linus Torvalds)于1991年首次发布&…...

数据在内存的存储

整数在内存中的存储 我们来回顾一下,整数在计算机是以补码的形式进行存储的,整数分为正整数和负整数,正整数的原码、反码和补码是一样的,负整数的原码、反码和补码略有不同(反码是原码除符号位,其他位按位取…...

JavaScript之ES中的类继承与Promise

类 ES5中的类及继承 //人function Person(name,age){this.name name;this.age age;}Person.prototype.eat function () {console.log(this.name "eat");}//程序员,继承,人function Programmer(name,age,language){//构造函数继承Person.…...

​浅析多模态大模型技术路线梳理

前段时间 ChatGPT 进行了一轮重大更新:多模态上线,能说话,会看图!微软发了一篇长达 166 页的 GPT-4V 测评论文,一时间又带起了一阵多模态的热议,随后像是 LLaVA-1.5、CogVLM、MiniGPT-5 等研究工作紧随其后…...

使用 Amazon SageMaker 微调 Llama 2 模型

本篇文章主要介绍如何使用 Amazon SageMaker 进行 Llama 2 模型微调的示例。 这个示例主要包括: Llama 2 总体介绍Llama 2 微调介绍Llama 2 环境设置Llama 2 微调训练 前言 随着生成式 AI 的热度逐渐升高,国内外各种基座大语言竞相出炉,在其基础上衍生出…...

牛客小白月赛86(D剪纸游戏)

题目链接:D-剪纸游戏_牛客小白月赛86 (nowcoder.com) 题目描述: 输入描述: 输入第一行包含两个空格分隔的整数分别代表 n 和 m。 接下来输入 n行,每行包含 m 个字符,代表残缺纸张。 保证: 1≤n,m≤10001 字符仅有 . 和 * 两种字符&#xf…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...