模型介绍

通过应用最新的神经结构搜索算法,提取了BERT体系结构参数的最优子集。这个最优子集(称为BORT)比原来的模型小,其中网络结构大小为原来BERT-large 结构大小的15%,有效大小(没有计算嵌入层)为5.5%。

BORT预训练了288个GPU小时,这是预训练性能最高的BERT参数化结构变体RoBERTa-large所需时间的1.2% ,是在相同硬件上训练BERT-large所需GPU小时的世界纪录的33%左右。在CPU上训练速度也快了7.9倍,并且比该体系结构的其他压缩变体和一些非压缩变体的性能更好:在多个公共自然语言理解(NLU)基准测试中,与BERT-large相比,它的性能提高了0.3%到31%。

模型改进

BERT’s Optimal Subarchitecture

BERT是双向的、基于transformer的全连接结构。它由一个依赖于词汇量大小的嵌入层(在BERT的情况下词汇量大小 V=28,996V = 28,996V=28,996)、基于transformer的D层编码器和一个输出层组成。最初,BERT结构有两种变体:BERT-large(编码器层数 D=24D = 24D=24,注意力头数 A=16A = 16A=16,隐藏层大小 H=1024H = 1024H=1024,中间层大小 I=4096I = 4096I=4096)和BERT-base,对应结构参数为 ⟨D=12,A=12,H=768,I=3072⟩\lang D = 12, A = 12, H =768, I = 3072 \rang⟨D=12,A=12,H=768,I=3072⟩。

形式上,设 Ξ\XiΞ 为一个有限集合,由一个四元组 ⟨D,A,H,I⟩\lang D, A, H, I \rang⟨D,A,H,I⟩(模型结构的参数)的值组成。这样,就可以将BERT的模型结构用函数描述为:

BERT⁡:Ξ→B\operatorname {BERT} : \Xi \rightarrow BBERT:Ξ→B

这样,每个 b∈Bb \in Bb∈B 就对应于 DDD 层参数化编码器的一层,由一个元组 ξ=⟨D,A,H,I⟩∈Ξ\xi = \lang D, A, H, I \rang \in \Xiξ=⟨D,A,H,I⟩∈Ξ 表示。其中,有 AAA 个注意力头,以及可训练的参数 w1,w2,...,wk∈Ww_1, w_2, ..., w_k \in Ww1​,w2​,...,wk​∈W,每个 wiw_iwi​ 属于 RH×I,RH×H,RI×HR^{H \times I},R^{H \times H}, R^{I \times H}RH×I,RH×H,RI×H 中的任意一个。有时,可以将 bbb 写成另外一种形式 b(X;W)b (X;W)b(X;W),其中,XXX 为一个输入集合。这样,对于一个固定的序列长度 sss,批处理大小 zzz,输入 x∈X,x∈Nz,sx \in X,x \in N^{z,s}x∈X,x∈Nz,s。

然后,希望找到一个结构的参数集 ξ∈⟨D,A,H,I⟩\xi \in \lang D, A, H, I \rangξ∈⟨D,A,H,I⟩,它有最优的三个指标:推断速度 i(b(X;⋅))i(b(X;\cdot))i(b(X;⋅)),参数大小 p(b(⋅;W))p(b(\cdot;W))p(b(⋅;W))和错误率 e(b(X;W∗),Y)e(b(X;W^*),Y)e(b(X;W∗),Y),作为相对于一组期望值 YYY 和训练参数 W∗W^*W∗ 的度量。如果没有歧义的话,可以省略函数的参数。

对于任意的结构,这是一个 NP-Hard 问题。对于 p(⋅)p(\cdot)p(⋅) 和 i(⋅)i(\cdot)i(⋅)而言,如果编码器的输入和输出层都被限制的话,则有可能有效地解决这个问题。考虑到嵌入层是一个可训练的查找表,并且大部分操作在编码器中执行,而且嵌入层的参数足够大,能够在三个指标上占主导地位,因此嵌入层呈现了这样的特性。此外,BERT 结构包含了一个层归一化和GeLU激活函数。如果用于求解该算法的损失函数对 WWW 是 LLL-Lipschitz 光滑的,并且下有界和有界的随机梯度,则该结构表现出很强的 ABnCAB^nCABnC 性质。该算法的表现有点像 FPTAS,在多步 (1/ϵ,∣P1∣,..,∣Pk∣)(1/\epsilon,|P_1|,..,|P_k|)(1/ϵ,∣P1​∣,..,∣Pk​∣) 中返回一个 1−ϵ1-\epsilon1−ϵ 精确解,其中 PiP_iPi​ 为过程的一个参数。可以很容易的看到,这些近似和假设与所有的 b∈Bb \in Bb∈B 有关,需要算法和 FPTAS 一样工作。

