论文笔记--TinyBERT: Distilling BERT for Natural Language Understanding

news2024/12/22 11:17:40

论文笔记--TinyBERT: Distilling BERT for Natural Language Understanding

  • 1. 文章简介
  • 2. 文章概括
  • 3 文章重点技术
    • 3.1 Transformer Distillation
    • 3.2 两阶段蒸馏
  • 4. 数值实验
  • 5. 文章亮点
  • 5. 原文传送门
  • 6. References

1. 文章简介

  • 标题:TinyBERT: Distilling BERT for Natural Language Understanding
  • 作者:Xiaoqi Jiao, Yichun Yin, Lifeng Shang, Xin Jiang, Xiao Chen, Linlin Li, Fang Wang, Qun Liu
  • 日期:2019
  • 期刊:arxiv preprint

2. 文章概括

  文章提出了一种两阶段的BERT蒸馏模型TinyBERT。TinyBERT在GLUE上击败了所有当前的SOTA蒸馏BERT模型[1],且参数量仅为SOTA的38%,推理时间仅为SOTA的31%。此外TinyBERT在所有GLUE任务中平均表现约为96.8%,几乎完美还原BERT的能力。
  TinyBERT的整体学习步骤如下
整体架构

3 文章重点技术

3.1 Transformer Distillation

  所谓Transformer Distillation(TD),即对Transformer架构的蒸馏。假设教师模型和学生模型的层数分别为 N N N M M M,则首先定义一个映射函数 n = g ( m ) n=g(m) n=g(m)表示用学生模型的第 m m m层去学习教师模型的第 n = g ( m ) n=g(m) n=g(m)层的信息。文章通过数值实验选用了 g ( m ) = 3 m g(m)=3m g(m)=3m。定义第 0 0 0层为嵌入层,第 M + 1 M+1 M+1层为预测层,则我们可以将模型的损失函数写作 L m o d e l = ∑ x ∈ X ∑ m = 0 M + 1 λ m L l a y e r ( f m S ( x ) , f g ( m ) T ( x ) ) (1) \mathcal{L}_{model} = \sum_{x\in\mathcal{X}} \sum_{m=0}^{M+1} \lambda_m \mathcal{L}_{layer} (f_m^S(x), f_{g(m)}^T(x)) \tag{1} Lmodel=xXm=0M+1λmLlayer(fmS(x),fg(m)T(x))(1),其中 L l a y e r \mathcal{L}_{layer} Llayer表示 l a y e r layer layer层的损失函数, f m S ( x ) , f g ( m ) T ( x ) f_m^S(x), f_{g(m)}^T(x) fmS(x),fg(m)T(x)分别表示学生和教师模型在第 m m m g ( m ) g(m) g(m)层的函数, λ m \lambda_m λm为超参数,表示第 m m m层的重要性。下面为针对不同层的蒸馏方式

  • Transformer-layer Distillation:
    Transformer-layer Distillation
    如上图所示,Transformer-layer Distillation包含以下两种蒸馏方法
    • Attention based distillation:蒸馏注意力机制矩阵,损失函数为 L a t t n = 1 h ∑ i = 1 h M S E ( A i S , A i T ) (2) \mathcal{L}_{attn} = \frac 1h \sum_{i=1}^h MSE(A_i^S, A_i^T) \tag{2} Lattn=h1i=1hMSE(AiS,AiT)(2),其中 h h h为多头注意力机制的head数目, M S E MSE MSE表示Mean Squared Error, A i S , A i T A_i^S, A_i^T AiS,AiT分别表示学生模型和教师模型的注意力矩阵。
    • hidden tsates based distillation:蒸馏隐藏层(即FFN的输出层)状态,蒸馏的损失函数为 L h i d n = M S E ( H S W h , H T ) (3) \mathcal{L}_{hidn} = MSE(H^SW_h, H^T) \tag{3} Lhidn=MSE(HSWh,HT)(3),其中 H S , H T H^S, H^T HS,HT分别表示学生模型和教师模型的隐藏层状态, W h W_h Wh为可学习的参数,旨在将学生模型的隐藏向量映射到和教师模型隐藏状态相同的高维空间
  • Embedding-layer Distillation:对嵌入层进行蒸馏,损失函数为 L e m b d = M S E ( E S W e , E T ) (4) \mathcal{L}_{embd} = MSE(E^SW_e, E^T) \tag{4} Lembd=MSE(ESWe,ET)(4),其中 E S , E T E^S, E^T ES,ET分别表示学生模型和教师模型的嵌入层向量, W e W_e We和上述 W h W_h Wh作用相同,旨在将学生模型的嵌入向量映射到和教师模型嵌入向量相同的高维空间
  • Prediction-layer Distillation:采用损失函数 L p r e d = C E ( z T / t , z S / t ) (5) \mathcal{L}_{pred} =CE(z^T/t, z^S/t) \tag{5} Lpred=CE(zT/t,zS/t)(5),其中 z S , z T z^S, z^T zS,zT分别表示学生模型和教师模型的输出logits, t t t表示蒸馏的温度。此设置参考原始蒸馏论文中的设置。
      最后,将上述所有损失函数进行统一,得到 ( 1 ) (1) (1)式中的损失函数可表示为 L l a y e r = { L e m b d , m = 0 L h i d n + L a t t n , M ≥ m > 0 L p r e d , m = M + 1 \mathcal{L}_{layer} = \begin{cases}\mathcal{L}_{embd}, &m = 0\\\mathcal{L}_{hidn} + \mathcal{L}_{attn}, &M\ge m >0\\\mathcal{L}_{pred}, &m=M+1\end{cases} Llayer= Lembd,Lhidn+Lattn,Lpred,m=0Mm>0m=M+1

3.2 两阶段蒸馏

  TinyBERT采用两阶段蒸馏:general distillation和task-specific distillation,每一步骤通过上节介绍的蒸馏方式进行蒸馏

  • General Distillation:使用原始的BERT模型作为教师模型在大量无标注文本语料库上蒸馏得到General TinyBERT
  • Task-specific Distillation:通过数据增强构造一个下游任务的数据集,使用微调后的BERT在增强后的数据集上对general TinyBERT进行蒸馏,得到TinyBERT模型,这里相当于使用general TinyBERT作为第二次蒸馏的初始模型。具体来说,文章采用的数据增强方法为:首先使用BERT/GloVe预测随机掩码掉的单词,然后使用最相近的单词代替掩码位置,并随机将其增强入数据集。具体算法如下
    data-augumentation

4. 数值实验

  文章用BERT[1]原文训练方法训练了和TinyBERT模型大小相同的 BERT TINY \text{BERT}_{\text{TINY}} BERTTINY模型,对比 BERT TINY \text{BERT}_{\text{TINY}} BERTTINY,TinyBERT, BERT BASE \text{BERT}_{\text{BASE}} BERTBASE,DistilBERT[2]等先进的BERT蒸馏模型,得到以下实验结果
- BERT TINY \text{BERT}_{\text{TINY}} BERTTINY相比于 BERT BASE \text{BERT}_{\text{BASE}} BERTBASE 性能下降很多

  • TinyBERT相比于 BERT TINY \text{BERT}_{\text{TINY}} BERTTINY有大幅的性能提升,说明文章提出的KD算法是有效的
  • TinyBERT和当前的SOTA蒸馏模型(DistilBERT)等相比参数量降低28%,推理速度快3.1倍,且模型表现提升了4.4%
  • TinyBERT相比于KaTeX parse error: Expected '}', got 'EOF' at end of input: …T}_{\text{BASE}参数量降低7.5倍,速度快9.4倍,效果为BERT的96.8%,基本还原BERT能力

5. 文章亮点

  文章提出了对Transformer的两阶段蒸馏方法,相比于当前的SOTA蒸馏模型速度更快、参数量更小、表现更加出色。TinyBERT基本完美还原BERT在GLUE任务上的分析能力,可在对存储、运行效率要求更高的场景,如移动设备,作为BERT的替代模型。

5. 原文传送门

TinyBERT: Distilling BERT for Natural Language Understanding

6. References

[1] 论文笔记–BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
[2] 论文笔记–DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter

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

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

相关文章

Java四个月学不学的会?我分享一下我的经历来告诉你

先说结论,java培训 四个月一般是能达到能上手工作的水平的,但是高中毕业就算了。高中毕业哪怕你能上手工作了,需求能完成了,也是大概率找不到工作的,这一行可能最看重学历的行业之一了。虽然说句实在话,就…

【Linux】基础开发工具——gcc/g++篇

文章目录 一、预处理1.1 头文件展开1.2 条件编译 二、编译三、汇编四、链接4.1 什么是库?4.2 库的分类4.3 目标文件和库是如何链接的?4.3.1 动态链接4.3.2 静态链接 4.4 动静态链接的优缺点对比 五、Debug&&release 前言 :  在前面的文章里给大…

VMware将虚拟机网络设置为NAT模式

虚拟机有vmware和desktop,本人一直使用的是vmware。安装好vmware并激活后,创建完虚拟机。(需要vmware和激活码的可留言) 进入虚拟机设置,网络适配器选择NAT模式 在虚拟机工具栏->菜单栏点击编辑,选择“虚拟网络编辑器”。 选择…

数据库应用:MySQL数据库用户管理

目录 一、理论 1.用户管理 2.授权控制 二、实验 1.数据库用户管理 2.数据库用户授权 三、总结 一、理论 1.用户管理 (1)用户信息 MySQL 中的用户信息,都存储在系统数据库 mysql 的 user 表中。 use mysql; select * from user lim…

【038】解码C++ STL:探索string容器的无限可能与鲜为人知的技巧

解码C STL:探索string容器的无限可能与鲜为人知的技巧 引言一、STL概述1.1、STL的基本概念1.2、STL的六大组件 二、string类2.1、string容器基本概念2.2、string容器常用操作2.2.1、string构造函数2.2.2、string基本赋值操作2.2.3、string存取字符操作原型2.2.4、st…

我们搬家啦!新家园,新征程,新篇章

7月10日 KaiwuDB 上海新总部开业典礼暨 “浪潮数据库产业联合实验室”揭牌仪式 于上海市浦东新区顺利举行 新起点,新征程,新篇章 🎉🎉 剪彩仪式 7月10日,上海浦东新区科技和经济委员会副主任夏玉忠,上…

行业追踪,2023-07-11,关于自动生成文章代码重构,明天开始发布新的追踪文章,敬请期待

自动复盘 2023-07-12 成交额超过 100 亿 排名靠前,macd柱由绿转红 成交量要大于均线 有必要给每个行业加一个上级的归类,这样更能体现主流方向 rps 有时候比较滞后,但不少是欲杨先抑, 应该持续跟踪,等 macd 反转时参与…

GoLand导入redis的github包失败

GoLand导入redis依赖失败 网上有下载guryburd和gomodel的,这里按照官网文档安装依赖 以下命令在项目的根目录执行 初始化一个Go模块: go mod init github.com/my/repoTo install go-redis/v9:要安装go-redis/v9: go get github.com/redis/…

大模型技术发展概述 -(二)

文本内容参考论文《A Survey of Large Language Models》 论文标题:A Survey of Large Language Models 论文链接:https://arxiv.org/pdf/2303.18223v10.pdf 大模型技术发展概述 -(二) 4. LLM预训练4.1 数据收集4.1.1 数据源4.1.2…

Zookeeper集群

目录 Zookeeper 概述 Zookeeper 定义 Zookeeper 工作机制 Zookeeper 特点 Zookeeper 数据结构 Zookeeper 应用场景 Zookeeper 选举机制 ●第一次启动选举机制 ●非第一次启动选举机制 部署 Zookeeper 集群 1.安装前准备 关闭防火墙 安装 JDK 下载安装包 2.安装 …

从网络安全行业人才需求讲讲【个人规划】

如果你是一名正在找工作的网络安全方向大学生,或者是刚刚踏入网络安全领域的新手,这篇文章很适合你,如果你是一名老网安人,看看有哪些你中招了。 当你打开BOSS直聘、拉钩等招聘类网站后,在首页的快速导航页面很难找到关…

ruoyi导入excel报错数据越界

一、报错截图: 二、报错原因 实体类 三、修改方式 将实体类Excel注释 修改去掉 readConverterExp部分,重新导入后成功。 四、出错原因

【雕爷学编程】Arduino动手做(138)---64位WS2812点阵屏模块3

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

【基于openEuler上安装单机openGauss2.1.0企业版】

【基于openEuler上安装openGauss2.1.0企业版】 一、环境说明二、安装步骤 一、环境说明 华为云ECS 规格 8核32G操作系统openEuler 20.03 TLS 二、安装步骤 修改操作系统字符集为utf8 cat >>/etc/profile<<EOF export LANGen_US.UTF-8 EOF让环境变量生效 source /…

ASCII码对照表 十六进制的字符对照表

ASCII码对照表&#xff08;包括二进制、十进制十六进制和字符&#xff09; 可以显示 不可以显示

天津良心web前端培训学校品牌汇总(Web前端的起步薪资)

现在很多小伙伴想要了解web前端开发技术知识&#xff0c;但是不知道现在学习web前端值不值得&#xff0c;会有很多小伙伴开始犹豫学不学&#xff0c;学完能不能找到工作&#xff0c;那下面小编就通过下面三点&#xff0c;来给大家简单分析一下web行业&#xff0c;以及要不要报班…

Layui之可调参数的动态轮播图---好玩的小玩意儿~

⭐ 本期精彩&#xff1a;利用Layui制作轮播图 效果图&#xff1a; 前台代码&#xff1a; JS代码&#xff1a; 设置长宽高的事件代码&#xff1a; //事件carousel.on(change(test1), function(res){console.log(res)});var $ layui.$, active {set: function(othis){var THIS…

intellij idea开发微信远程小程序

原理 intellij idea开发微信原生小程序的基本原理是&#xff0c;在idea中编辑目标文件&#xff08;wxml、wxss&#xff09;&#xff0c;微信开发者工具热加载改动&#xff0c;从而实时看到效果&#xff0c;微信开发者工具的提示、高亮等能力&#xff0c;都太弱了&#xff0c;所…

Android自动化测试-UiAutomator环境搭建

目录 一、环境准备 二、新建Android Studio工程 三、测试实例 总结&#xff1a; 一、环境准备 1. 安装android sdk&#xff0c;并配置环境变量 2. 安装android studio&#xff0c;国内访问官网受限&#xff0c;如果下载不到&#xff0c;可以到我的百度云盘下载&#xff1a; …

Java设计模式之行为型-责任链模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行发送。请求会被链上每个处理者处理,直到请求被处理完毕。该模式主要解决的是请求的发送者和多个请求处理者之间建立一条链…