ViT:5 Knowledge Distillation

实时了解业内动态,论文是最好的桥梁,专栏精选论文重点解读热点论文,围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。当然最重要的是订阅“鲁班模锤”

知识蒸馏是一种技术,在这种技术中,较小的模型从更大、更复杂的模型中学习以复制其性能,从而在保持预测准确性的同时实现高效部署。视觉转换器(ViT)的知识蒸馏 (KD)技术可分为两种主要类型:同态KD 和异态KD。

知识蒸馏

知识蒸馏是一种技术,旨在将一个庞大而复杂的模型(教师模型)压缩成一个更小、更简单的模型(学生模型),同时在一定程度上保留教师模型的表现。知识蒸馏并不是一种新方法,它是由Critstian Bucilua等人在 2006年的这篇论文中提出的。

LLM蒸馏将大型生成模型定位为“教师”,将较小的模型定位为“学生”。学生模型可以是简单的模型,如逻辑回归,也可以是基础模型,如BERT。在最基本的蒸馏版本中,数据科学家从未标记的数据开始,并要求LLM对其进行标记。然后,数据科学家使用合成标记的数据来训练“学生”模型,该模型将反映“教师”模型在原始数据集定义的任务中的表现。

logits是模型在应用softmax获得实际概率之前的原始输出。大模型的最终输出是一个向量,里面是所有候选Token的概率,加起来是100%。这个概率是最终的输出(logits)经过softmax归一化得到的。上图是有标签的蒸馏,也有无标签的蒸馏。

在基于反应的知识蒸馏中,教师模型的输出用作学生模型的软标签。学生模型经过训练,可以预测教师迷行的软标签,而不是实际的标签。这样学生就可以从老师的知识中学习,而无需访问老师的参数或架构。使用这种方法,知识蒸馏可以白盒 KD和黑盒 KD。

在黑盒KD中,只有教师模型的提示和响应可用,方法适用于logits无法获取的模型。而在白盒KD中,使用的是教师模型生成的logits,它适用于生成logits的开源模型。

知识蒸馏能够成功的原因在于损失函数。而损失函数包含3个核心组件:教师输出的logits、学生输出的logits和Temperature<在使用大模型的时候,温度代表则发散度和随机度>。

大白话而言:教师模型生成logits,学生模型也生成logits。任何两个类的 logit都无法比较,因此用softmax规范化logit之后,再来对比两个输出的概率分布。目的还是为了减少教师模型和学生模型的概率分布差异,让学生模型的行为更像教师模型。

这里不得不提到Kullback-Leibler散度损失(或 KL 散度损失)是计算任意两个概率分布之间差异的一种方法。以下公式描述了 KD 损失:

同态KD

Homomorphic KDs

同态KD可进一步分为logit级KD、Patch(小图块)级KD、模块级KD和功能级的KD。

TinyViT基于logit级别,在预训练期间应用蒸馏技术,其中来自大型教师模型的logits预先存储在硬件中,从而在将知识传输到缩小的学生转换器时实现内存和计算效率。

像DeiT-Tiny这样的Patch级技术训练一个小型学生模型,以匹配Patch级结构上的预训练教师模型,然后在计算流形蒸馏损失时,主要是通过比较和匹配选定的教师模型和学生模型层之间的特征关系来实现的。

假设教师模型通过卷积神经网络(CNN)提取了图像的特征,在高维空间中形成了一定的结构。学生模型是基于Transformer的模型,可能无法直接理解卷积提取的特征结构。通过引入流形蒸馏损失,学生模型可以学习如何在其Transformer的特征空间中重现或近似教师模型在卷积层中的特征结构,从而更有效地学习和迁移知识。

m2mKD方法的核心思想是通过元模型M孵化出一系列教师模型,然后通过替换和比较不同层的教师-学生模型对来进行知识蒸馏。这种方法可以帮助学生模型从多个教师模型中学习,进而提升其性能和泛化能力。

MiniViT演示的特征级KD方法结合了连续变压器模块的权重。

