大型语言模型:DistilBERT — 更小、更快、更便宜、更轻

一、介绍

        近年来,大型语言模型的演进速度飞速发展。BERT成为最流行和最有效的模型之一,可以高精度地解决各种NLP任务。在BERT之后,一组其他模型随后出现在现场,也展示了出色的结果。

        很容易观察到的明显趋势是,随着时间的推移,大型语言模型(LLM)往往会通过成倍增加它们所训练的参数和数据的数量而变得更加复杂。深度学习的研究表明,这种技术通常会带来更好的结果。不幸的是,机器学习世界已经处理了有关LLM的几个问题,可扩展性已成为有效训练,存储和使用它们的主要障碍。

        考虑到这个问题,已经制定了压缩LLM的特殊技术。压缩算法的目标是减少训练时间、减少内存消耗或加速模型推理。实践中使用的三种最常见的压缩技术如下:

  • 知识蒸馏涉及训练一个较小的模型,试图表示一个较大模型的行为。
  • 量化是减少内存的过程,用于存储表示模型权重的数字。
  • 修剪是指丢弃最不重要的模型权重。

        在本文中,我们将了解应用于BERT的蒸馏机制,该机制导致了一种称为DistilBERT的新模型。顺便说一下,下面讨论的技术也可以应用于其他NLP模型。

二、蒸馏基础知识

        蒸馏的目标是创建一个可以模仿较大模型的较小模型。在实践中,这意味着如果一个大型模型预测了某事,那么较小的模型应该做出类似的预测。

        为了实现这一点,需要已经预先训练了一个更大的模型(在我们的例子中是BERT)。然后需要选择较小模型的架构。为了增加成功模仿的可能性,通常建议较小的模型具有与较大模型类似的体系结构,但参数数量较少。最后,较小的模型从较大模型对某个数据集所做的预测中学习。对于这个目标,选择一个适当的损失函数是至关重要的,这将有助于较小的模型更好地学习。

在蒸馏符号中,较大的模型称为教师,较小的模型称为学生

通常,蒸馏程序在保鲜过程中应用,但也可以在微调期间应用。

三、迪斯蒂尔伯特

        DistilBERT从BERT学习,并使用由三个组件组成的损失函数更新其权重:

  • 屏蔽语言建模 (MLM) 丢失
  • 蒸馏损失
  • 相似性损失

        下面,我们将讨论这些损失组成部分以及每个损失组成部分的必要性。然而,在深入研究之前,有必要了解softmax激活函数中称为温度的重要概念。温度概念用于DistilBERT损失函数。

四、软最高温度

        通常将softmax变换视为神经网络的最后一层。Softmax 对所有模型输出进行归一化,因此它们的总和为 1,并且可以解释为概率。

        存在一个softmax公式,其中模型的所有输出都除以温度参数T:

        软最大温度公式。Pi 和 Zi 分别是第 i 个对象的模型输出和归一化概率。T 是温度参数。

        温度T控制输出分布的平滑度:

  • 如果 T > 1,则分布变得更平滑。
  • 如果 T = 1,则如果应用正态 softmax,则分布相同。
  • 如果 T < 1,则分布变得更加粗糙。

        为了清楚起见,让我们看一个例子。考虑一个具有 5 个标签的分类任务,其中神经网络生成 5 个值,指示属于相应类的输入对象的置信度。对不同的 T 值应用 softmax 会导致不同的输出分布。

           基于温度 T 生成不同概率分布的神经网络示例

温度越高,概率分布越平滑。

        基于不同温度 T 值的对数(从 1 到 5 的自然数)的 Softmax 变换。随着温度的升高,softmax值彼此更加一致。

五、损失函数

5.1 屏蔽语言建模丢失

        与教师模型(BERT)类似,在预训练期间,学生(DistilBERT)通过预测掩蔽语言建模任务来学习语言。在对某个令牌进行预测后,将预测的概率分布与教师模型的独热编码概率分布进行比较。

独热编码分布指定一个概率分布,其中最可能的令牌的概率设置为 1,所有其他令牌的概率设置为 0。

        与大多数语言模型一样,交叉熵损失是在预测分布和真实分布之间计算的,学生模型的权重通过反向传播进行更新。

掩蔽语言建模损失计算示例

5.2 蒸馏损失

        实际上,可以仅使用学生损失来训练学生模型。但是,在许多情况下,这可能还不够。仅使用学生损失的常见问题在于其 softmax 变换,其中温度 T 设置为 1。在实践中,T = 1 的结果分布结果是这样的形式:其中一个可能的标签具有接近 1 的非常高的概率,而所有其他标签概率都变得很低,接近 0。

        这种情况与两个或多个分类标签对特定输入有效的情况不太吻合:T = 1 的 softmax 层很可能排除除一个标签之外的所有有效标签,并使概率分布接近 one-hot 编码分布。这导致学生模型可以学习的潜在有用信息的丢失,从而使其多样性降低。

        这就是为什么该论文的作者引入了蒸馏损失,其中softmax概率是在温度T > 1的情况下计算的,从而可以平滑地对齐概率,从而考虑学生的几个可能的答案。

