【AI】知识蒸馏-简单易懂版

1 缘起

最近要准备升级材料,里面有一骨碌是介绍LLM相关技术的,知识蒸馏就是其中一个点,
不过,只分享了蒸馏过程,没有讲述来龙去脉,比如没有讲解Softmax为什么引入T、损失函数为什么使用KL散度,想再进一步整理细节部分分享出来,这是其一。
其二是,近3个月没有写文章了,重拾笔头。
今年已经制定写作计划,后面会陆续分享出来。

2 原理

2.1 简介

知识蒸馏是一种模型压缩方法,其中一个小模型被训练来模仿一个预训练的大模型(或模型集合)。这种训练设置有时被称为“教师-学生”模式,其中大模型是教师,小模型是学生。
在这里插入图片描述

该方法最早由Bucila等人在2006年提出,并由Hinton等人在2015年进行了推广。Distiller中的实现基于后者的论文。在这里,我们将提供该方法的概述。更多信息,可以参考该论文https://arxiv.org/abs/1503.02531。
在这里插入图片描述

2.2 为什么引入T

在蒸馏过程中,直接计算教师模型概率分布,即教师模型上的softmax函数的输出,然而,在许多情况下,这个概率分布中正确类别的概率非常高,而其他类别的概率非常接近于0,导致学生模型学习到的信息并没有提供比数据集中已经提供的真实标签更多的信息。Softmax如下:
p i = e z i ∑ j N e z j p_{i}= \frac{e^{z_{i} } }{\sum_{j}^{N}e^{z_{j} } } pi=jNezjezi

为了解决这个问题,Hinton等人在2015年引入了“softmax温度”的概念。类别i的概率pi从logits z计算得出,公式如下:
p i = e z i T ∑ j N e z j T p_{i}= \frac{e^{\frac{z_{i} }{T} } }{\sum_{j}^{N}e^{\frac{z_{j} }{T}} } pi=jNeTzjeTzi

其中,T是温度参数,用于控制概率分布的平滑程度。当T较高时,概率分布会更加平滑,从而提供更多的信息,有助于学生模型更好地学习教师模型的知识。

2.3 蒸馏过程

为提升学生模型的性能,学些到更多的信息,引入T,最终的蒸馏过程如下图所示,知识蒸馏有两个Loss,即学生模型与教师模型的 L o s s d i s t i l l a t i o n Loss_{distillation} Lossdistillation,学生模型与真实值的 L o s s s t u d e n t Loss_{student} Lossstudent,其中,教师模型的预测值为软标签,学生模型温度t的的预测值为软预测值,学生模型T=1的预测值为硬预测值。

在这里插入图片描述
学生损失函数:
L o s s s t u d e n t = − ∑ i = 1 N y i l o g q i ( 1 ) Loss_{student}=-\sum_{i=1}^{N}y_{i}logq_{i}^{(1)} Lossstudent=i=1Nyilogqi(1)
蒸馏损失函数:
L o s s d i s t i l l a t i o n = − t 2 ∑ i = 1 N p i ( t ) l o g q i ( t ) Loss_{distillation}=-t^{2} \sum_{i=1}^{N}p_{i}^{(t)}logq_{i}^{(t)} Lossdistillation=t2i=1Npi(t)logqi(t)
最终损失函数:
L o s s t o t a l = ( 1 − α ) L o s s s t u d e n t + α L o s s d i s i l l a t i o n Loss_{total}=(1-\alpha )Loss_{student}+\alpha Loss_{disillation} Losstotal=(1α)Lossstudent+αLossdisillation

2.4 LLM蒸馏损失函数

LLM蒸馏损失函数使用KL散度。
L o s s d i s t i l l a t i o n − L L M = − t 2 K L ( p ( t ) ∣ ∣ q ( t ) ) = − t 2 ∑ i = 1 N p i ( t ) l o g p i ( t ) q i ( t ) Loss_{distillation-LLM}=-t^{2}KL(p^{(t)}||q^{(t)})=-t^{2}\sum_{i=1}^{N}p_{i}^{(t)}log\frac{p_{i}^{(t)} }{q_{i}^{(t)} } LossdistillationLLM=t2KL(p(t)∣∣q(t))=t2i=1Npi(t)logqi(t)pi(t)