MiniViT的知识蒸馏通过将教师模型(Teacher Model)的知识传递给学生模型(Student Model)来实现模型压缩,从而在保持高性能的同时,降低计算和存储成本。该框架将模型分为多个阶段(Stage 1到Stage 4),每个阶段包含若干个Transformer层。通过设计有效的损失函数(预测损失、注意力损失和隐藏层损失),学生模型能够学习到教师模型的知识。

具体的知识蒸馏过程包括初始化、训练、损失计算、反向传播和迭代步骤。在这个过程中,学生模型逐步调整参数,使其输出接近教师模型。此外,MiniViT的详细Transformer块结构通过多头注意力、多层感知机、添加与归一化层等组件的权重共享和增加参数多样性,进一步优化了模型压缩效果。总之,MiniViT通过配置阶段数量和共享权重,实现了高效的模型压缩,并通过知识蒸馏技术,确保压缩后的模型在性能上接近原始大型模型。

异形KD

Heteromorphic KDs

这种方法主要涉及在具有不同架构的模型之间转移知识。例如,DearKD 提出了一种新颖的两阶段框架,它脱离了传统的ViT架构方法。

在第一阶段,他们使用普通的KD策略将CNN特征转移到ViT学生模型。在随后的阶段,如果真实样本有限,则它们会引入保持边界的发散内损失以增强该过程。

类似地,CiT 提出了一种异形KD策略,其中知识从多位老师模型转移,从而提高了ViT学生模型的性能。

CivT模型不仅继承了ViT的Transformer架构,还通过引入Conv token和Inv token来扩展其能力,使其能够从卷积模型和逆(内)卷积模型中学习特定的图像类别描述信息,从而提升其在图像分类和理解任务中的性能和表现。

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

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

相关文章

Java17 --- SpringSecurity之前后端分离处理

目录 一、实现前后端分离 1.1、导入pom依赖 1.2、认证成功处理 1.3、认证失败处理 1.4、用户注销处理 1.5、请求未认证处理 1.6、跨域处理 1.7、用户认证信息处理 1.8、会话并发处理 一、实现前后端分离 1.1、导入pom依赖 <dependency><groupId>co…