FPTAS 算法是一个近似算法,依赖于 p(⋅),i(⋅),e(⋅,⋅)p(\cdot),i(\cdot),e(\cdot,\cdot)p(⋅),i(⋅),e(⋅,⋅) 的代理,分别表示为 p~(⋅),i~(⋅),e~(⋅,⋅)\tilde p(\cdot),\tilde i(\cdot),\tilde e(\cdot,\cdot)p~​(⋅),i~(⋅),e~(⋅,⋅)。通过将它们表示为函数 Ξ\XiΞ 来实现,然后通过选择一个最大参数,最大推理时间的结构 T∈BT\in BT∈B,又称为最大值点,并通过一个称为 WWW系数的指标,将它们进行标量化。

虽然计算 p(⋅),i(⋅)p(\cdot),i(\cdot)p(⋅),i(⋅) 相对简单,但p(⋅)≃p~(⋅)−e(b(X;W∗),Y)p(\cdot) \simeq \tilde p(\cdot) - e(b(X;W^*),Y)p(⋅)≃p~​(⋅)−e(b(X;W∗),Y) 必须通过损失函数进行计算。类似地,运行时和近似性的保证依赖于两个额外的输入参数:选择的最大训练步数 n>0n > 0n>0,以及期望的间隔大小 1≤ϵ≤Ξ1 \le \epsilon \le \Xi1≤ϵ≤Ξ。ϵ\epsilonϵ 的选择直接影响该近似算法所得到的解的质量。

BORT通过使用 Bookcorpus 数据集训练的候选结构 b∈Bb\in Bb∈B,训练步长 n=3n=3n=3,间隔大小 ϵ=2\epsilon = 2ϵ=2以及一个完全预训练好的 RoBERTa-large 作为最大点 TTT 来运行 FPTAS 算法。e~(⋅,⋅)\tilde e(\cdot,\cdot)e~(⋅,⋅) 为 TTT 的最后一层和每一个 b∈Bb \in Bb∈B 之间交叉熵。另外两个条件(有界随机梯度和下有界)可以直接通过梯度裁剪和有限精度计算实现。

对于BORT模型的输入,它的输入序列长度 s=512s = 512s=512,保持大小写,使用相同的词汇表(V=50,265V= 50,265V=50,265)和分词过程。使用随机梯度下降作为优化器,并在所有的实验中保持单一的超参数集,即批处理大小 102410241024,学习率 5×10−45 \times 10^{-4}5×10−4,梯度裁剪常数 c=1c=1c=1,慢热学习的比例 0.05。搜索空间 Ξ:=D×A×H×I\Xi:=D \times A \times H \times IΞ:=D×A×H×I 由参数集 D={2,4,6,8,10,12},A={4,8,12,16},H={512,768,1024},I={256,512,768,1024,3072}D = \{2, 4, 6, 8, 10, 12\}, A = \{4, 8, 12, 16\}, H = \{512, 768, 1024\}, I = \{256, 512, 768, 1024, 3072\}D={2,4,6,8,10,12},A={4,8,12,16},H={512,768,1024},I={256,512,768,1024,3072} 构成。构成BERT-base的 ξ∈⟨12,12,768,3072⟩\xi \in \lang 12,12,768,3072 \rangξ∈⟨12,12,768,3072⟩ 出现在这个集合中,如果忽视这个设定 ⟨D,A,H,I⟩∈Ξ\lang D, A, H, I \rang \in \Xi⟨D,A,H,I⟩∈Ξ,其中HHH 不能被 AAA 整除,那么就会出现 transformer 实现问题。

通过评估在11,828行数据集上并且在单个nVidia V100 GPU上执行推理所需的平均时间来计算 i(⋅)i(\cdot)i(⋅),该数据集具有相同的序列长度、批处理大小为1024。这个语料库只是没有替换的Bookcorpus的一个小子集,它比原始语料库小得多。用上面提到的批处理大小,可以提供一个推断延迟合理的近似值,在测试集上 e~(b(X;W∗),T(X))\tilde e(b(X;W^*),T(X))e~(b(X;W∗),T(X)) 是原来的两倍。

通过运行FPTAS算法,取WWW系数最高的前三个结果。如上表所示,WWW系数最高的结果对应结构(A1),就是BORT模型。

Pre-training Using Knowledge Distillation

尽管FPTAS保证能够获得最优子结构的结构参数集,但有效地预训练参数化的模型仍然是一个开放的问题。用于预训练BERT和RoBERTa的过程(自我监督的预训练)成本很高,并且违背了高效结构的目的。然而,在一个内在评估指标下的预训练,会导致更专业化的下游任务的参数大幅增加。

我们知道,使用知识蒸馏(KD)预训练语言模型可以在选定的内在评价指标上取得良好的表现。选用交叉熵作为最大点的计算错误函数 e~(⋅,⋅)\tilde e(\cdot,\cdot)e~(⋅,⋅),通过知识蒸馏似乎有很好的扩展性。将使用自监督训练和 KD 预训练的 BORT 模型进行对比,发现基于KD 预训练的,并使用学生和教师最后一层之间的直接交叉熵的模型具有更高的掩码语言模型 (MLM) 准确性和更快的预训练速度。