2.4.1 为什么使用KL散度

KL散度的概念来源于概率论和信息论中。KL散度又被称为:相对熵、互熵、鉴别信息、Kullback熵、Kullback-Leible散度(即KL散度的简写)。KL 散度比交叉熵更适合作为蒸馏损失,因为当学生模型完美匹配教师模型时,蒸馏损失会为零,而交叉熵却不为零,直接使用交叉熵作为蒸馏损失可能会导致损失随着 batch 波动,所以使用KL散度作为蒸馏损失函数。

3 小结

(1)Softmax引入T用于计算学生和老师预测值概率分布。
(2)使用KL散度计算学生与老师损失;
(3)T=1计算学生模型预测值概率分布。

4 参考

https://zhuanlan.zhihu.com/p/692216196
https://blog.csdn.net/keeppractice/article/details/145419077
https://intellabs.github.io/distiller/knowledge_distillation.html
https://hsinjhao.github.io/2019/05/22/KL-DivergenceIntroduction/

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

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

相关文章

批量将PPT转换成多张图片

以下是一个使用Python将PowerPoint文件(PPT/PPTX)批量转换为多张图片的代码示例。该方案通过comtypes库调用本地Office的COM接口实现转换,需确保已安装Microsoft PowerPoint。 import os import comtypes.client from comtypes import COMEr…

单例模式的经典实现

单例模式(Singleton)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在MyBatis、Redisson、AMQP等依赖包中,单例模式被广泛应用。以下是这些框架中单例模式的经典实现及举例: 1. My…

2024年数维杯数学建模B题生物质和煤共热解问题的研究解题全过程论文及程序

2024年数维杯数学建模 B题 生物质和煤共热解问题的研究 原题再现: 随着全球能源需求的不断增长和对可再生能源的追求,生物质和煤共热解作为一种潜在的能源转化技术备受关注。生物质是指可再生能源,源自植物和动物的有机物质,而煤…

灵茶山艾府基础算法精讲

day1 (1遍)167. 两数之和 II - 输入有序数组 https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/solution/san-shu-zhi-he-bu-hui-xie-xiang-xiang-sh-6wbq/ 15. 三数之和 https://leetcode.cn/problems/3sum/solution/shuang-zhi-zhen-…

图解AUTOSAR_CP_LargeDataCOM

AUTOSAR LdCom模块详解 大型数据通信模块的架构与实现 目录 AUTOSAR LdCom模块详解 目录1. 概述2. 模块架构3. 数据流程 3.1 整体数据流3.2 数据发送流程3.3 数据接收流程4. 配置结构5. 总结1. 概述 LdCom(Large Data COM)是AUTOSAR中的轻量级通信模块,专为高效传输大型或动…

Flink 自定义数据源:从理论到实践的全方位指南

目录 第一章:自定义数据源的基础概念 数据源是什么?它在 Flink 中扮演什么角色? Flink 的内置数据源:开箱即用的 “标配” 为什么需要自定义数据源?它的杀手锏在哪? 第二章:自定义数据源的实现之道 接口选择:从简单到高级,选对工具事半功倍 SourceFunction:入门…

HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析

HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析 一、HarmonyOS应用框架设计理念 HarmonyOS作为全场景分布式操作系统,其应用框架设计遵循"一次开发,多端部署"的核心原则。通过创新的原…

Spring相关API

1是相对路径 2 是绝对路径 3 在注解时使用

Netty源码—客户端接入流程

1.关于Netty客户端连接接入问题整理 一.Netty是在哪里检测有新连接接入的? 答:boss线程第一个过程轮询出ACCEPT事件,然后boss线程第二个过程通过JDK底层Channel的accept()方法创建一条连接。 二.新连接是怎样注册到NioEventLoop线程的&#x…

python全栈-前端