在蒸馏损失中,对学生和教师施加相同的温度T。删除了教师分布的独热编码。

蒸馏损失计算示例

可以使用KL散度损失代替交叉熵损失。

5.3 相似性损失

        研究人员还指出,在隐藏状态嵌入之间增加余弦相似性损失是有益的。

        余弦损耗公式

        这样,学生不仅可以正确复制屏蔽令牌,还可以构建与教师类似的嵌入。它还为在模型的两个空间中保留嵌入之间的相同关系打开了大门。

相似性损失计算示例

5.4 三重损失

        最后,计算所有三个损失函数的线性组合之和,该和定义了DistilBERT中的损失函数。根据损失值,对学生模型执行反向传播以更新其权重。

        

迪斯蒂尔伯特损失函数

有趣的是,在三个损失分量中,掩蔽语言建模损失对模型性能的影响最小。蒸馏损失和相似性损失的影响要大得多。

六、推理

        DistilBERT中的推理过程与训练阶段完全相同。唯一微妙的是软最大温度T设置为1。这样做是为了获得接近BERT计算的概率。

6.1 建筑

通常,DistilBERT使用与BERT相同的体系结构,除了以下更改:

  • DistilBERT只有一半的BERT层。模型中的每一层都是通过从两个层中取出一个BERT层来初始化的。
  • 删除令牌类型嵌入。
  • 应用于分类任务的 [CLS] 令牌隐藏状态的密集层将被删除。
  • 为了获得更强大的性能,作者使用了RoBERTa中提出的最佳想法:
    - 动态掩码的使用 - 删除下一个句子预测目标
    - 大批量训练

    - 梯度累积技术应用于优化梯度计算

DistilBERT中的最后一个隐藏层大小(768)与BERT中的相同。作者报告说,它的减少并没有导致计算效率方面的显着提高。根据他们的说法,减少总层数的影响要大得多。

6.2 数据

        DistilBERT在与BERT相同的数据语料库上进行训练,其中包含BooksCorpus(800M字)英语维基百科(2500M字)。

七、伯特与迪斯蒂尔伯特比较

        比较了BERT和DistilBERT的关键性能参数,并比较了几个最受欢迎的基准。以下是需要保留的重要事实:

  • 在推理过程中,DistilBERT比BERT快60%。
  • DistilBERT的参数减少了44M,总共比BERT小40%。
  • DistilBERT保留了97%的BERT性能。

BERT 与 DistilBERT 比较(在 GLUE 数据集上)

八、结论

        DistilBERT在BERT的发展中迈出了一大步,允许它显着压缩模型,同时在各种NLP任务上实现可比的性能。除此之外,DistilBERT仅重207 MB,使在容量有限的设备上的集成变得更加容易。知识蒸馏并不是唯一适用的技术:DistilBERT可以通过量化或修剪算法进一步压缩。

资源

  • DistilBERT,BERT的蒸馏版本:更小,更快,更便宜,更轻

除非另有说明,否则所有图片均由 c提供 维亚切斯拉夫·叶菲莫夫

·

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

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

相关文章

推荐开源工具带带弟弟ocr_ddddocr_各种验证码都可以识别_滑动_点击_等等---验证码识别工作笔记001

这个很强大了,常见的各种验证码都可以识别,如果你项目上也有需要,比如需要实现系统的自动登录,这个时候就很有用了,这里仅仅给出方案,具体如何用,用的时候在做研究吧,好东西要记录,分享给需要的人.使用的时候 自己去查一下如何使用非常简单. 支持点击的验证码,支持数字验证码就…

【C++】哈希

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a; C学习 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最大…

rust cfg的使用

前提是一个crate倒入另一个crate。 先看结构 test_lib目录结构 这与另一个crate处于同一个目录,所以另一crate倒入的时候在Cargo.toml中使用如下语句。 test_lib = {path = "../test_lib" }先在test_lib/src/abc/abc.rs中添加没有cfg的两个函数做测试。 pub fn…

ViewModifier/视图修饰符, ButtonStyle/按钮样式 的使用

1. ViewModifier 视图修饰符 1.1 创建默认按钮视图修饰符 ViewModifierBootcamp.swift import SwiftUI/// 默认按钮修饰符 struct DefaultButtonViewModifier: ViewModifier{let bcakgroundColor: Colorfunc body(content: Content) -> some View {content.foregroundColor…

C/C++之自定义类型(结构体,位段,联合体,枚举)详解

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 个人主页&#xff1a;点我进入主页 …

MySQL 安装+启动+报错的解决方案

目录 一、安装准备 1.1 下载 1.2 版本说明 二、安装步骤 2.1 解压缩 2.2 配置环境变量 2.3 配置文件 2.4 安装 2.5 启动/停止服务 三、使用说明 3.1 用户名密码登录 3.1 设置用户名密码 四、卸载步骤 4.1 卸载服务 五、安装问题 六、启动问题 6.1 提示【服务无…

