美文网首页
让BERT飞一会

让BERT飞一会

作者: ColdCoder | 来源:发表于2020-06-11 10:31 被阅读0次

[TOC]


1. 模型蒸馏

1. DistilBERT(2019.10.2)

知识蒸馏的基础原理:

定义两个网络,teacher网络和student网络,teacher网络是预训练得到的大模型,student模型是想要学习和迁移得到的小模型。根据Hinton的文章,一般的蒸馏模式是:把teacher网络的输出作为soft-label,student网络学习的目标是hard-label,交叉构造三种loss来联合训练,目的是时student网络具备与teacher网络同样的推理目标。

模型简述:

student的网络解决与teacher的网络结构相同,都是Bert。主要改动有:

  1. 对student网络的构造,就是从teacher网络每两层去掉一层。因为,作者调研发现,隐层维度的变化比层数的变化对性能的影响较小,所以只改变网络层数。
  2. 因为student网络的层数减少两倍,所以去掉token type embedding和pooler。
  3. 使用teacher网络每两层的一层的参数来初始化student网络。
  4. 使用更大的batch,使用dynamic masking,去掉NSP任务。这几点是从RoBERTa中取的经。

三个loss:

  1. L_{ce}, teacher模型得到的目标概率分布是t_i,student模型得到的目标概率分布是s_i,然后计算两个分布的KL散度:L_{ce} = \sum_i{t_i * \log{s_i}}。KL散度是衡量两个分布的相关度,使用这个loss,在训练的时候,就可以把teacher网络中丰富的先验知识带进训练过程。
    这里使用softmax-temperature,使用T来控制输出概率的平滑度,在inference时,设置为1。
  2. L_{mlm},就是bert中的masked语言模型的loss。
  3. L_{cos},计算teacher网络的hidden state和teacher网络的hidden state的余弦相似度。

然后将三个loss加权想和:

Loss= 5.0*L_{ce}+2.0* L_{mlm}+1.0* L_{cos}

实验:

inference时间对比,大概提升了60%:


Ablation test结果,可以看出Lce、Lcos、参数初始化为结果影响较大:


2. TinyBert (2019.11.23)

主要贡献

  1. 提出的蒸馏方法,增加了对Transformer中attention层考量。
  2. 提出two-stage的蒸馏模式,在pre-training和fine-tuning阶段进行相同的蒸馏,验证效果更好。
  3. 实验证明结果很好。

模型简述:

问题定义:
teacher模型(m)和student模型(n)的层通过一个n=g(m)函数映射。student学teacher的过程就是通过最小化下面的目标函数:

各种loss的定义:

  1. Transformer-layer Distillation
  2. Embedding-layer Distillation
  3. Hidden-Layer Distillation
  4. Prediction-Layer Distillation

根据上面的定义,就可以最终得到student网络的完整的loss:

实验:

TinyBERT在经验上是有效的,其性能能够超过基线BERT的96%,容量小7.5倍,推理速度快9.4倍。同时,TinyBERT要比基线DistillBERT也明显更优,只有其28%的参数,31%的推理时间:


在 GLUE 基准上实现了与 BERT 相当(下降 3 个百分点)的效果:


paper
code

2. 模型结构上的优化

1.《Deformer:Decomposing Pre-trained Transformers for Faster Question Answering》

BERT模型做QA问题,比如问答或者阅读理解,需要将query和document拼接作为模型输入,然后使用self-attention对输入文本进行多层的交互编码,之后使用线性分类器在document中寻找可能的答案序列。而通常document都非常的长,所以就会有大量的计算。
这篇文章提出,将BERT模型做成两段式的结构,提前进行一些运算。
有研究表明,在多层Transformer模型中,低层(low layers)的编码主要关注一些局部的预言表层特征(比如词性,语法等),到了高层(upper layer)才逐渐关注与下游任务相关的全局语义信息。所以,在low layers, ”文档编码能够不依赖于问题“的假设是正确的。所以,这篇文章的思路具体来说:在底层先对问题和文档各自编码,在高层拼接问题和文档的隐层表征再进行交叉编码。如下图:

另外,作者实验发现这种结构在SQuAD上精度损失比较大,所以作者添加了两个蒸馏损失项。目的是最小化Defomer的高层表征和分类层logits与原始BERT模型的差异

实验:
在三个QA任务上,BERT和XLNet采用DeFormer分解后,取得了2.7-3.5倍的加速,节省内存65.8-72.0%,效果损失只有0.6-1.8%。但还是很慢,达不到实时的效果。


2.《AlBert》

主要三个改变,

  1. 使embedding层的维度(E)设置为远小于隐层的维度(H),然后通过矩阵分解,将H*V的矩阵分解为V*E,E*H,其中H<<H, V为字典大小,就是先将embedding的矩阵,映射到小维度的矩阵,然后再映射到大维度的隐层矩阵。这样就可以使embedding层参数大大减小。
  2. 共享emcoder中的所有参数。
  3. 将NSP任务改为SOP任务。
  • 《》

相关文章

  • 让BERT飞一会

    [TOC] 1. 模型蒸馏 1. DistilBERT(2019.10.2) 知识蒸馏的基础原理: 定义两个网络,...

  • 让子弹飞一会

    让子弹飞一会儿, 一会儿就会击中目标。 让子弹飞一会儿, 一会儿就...

  • 《让子弹飞》再飞一会

    1、马拉火车 有人从历史的方面来解读这个东西,不是不可以,但姜文从来不是一个这么矫情的人。 他的每一个看似不合理的...

  • 《让子弹飞》:让子弹飞一会儿

    ​《让子弹飞》讲述了悍匪张麻子摇身一变化名清官“马邦德”上任鹅城县长,并与镇守鹅城的恶霸黄四郎展开一场激烈争斗的故...

  • 让「真相」飞一会

    根据中国互联网络信息中心(CNNIC)统计报告得知,截止2017年12月中国网民数量达到7.75亿人,手机网民占比...

  • 让情书飞一会

    “你”好: 秋天了,童话般的色彩,我想写封信给“你”。 嗯,记忆里我应该是有收到过情书的吧。那些,打开后淡淡的...

  • 让子弹飞一会

    在日常工作和学习中,你会不会经常会碰到这样一种情况:原本头脑里想象中特别完美的事情,一旦说出来或者真正去做的时候,...

  • 让子弹飞一会

    上个月周末的时候,去献血屋献血,当时人比较多,就稍微等了一会,在等待的过程中,看到献血屋的工作人员给已经献好血的人...

  • “让子弹飞一会”

    最近几天围绕本人小店,做了一系列的调整,初显成效,当然并不是直接的经济效益,且让我给你简单分享。 1.人员培训 A...

  • 让思绪飞一会

    时光如白驹过隙,2018年2月6日过完38周岁生日。瞬眼间,就到了不惑之年!可为什么我对人生还是如此的困惑不解?本...

网友评论

      本文标题:让BERT飞一会

      本文链接:https://www.haomeiwen.com/subject/wlgvtktx.html