python全栈-前端 文章目录 HTML标签段落p、换行br、水平线hr图片img路径src超文本链接a超链接之锚点href#id文本有序列表ol无序列表ul自定义列表表格table表格属性单元格合并 表单Forminput标签HTML5新增type属性HTML5新增常用属性 实体字符块元素与行内元素/内联元素容器元素d…

领域驱动设计(DDD)实践入门

文章目录 1.认识领域驱动设计1.1 简介1.2 发展历史1.3 DDD 的兴起 2.从一个简单案例2.1 转账需求2.2 设计的问题2.3 违反的设计原则 3.使用 DDD 进行重构抽象数据存储层抽象第三方服务抽象中间件封装业务逻辑重构后的架构 4.小结参考文献 1.认识领域驱动设计 1.1 简介 领域驱…

nuxt3网站文章分享微信 ,QQ功能

1.安装 npm install qrcode --save-dev 2.组件使用 <div class"share"><div style"line-height: 69px; color: #fff;width: 100px;"><p style"text-align: center;">分享:</p></div><div click"shareToMi…

VMWare Ubuntu 详细安装教程

VMWare Ubuntu 详细安装教程 一、下载安装VMware二、下载 Ubuntu 镜像文件三、安装 Ubuntu四、开启虚拟机 一、下载安装VMware 官网下载地址https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion知乎大佬的博客原文&#xff0c;含下载地址https://zhua…

MySQL里的锁有哪些

MySQL 的锁机制是实现并发控制的核心&#xff0c;不同层级的锁适用于不同场景&#xff0c;以下是对其锁类型的系统分类及详细说明&#xff1a; 一、按锁粒度划分 1. 全局锁&#xff08;Global Lock&#xff09; 用途&#xff1a;锁定整个数据库实例&#xff0c;用于全库备份。…

Spring WebFlux 教程

Spring WebFlux 教程 Spring WebFlux 是 Spring Framework 5 引入的一种新的响应式编程框架&#xff0c;旨在处理高并发、高性能和实时数据流应用。与传统基于线程阻塞的 Spring MVC 不同&#xff0c;WebFlux 采用了非阻塞、事件驱动的编程模型&#xff0c;能够更加高效地利用…

SCI英文论文Accepted后的第一步——Rights and Access

SCI英文论文Accepted后的第一步——Rights and Access 目录 SCI英文论文Accepted后的第一步——Rights and AccessBased on information provided the embargo period/end date is 24 months. 因为选择闭源**Rights and Access(版权与访问权限)**环节是关键第一步,具体操作流…

Qt文件管理系统

引言 今天我将使用model/view模型视图框架来完成一个简单的Qt文件管理系统&#xff0c;主要使用到了QTreeView、QTabelView视图和QFileSystemModel文件系统模型。 界面设计 使用Qt创建项目并勾选创建ui文件&#xff0c;打开ui文件&#xff0c;使用Tree View、Table View、St…

《可爱风格 2048 游戏项目:HTML 实现全解析》

一、引言 在如今的数字化时代&#xff0c;小游戏以其简单易上手、趣味性强的特点深受大家喜爱。2048 游戏作为一款经典的数字合并游戏&#xff0c;拥有庞大的玩家群体。本文将详细介绍一个用单文件 HTML 实现的可爱风格 2048 游戏项目&#xff0c;它不仅具备传统 2048 游戏的基…

CSS3:深度解析与实战应用

CSS3&#xff1a;深度解析与实战应用详解 1. 选择器增强2. 盒模型扩展3. 渐变和背景4. 转换和动画总结 CSS3 是 CSS&#xff08;层叠样式表&#xff09;的最新版本&#xff0c;它引入了许多新的特性和功能&#xff0c;使得网页的样式设计更加灵活、丰富和具有动态效果。在本文中…

C语言 —— 此去经年梦浪荡魂音 - 深入理解指针(卷四)

目录 1. 回调函数 2. qsort函数 2.1 使用qsort函数排序整型数据 2.2 使用qsort排序结构数据 2.3 使用冒泡排序模拟实现qsort函数 1. 回调函数 回调函数其实就是一个通过函数指针调用的函数&#xff0c;如果你把函数的指针作为参数传递给另一个函数&#xff0c;当这个指针被…