web基础和http协议

1.DNS解析的三种方式 DNS解析&#xff1a; 网站都是域名&#xff1a;dns解析的作用是把域名解析成ip地址 迭代&#xff1a;从跟域名到二级域 返回用户的过程&#xff1a;递归---运营商--本地hosts---用户 三种方式&#xff1a; /etc/hosts 本地解析&#xff0c;速度最快&…

岩土工程安全监测无线振弦采集仪在无线组网的关键要点

岩土工程安全监测无线振弦采集仪在无线组网的关键要点 岩土工程是一种奇特而又极其重要的工程。它涉及到土地、岩石、气候等等因素&#xff0c;需要重视安全因素。而无线振弦采集仪作为一种常用的监测设备&#xff0c;可以采集岩土工程中的振动数据&#xff0c;从而确保工程的…

智慧安防AI视频智能分析云平台EasyCVR加密机授权小tips

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

Transformer模型 | Python实现基于LSTM与Transfomer的股票预测模型(pytorch)

文章目录 效果一览文章概述LSTM模型原理时间序列模型从RNN到LSTMLSTM预测股票模型实现结语程序设计参考资料效果一览 文章概述 基于LSTM与Transfomer的股票预测模型 股票行情是引导交易市场变化的一大重要因素,若能够掌握股票行情的走势,则对于个人和企业的投资都有巨大的帮…

【AntDesign】多环境配置和启动

环境分类&#xff0c;可以分为 本地环境、测试环境、生产环境等&#xff0c;通过对不同环境配置内容&#xff0c;来实现对不同环境做不同的事情。 AntDesign 项目&#xff0c;通过 config.xxx.ts 添加不同的后缀来区分配置文件&#xff0c;启动时候通过后缀启动即可。 config…

【RabbitMQ 实战】10 消息持久化和存储原理

一、持久化 1.1 持久化对象 rabbitmq的持久化分为三个部分&#xff1a; 交换器的持久化。队列的持久化。消息的持久化。 1.1.1 交换器持久化 交换器的持久化是通过在声明交换器时&#xff0c; 指定Durability参数为durable实现的。若交换器不设置持久化&#xff0c;在rabb…

c语言:通讯录管理系统(文件版本)

前言&#xff1a;在大多数高校内&#xff0c;都是通过设计一个通讯录管理系统来作为c语言课程设计&#xff0c;通过一个具体的系统设计将我们学习过的结构体和函数等知识糅合起来&#xff0c;可以很好的锻炼学生的编程思维&#xff0c;本文旨在为通讯录管理系统的设计提供思路和…

将nginx注册为Windows系统服务

文章目录 1、使用nssm小工具2、使用winsw小工具2.1、下载2.2、用法2.3、重命名2.4、创建配置文件2.4.1、xml文件2.4.2、config文件&#xff08;该文件可省略&#xff09; 2.5、最终文件2.6、安装与卸载 1、使用nssm小工具 该方法最简单 首先&#xff0c;下载nssm小工具&#…

HTML5+CSSDAY4综合案例一--热词

样式展示图&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>热词…

docker 基本操作

一、docker 概述 Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具&#xff0c;是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自…

HomeView/主页 的实现

1. 创建数据模型 1.1 创建货币模型 CoinModel.swift import Foundation// GoinGecko API info /*URL:https://api.coingecko.com/api/v3/coins/markets?vs_currencyusd&ordermarket_cap_desc&per_page250&page1&sparklinetrue&price_change_percentage24…

机器人制作开源方案 | 齿轮传动轴偏心轮摇杆简易四足

1. 功能描述 齿轮传动轴偏心轮摇杆简易四足机器人是一种基于齿轮传动和偏心轮摇杆原理的简易四足机器人。它的设计原理通常如下&#xff1a; ① 齿轮传动&#xff1a;通过不同大小的齿轮传动&#xff0c;实现机器人四条腿的运动。通常采用轮式齿轮传动或者行星齿轮传动&#xf…

Blender:使用立方体制作动漫头像

好久没水文章 排名都掉到1w外了 ~_~ 学习一下blender&#xff0c;看能不能学习一点曲面变形的思路 一些快捷键 ctrl 空格&#xff1a;区域最大化&#xff0c;就是全屏 ctrl alt 空格&#xff1a;也是区域最大化 shift b&#xff1a;框选区域然后最大化显示该范围 shift 空…

3.springcloudalibaba gateway项目搭建

文章目录 前言一、搭建gateway项目1.1 pom配置1.2 新增配置如下 二、新增server服务2.1 pom配置2.2新增测试接口如下 三、测试验证3.1 分别启动两个服务&#xff0c;查看nacos是否注册成功3.2 测试 总结 前言 前面已经完成了springcloudalibaba项目搭建&#xff0c;接下来搭建…