模型参考

论文地址:https://arxiv.org/abs/2010.10499

代码地址:https://github.com/alexa/bort

BORT:Optimal Subarchitecture Extraction For BERT(2020-10-20)相关推荐

  1. 第三轮测试卷一(2020.10.29)

    第三轮测试卷一(2020.10.29) 铺石板,输入n x m的广场,和a x a的石板,求最少需要多少石板? /* 算法思想:没啥.... 理解向上取整就行 */num=((n+a-1)/a)*(( ...

  2. Q119:PBRT-V3,“复合重要性采样”(13.10章节)

    之前在学习<Ray Tracing From The Ground Up>时,有总结过"蒙特·卡罗积分": Q73:蒙特•卡罗积分(Monte Carlo Integr ...

  3. MIT JOS学习笔记01:环境配置、Boot Loader(2016.10.22)

    未经许可谢绝以任何形式对本文内容进行转载! 一.环境配置 关于MIT课程中使用的JOS的配置教程网上已经有很多了,在这里就不做介绍,个人使用的是Ubuntu 16.04 + qemu.另注,本文章中贴 ...

  4. 二值化图像去除小黑点_python与图像工程(2020.10.11)

    一.think python--字符串str.列表list.字典dict.元组tuple的比较 在think python的学习中,第八.十.十一.十二章介绍了四种相似的数据类型:字符串.列表.字典. ...

  5. 重装正版Windows 10和Microsoft office home and student 2019教程(2020.10.29)

    目录 环境准备:一个U盘(至少8G) 步骤 第一步  利用微软下载工具制作U盘启动盘 到微软官网下载Windows 10 界面,"点击立即下载工具"后会弹出一个下载界面, 下载此文 ...

  6. python win7 64位 2020_Windows7 64位 2020第三版(2020.08.20)目前最完美支持Windows7的系统!!!...

    此系统基于微软Windows7  SP1原版制作.全程离线!安装最新补丁,仅做了适量精简保证稳定运行!此次分离出Windows7 64位单次下载大小已经缩小! ## 1.保留打印机驱动. 2.默认开启 ...

  7. 8DOER: Dual Cross-Shared RNN for Aspect Term-Polarity Co-Extraction(2020.10.22)

    DOER: Dual Cross-Shared RNN for Aspect Term-Polarity Co-Extraction Doer:面向方面项-极性共抽取的双交叉共享RNN Abstrac ...

  8. Z变换(2020.10.21)

    1.Z变换 1.1 Z变换公式 1.2 matlab函数(ztrans) 1.2.1 Syntax(语法) ztrans(f)ztrans(f,transVar)ztrans(f,var,transV ...

  9. AI前导课-第一课AI概览(2018/10/20)

    AI概览 一.人工智能技术的过去 1.人工智能发展简史 2.符号主义 (1) • 符号主义(逻辑主义.心理学派.计算机学派) – 原理:物理符号系统假设和有限合理性原理. – 起源:源于数理逻辑. – ...

最新文章

  1. 用Python分析北上广深租房情况,租房时优先考虑哪些因素?
  2. NCBI中SRA数据库简介
  3. C语言再学习 -- printf、scanf占位符
  4. (转)那些年我们一起清除过的浮动
  5. Qt Creator使用自定义字体
  6. 【树莓派搭建个人网站】WordPress安装
  7. 经典并发问题:生产者-消费者
  8. JavaSE详细教程.1
  9. Android studio 六大基本布局详解
  10. Java生成随机数SecureRandom
  11. COGS 734. [网络流24题] 方格取数问题
  12. outlook邮箱显示一直启动中_Outlook发送邮件一直停留在发件箱的解决办法
  13. 三角(Triangle)
  14. 微信公众号如何上传html5,微信平台公众号怎么上传视频? 视频支持哪些格式
  15. Belief Propagation信念传播算法详解
  16. 开始数据治理时三个常见的陷阱和解决方法
  17. 快速批量删除新浪微博内容
  18. bilibili源代码泄露,go-common
  19. python中对数字降序和升序_该程序查找在Python中按升序或降序排列数字的最低成本...
  20. 华为云迁移工具推荐最佳实践:Xen虚拟化迁移到华为云

热门文章

  1. css 特效 火球 光,JS+CSS实现炫酷光感效果
  2. C# swich, constant, readonly,static, StringBuilder 和字段与属性
  3. 《学习如何学习》Week1 2.1-2.2 拖延症介绍+孰能生巧
  4. jQuery练习t300,从0到1
  5. 致远OA敏感信息泄露漏洞合集(含批量检测POC)
  6. Conformer测试
  7. Applied Cryptography:chapter 8 key management
  8. 全球最快AI超级计算机开动,每秒4百亿亿浮点运算!正拼接最大宇宙3D地图
  9. 从BOM看MRP与APS
  10. 多多买菜怎么添加自提点?旭宇同创