赞
踩
RoBERTa基本没有什么太大创新,主要是在BERT基础上做了几点调整:
1)训练时间更长,batch size更大,训练数据更多;
2)移除了next predict loss;
3)训练序列更长;
4)动态调整Masking机制。
原本的BERT采用的是static mask的方式,就是在create pretraining data中,先对数据进行提前的mask,为了充分利用数据,定义了dupe_factor,这样可以将训练数据复制dupe_factor份,然后同一条数据可以有不同的mask。注意这些数据不是全部都喂给同一个epoch,是不同的epoch,例如dupe_factor=10, epoch=40, 则每种mask的方式在训练中会被使用4次
dynamic masking: 每一次将训练example喂给模型的时候,才进行随机mask
Segment+NSP:bert style
Sentence pair+NSP:使用两个连续的句子+NSP。用更大的batch size
Full-sentences:如果输入的最大长度为512,那么就是尽量选择512长度的连续句子。如果跨document了,就在中间加上一个特殊分隔符。无NSP。实验使用了这个,因为能够固定batch size的大小。
Doc-sentences:和full-sentences一样,但是不跨document。无NSP。效果最优。
BERT原型使用的是 character-level BPE vocabulary of size 30K,
RoBERTa使用了GPT2的 byte BPE 实现,使用的是byte而不是unicode characters作为subword的单位。
ALBERT 先通过嵌入矩阵分解和共享参数降低参数量,然后再扩大网络宽度提高参数量。整个过程就很像火箭发动机使用的拉伐尔喷管,管道一缩一放,气流就从亚音速加速到超音速
不管是 BERT,还是后续在 BERT 基础上改进的模型 XLNet,RoBERTa,他们的嵌入向量维度和隐藏层维度都是相等的,这样能进行残差连接的加和运算。这里以 BERT-base 为例,算下嵌入矩阵的参数量:BERT-base 的词表大小 V=30000,嵌入向量维度 E 和隐藏层维度 H 相等,都是 768,一个嵌入矩阵的参数量就是 V×E,有点大,不好顶
Albert在嵌入向量后面紧接着加了一个全连接层,把 E 映射到 H 维度
多头注意力和 FFN 都共享,也就是一份数据在 Transformer 的一个编码层上,来回过 12 遍
如果共享全部参数,参数量为 12M,是不共享参数时的 13%,参数量降低很多,但平均分数也同样降低很多,最开始均分 82.3,矩阵分解后降到 81.7,现在参数共享后降到 80.1
仔细分析 NSP 这个任务,它的正样本是选取了两个相邻的 segments,而负样本是选取了两个不同文档的 segments。所以对于模型来说,NSP 有两种方法可以解决:
1.主题预测。如果两个 segments 主题不同说明来自不同文档,进而判断为负样本。
2.连贯性预测。这是 BERT 的本意,让模型判断两个 segment 是不是邻接的。
我们希望模型学到后者,但是前者更好学,并且主题预测和 MLM 任务有些重叠了,所以导致 NSP 这个预训练任务效果不好。
ALBERT 提出了 SOP(Sentence-Order Prediction)。SOP 就是让模型预测两个相邻 segments 有没有被调换前后顺序,如下图:
这样模型就只能通过连贯性来预测 True or False,而不会借助主题信息。
BERT 在预训练的时候,为了加速,前 90% 的 steps 用长度为 128 的句子,而后 10% 的 steps 用长度为 512 的句子,来训练位置编码。
ALBERT 则是反过来,90%-512,10%-128。
长句能激发模型学习文档级别的表示向量,短句则是让模型学习句级的表示向量,ALBERT 用更多的长句,模型内部的向量会更高级、更抽象,所以效果有所提升。
ALBERT 借鉴 SpanBERT 中的方法,改进了 BERT 的 MLM 任务,每次不随机遮一个词,而是随机遮连续的多个词,连续多个词具有更完整的语义,提高了预训练的难度,有利于下游微调任务。
下一篇将介绍spanBert
用于屠榜的 ALBERT 并不是 base 配置,而是 xxlarge 配置。ALBERT-xxlarge 的平均分比 BERT-large 高了 3.5,参数量是 BERT-large 的 70%,但速度是 0.3 倍。所以可见 ALBERT 通过共享参数把参数量压下来了,但该计算的还得计算,计算量是不会减小的。
ALBERT-xxlarge 层数是 12,而不是 24,因为作者通过实验发现,当隐藏层维度是 4096 时,24 层和 12 层效果一样,也就是说模型到达了深度极限。
BERT 使用的预训练数据是 Wikipedia 和 BOOKCORPUS 两个数据集,而 ALBERT 使用了 XLNet 和 RoBERTa 中都使用到的额外预训练数据集
因为共享参数降低了参数量,参数量下降对模型来说是一种正则化,所以这个时候再搭配 Dropout 效果就会下降,因为有点过度正则化了。ALBERT 在去掉 Dropout 后,平均分数提高了0.3
上一篇:算法面试之BERT细节
下一篇:算法面试之SpanBERT
注:本专题大部分内容来自于总结,若有侵权请联系删除。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。