赞
踩
最近要开始使用Transformer去做一些事情了,特地把与此相关的知识点记录下来,构建相关的、完整的知识结构体系。
以下是要写的文章,文章大部分都发布在公众号【雨石记】上,欢迎关注公众号获取最新文章。
Bert出来以后,迅速引爆了NLP领域,出现了很多的针对模型的改进。然而,Roberta用实力表明,只对原来的Bert模型调优就可以有明显的提升。
Roberta,是Robustly Optimized BERT Approach的简称。
Robustly用词很赞,既有“鲁棒的”,又有”体力的”。Roberta是一片实验为基础的论文,有点体力活的意思,但是结果又非常的鲁棒可信赖。
先来回顾一下Bert中的一些细节:
Roberta在如下几个方面对Bert进行了调优:
原来的Bert中是在训练数据中静态的标上Mask标记,然后在训练中是不变的,这种方式就是静态的。
Roberta尝试了一种动态的方式,说是动态,其实也是用静态的方式实现的,把数据复制10份,每一份中采用不同的Mask。这样就有了10种不同的Mask数据。
从结果中,可以看到动态mask能带来微小的提升。
Bert的模型输入中是由两个segment组成的,因而就有两个问题:
因此设置了四个实验:
从实验结果中可以看到,改用Sentence-Pair会带来一个较大的损失。猜测是因为这样无法捕捉long-term的依赖。
另外,Full-Sentence和Doc-Sentence能够带来微小的提升,说明NSP不是必须的。
这点跟Bert中的消融实验结论相反,但是请注意它们的输入还是不同的,原始Bert中的输入是Segment-Pair,有50%/50%的采样,而Full/Doc-Sentence中则是从文章中连续sample来的句子。
因为Doc-Sentence会导致不同的batch_size(因为要保证每个batch见到的token数类似),所以在Roberta中,使用Full-Sentence模式。
现在越来越多的实验表明增大batch_size会使得收敛更快,最后的效果更好。原始的Bert中,batch_size=256,同时训练1M steps。
在Roberta中,实验了两个设置:
从结果中看,batch_size=2k时结果最好。
不管是GPT还是Bert,都是用的BPE的编码方式,BPE是Byte-Pair Encoding的简称,是介于字符和词语之间的一个表达方式,比如hello,可能会被拆成“he”, “ll”, “o”, 其中BPE的字典是从语料中统计学习到的。
原始Bert中,采用的BPE字典是30k, Roberta中增大到了50K,相对于Bertbase和Bertlarge会增加15M/20M的参数。
增大语料和训练步数还是能带来比较大的提升的。
就是上面所有改进的总和。可以看到,在各项任务中的提升还是很大的。Roberta的训练在1024个 V100GPU上训练一天左右。
从上面的各种实验结果中看,可以得到如下结论:
由于Roberta出色的性能,现在很多应用都是基于Roberta而不是原始的Bert去微调了。
勤思考, 多提问是Engineer的良好品德。
提问如下:
回答后续公布,欢迎关注公众号【雨石记】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。