【python】python股票量化交易策略分析可视化(源码+数据集+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【fastapi+mongodb】使用motor操作mongodb(三)

本篇文章介绍mongodb的删和改&#xff0c;下面是前两篇文章的链接&#xff1a; 【fastapimongodb】使用motor操作mongodb 【fastapimongodb】使用motor操作mongodb&#xff08;二&#xff09; delete delete 的用法基本和查找一致&#xff0c;包括delete_one&#xff08;删除…

借助AI快速提高英语听力:如何获得适合自己的听力材料?

英语听力是英语学习中的一个重要组成部分&#xff0c;它对于提高语言理解和交流能力至关重要。可理解性学习&#xff08;comprehensible input&#xff09;是语言习得理论中的一个概念&#xff0c;由语言学家Stephen Krashen提出&#xff0c;指的是学习者在理解语言输入的同时&…

时空预测 | 基于深度学习的碳排放时空预测模型

时空预测 模型描述 数据收集和准备&#xff1a;收集与碳排放相关的数据&#xff0c;包括历史碳排放数据、气象数据、人口密度数据等。确保数据的质量和完整性&#xff0c;并进行必要的数据清洗和预处理。 特征工程&#xff1a;根据问题的需求和领域知识&#xff0c;对数据进行…

Canvas绘制图片和区域

如何使用Canvas在图片上绘制区域&#xff1f; 一. 首先&#xff0c;我们需要初始化三个canvas画布&#xff08;初始化Canvas&#xff09; initCanvas() {// 初始化canvas画布let canvasWrap document.getElementsByClassName("canvas-wrap");this.wrapWidth canva…

Android中如何动态的调整Dialog的背景深暗

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 在 Android 开发中&#xff0c;当你使用 Dialog 或 DialogFragment 时&#xff0c;可以通过设置 Window 的背景变暗来突出它的可见性。这个效果…

【密码学】分组密码

文章目录 分组密码的模式分组密码与流密码模式明文分组与密文分组 ECB模式ECB定义ECB特点对ECB模式的攻击改变分组顺序攻击 CBC模式CBC定义初始化向量IVCBC特点对CBC模式的攻击对初始向量进行反转攻击填充提示攻击 CFB模式CFB定义对CFB模式的攻击重放攻击 OFB模式OFB定义CFB模式…

【LocalAI】(13):LocalAI最新版本支持Stable diffusion 3,20亿参数图像更加细腻了,可以继续研究下

最新版本v2.17.1 https://github.com/mudler/LocalAI/releases Stable diffusion 3 You can use Stable diffusion 3 by installing the model in the gallery (stable-diffusion-3-medium) or by placing this YAML file in the model folder: Stable Diffusion 3 Medium 正…

PriorityQueue详解(含动画演示)

目录 PriorityQueue详解1、PriorityQueue简介2、PriorityQueue继承体系3、PriorityQueue数据结构PriorityQueue类属性注释完全二叉树、大顶堆、小顶堆的概念☆PriorityQueue是如何利用数组存储小顶堆的&#xff1f;☆利用数组存储完全二叉树的好处&#xff1f; 4、PriorityQueu…

React AntDesign Layout组件布局刷新页面错乱闪动

大家最近在使用React AntDesign Layout组件布局后刷新页面时&#xff0c;页面布局错乱闪动 经过组件属性的研究才发现&#xff0c;设置 hasSider 为 true 就能解决上面的问题&#xff0c;耽搁了半天的时间&#xff0c;接着踩坑接着加油&#xff01;&#xff01;&#xff01; …

pytorch实现的面部表情识别

一、绪论 1.1 研究背景 面部表情识别 (Facial Expression Recognition ) 在日常工作和生活中&#xff0c;人们情感的表达方式主要有&#xff1a;语言、声音、肢体行为&#xff08;如手势&#xff09;、以及面部表情等。在这些行为方式中&#xff0c;面部表情所携带的表达人类…

SQL找出所有员工当前薪水salary情况

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 有一个薪水表…

Debian Linux安装minikubekubectl

minikube&kubectl minkube用于在本地开发环境中快速搭建一个单节点的Kubernetes集群,还有k3s&#xff0c;k3d&#xff0c;kind都是轻量级的k8skubectl是使用K8s API 与K8s集群的控制面进行通信的命令行工具 这里使用Debian Linux演示&#xff0c;其他系统安装见官网,首先…

使用SpringCache实现Redis缓存

目录 一 什么是Spring Cache 二 Spring Cache 各注解作用 ①EnableCaching ②Cacheable ③CachePut ④CacheEvict 三实现步骤 ①导入spring cache依赖和Redis依赖 ②配置Redis连接信息 ③在启动类上加上开启spring cache的注解 ④ 在对应的方法上加上需要的注解 一 什么…

green bamboo snake

green bamboo snake 【竹叶青蛇】 为什么写这个呢&#xff0c;因为回县城听说邻居有人被蛇咬伤&#xff0c;虽然不足以危及生命&#xff0c;严重的送去市里了。 1&#xff09;这种经常都是一动不动&#xff0c;会躲在草地、菜地的菜叶里面、果树上、有时候会到民房大厅休息&a…

Qt——系统

目录 概述 事件 鼠标事件 进入、离开事件 按下事件 释放事件 双击事件 移动事件 滚轮事件 按键事件 单个按键 组合按键 定时器 QTimerEvent QTimer 窗口事件 文件 输入输出设备 文件读写类 文件和目录信息类 多线程 常用API 线程安全 互斥锁 条件变量…

光纤传感器十大品牌

十大光纤传感器品牌-光纤光栅传感器厂家哪家好-Maigoo品牌榜

【chatgpt】train_split_test的random_state

在使用train_test_split函数划分数据集时&#xff0c;random_state参数用于控制随机数生成器的种子&#xff0c;以确保划分结果的可重复性。这样&#xff0c;无论你运行多少次代码&#xff0c;只要使用相同的random_state值&#xff0c;得到的训练集和测试集划分就会是一样的。…

导入别人的net文件报红问题sdk

1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件&#xff0c;右键打开&#xff0c;直接修改版本为本机的SDK版本&#xff0c;就可以用了