数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
十、RoBERTa [2019]
ELMo
、GPT
、BERT
、XLM
和XLNet
等自训练self-training
方法带来了显著的性能提升,但要确定这些方法的哪些方面贡献最大,可能是一个挑战。训练的计算成本很高,限制了可以进行tuning
的数量,而且通常是用不同规模的private training data
进行的,这限制了我们衡量模型先进性的能力。论文
《RoBERTa: A Robustly Optimized BERT Pretraining Approach》
提出了一项关于BERT
预训练的复制研究replication study
,其中包括对超参数调优和训练集规模的影响的仔细评估。论文发现BERT
的训练明显不足。然后论文提出了一个改进的配方recipe
用于训练BERT
模型,作者称之为RoBERTa
。RoBERTa
可以匹配或超过所有的post-BERT
方法的性能。作者的修改很简单,包括:- 在更多的数据上用更大的
batch
来训练模型。 - 移除
next sentence prediction
目标。 - 在更长的序列上进行训练。
- 动态地改变应用于训练数据的
masking pattern
。
论文还收集了一个新的大型数据集(
CC-NEWS
),其规模与其他privately used datasets
相当,以更好地控制训练集的规模效应。当控制训练数据时,
RoBERTa
改进的训练程序改善了GLUE
和SQuAD
上公布的BERT
结果。当对额外的数据进行更长时间的训练时,RoBERTa
在公共GLUE
排行榜上取得了88.5
分,与XLNet
报告的88.4
分相匹配。RoBERTa
在GLUE
任务中的4/9
个任务上实现了SOTA
,包括:MNLI
、QNLI
、RTE
和STS-B
四个任务。RoBERTa
还在SQuAD
和RACE
上取得了SOTA
的结果。总的来说,论文重新确立了BERT
的masked language model
训练目标相比最近提出的其他训练目标(如XLNet
的排列自回归语言模型)具有竞争力。综上所述,本文的贡献在于:
- 论文提出了一套重要的
BERT
设计选择和训练策略,并介绍了导致更好的下游任务性能的替代品alternatives
。 - 论文使用了一个新的数据集
CCNEWS
,并确认使用更多的数据进行预训练能够进一步提高了下游任务的性能。 - 论文的训练改进
improvement
表明,在正确的设计选择下,masked language model
预训练相比所有其他最近发表的方法具有竞争力。
论文发布了用
PyTorch
实现的模型、预训练和微调代码。- 在更多的数据上用更大的
相关工作:人们为预训练方法设计了不同的训练目标,包括语言建模
language modeling
、机器翻译machine translation
和掩码语言模型masked language modeling
。最近的许多论文都采用了为每个下游任务微调模型的基本配方basic recipe
,并以某种变体的掩码语言模型目标进行预训练。然而,较新的方法通过多任务微调(UNILM
)、融合实体嵌入(ERNIE
)、跨度预测span prediction
(SpanBERT
)和自回归预训练(XLNet
)的多种变体来改善性能。通过在更多的数据上训练更大的模型,通常也能提高性能。我们的目标是复制、简化和更好地微调
BERT
的训练,作为一个参考,以更好地了解所有这些方法的相对性能。
10.1 分析
10.1.1 背景
这里我们简要介绍了
BERT
的预训练方法和一些训练选择,我们将在下一节进行实验研究。Setup
:BERT
将两个segment
(token
的序列)的拼接作为输入,即segment A
$ \{x_1, \cdots , x_N\} $ 和segment B
$ \{y_1,\cdots, y_M\} $ 。segment
通常由一个以上的自然句子组成。这两个segment
拼接之后作为单个输入序列馈入BERT
,并以特殊的token
来分隔它们: $ \{\text{[CLS]}, x_1, \cdots , x_N, \text{[SEP]}, y_1, \cdots , y_M, \text{[EOS]}\} $ 。 $ M $ 和 $ N $ 受到约束使得 $ M+N \lt T $ ,其中 $ T $ 是一个超参数,控制训练期间的最大序列长度。根据
BERT
的原始论文,应该是 $ \{\text{[CLS]}, x_1, \cdots , x_N, \text{[SEP]}, y_1, \cdots , y_M, \text{[SEP]}\} $ 。该模型首先在一个大型的无标记文本语料库中进行预训练,随后使用下游任务的标记数据进行微调。
架构:
BERT
使用著名的Transformer
架构,我们将不详细回顾。我们使用一个具有 $ L $ 层的Transformer
架构。每个block
使用 $ A $ 个自注意头和隐层维度 $ H $ 。这里的
$ L $ 指的是有 $ L $ 个block
,每个block
具有多个子层。训练目标:在预训练期间,
BERT
使用两个目标:掩码语言模型和下一个句子预测next sentence prediction
。Masked Language Model: MLM
:在输入序列中随机选择一个token
,并用特殊的token
(即,[MASK]
)来代替。MLM
的目标是masked token
预测结果的交叉熵损失。BERT
均匀随机地选择15%
的input token
,然后在所选的token
中:80%
被替换为[MASK]
、10%
保持不变、10%
被替换为另一个被随机选择的vocabulary token
。在最初的实现中,
random masking
和random replacement
在开始时进行一次,并在训练期间save
起来(即固定下来)。尽管在实践中,数据是不断重复的(即,每个epoch
都会重复遍历一轮所有样本),所以每个训练句子在不同epoch
之间的mask
并不总是相同的。即,这里的
random masking
和random replacement
是在所有样本的所有epoch
上进行的,这必然需要对数据集存储多份,每一份对应于一个epoch
。Next Sentence Prediction: NSP
:NSP
是一种二元分类损失,用于预测两个segment
是否在原始文本中是相互紧跟着。正样本是通过从文本语料库中抽取前后连续的句子来创建的。负样本是通过将不同文件中的segment
配对来创建的。正样本和负样本是以相同的概率采样的。NSP
目标的设计是为了提高下游任务的性能,例如自然语言推理Natural Language Inference: NLI
,这需要推理句子对sentence pair
之间的关系。
Optimization
:BERT
用Adam
优化,超参数为 $ \beta_1 = 0.9, \beta_2=0.999 $ , $ \epsilon=10^{-6} $ (添加到分母上防止出现除以零的情况), $ L_2 $ 权重衰减为 $ 0.01 $ 。学习率在前一万步中被预热到 $ 10^{-4} $ 的峰值,然后线性衰减。BERT
训练时,所有层和注意力权重的dropout rate
为 $ 0.1 $ ,并采用GELU
激活函数。- 模型被预训练一百万个
step
(即, $ S=10^6 $ ),batch size
为 $ B=256 $ ,每个样本的最大长度为 $ T=512 $ 个token
。
数据:
BERT
是在BOOKCORPUS
和English WIKIPEDIA
这两个数据集的联合上进行训练的,总共包含16GB
的未压缩文本。
10.1.2 实验配置
实现:我们在
FAIRSEQ
中重新实现了BERT
。- 我们主要遵循前面给出的原始
BERT
超参数,除了峰值学习率和预热step
的数量(这两个超参数是针对每个setting
单独调优的)。 - 我们另外发现训练对
Adam
$ \epsilon $ 项非常敏感,在某些情况下,我们在调优它之后获得了更好的性能或改善了稳定性。同样地,我们发现设置 $ \beta_2=0.98 $ 可以在大的batch size
训练时提高稳定性。 - 我们用最长为
$ T=512 $ 个token
的序列进行预训练。 - 与原始
BERT
不同,我们不随机注入短序列,也不在前90%
的更新中使用缩短的序列长度进行训练。我们只用full-length
的序列进行训练。 - 我们在
DGX-1
机器上用混合精度浮点运算进行训练,每台机器有8
个32GB Nvidia V100 GPU
,通过Infiniband
互连。
- 我们主要遵循前面给出的原始
数据:
BERT
风格的预训练依赖于大量的文本。《Cloze-driven pretraining of self-attention networks》
证明,增加数据规模可以提高最终任务的性能。有几项工作在比原始BERT
更大、更多样化的数据集上进行了训练。不幸的是,并非所有的额外数据集都可以公开发布。对于我们的研究,我们专注于收集尽可能多的数据进行实验,使我们能够根据每个比较对象来匹配数据的整体质量和数量。我们考虑了五个不同规模和领域的英语语料库,总计超过
160GB
的未压缩文本。我们使用了以下的文本语料库:BOOKCORPUS plus English WIKIPEDIA
:这是用于训练BERT
的原始数据(16GB
)。CC-NEWS
:我们从CommonCrawl News dataset
的英文部分收集得到。该数据包含2016
年9
月至2019
年2
月间爬取的6300
万篇英文新闻文章(过滤后为76GB
)。OPENWEBTEXT
:是GPT-2
中描述的WebText
语料库的开源复现。该文本是从Reddit
上分享的URL
中提取的web
内容,至少有3
个以上的点赞 (38GB
)。STORIES
:《A simple method for commonsense reasoning》
介绍的数据集,包含CommonCrawl
数据的一个子集,经过过滤以符合Winograd
模式的故事式风格(31GB
)。、
评估:遵从前面的工作,我们评估了预训练模型在以下三个
benchmark
的下游任务的性能。GLUE
:General Language Understanding Evaluation: GLUE benchmark
是一个包含9
个数据集的集合,用于评估自然语言理解系统。GLUE
组织者提供了训练集和验证集的拆分,以及submission server
和排行榜从而允许参与者在private held-out
的测试集上评估和比较参与者的系统。对于
replication study
,我们报告了在相应的单任务训练数据上对预训练模型进行微调后的验证集结果(即,没有multi-task training
或ensembling
)。我们的微调程序遵循原始的BERT
论文。我们额外报告了从公共排行榜上获得的测试集结果。这些结果取决于一些
task-specific
的修改,我们在后文中描述了这些修改。SQuAD
:Stanford Question Answering Dataset: SQuAD
提供了一段上下文和一个问题。任务是通过从上下文中提取相关的span
来回答问题。我们对两个版本的SQuAD
进行评估:V1.1
和V2.0
。- 在
V1.1
中,上下文总是包含一个答案。此时 ,我们采用与BERT
相同的span prediction
方法。 - 而在
V2.0
中,一些问题在给定的上下文中没有答案,使任务更具挑战性。此时,我们增加了一个额外的二分类器来预测问题是否可以回答。我们通过将分类损失和跨度损失span loss
相加来联合训练。在评估过程中,我们只预测那些被分类为可回答的(context, question)
的span index
。
- 在
RACE
:ReAding Comprehension from Examinations: RACE
任务是一个大规模的阅读理解数据集reading comprehension dataset
,包括28,000
多个段落和近100K
个问题。该数据集收集自中国的英语考试,这些考试是为初中和高中学生设计的。在RACE
中,每个段落都与多个问题有关。对于每个问题,任务是从四个选项中选择一个正确的答案。与其他流行的阅读理解数据集相比,RACE
的上下文明显较长,需要进行推理的question
的占比很高。
10.1.3 训练过程分析
本节讨论并量化了哪些选择对成功预训练
BERT
模型是重要的。具体而言,我们首先用与BERT_BASE
相同的配置来训练BERT
模型( $ L=12,H=768,A=12 $ ,共110M
参数)。静态掩码和动态掩码:正如前面所讨论的,
BERT
依赖于随机掩码token
并预测这个被掩码的token
。原始的BERT
实现在数据预处理过程中进行了一次掩码,导致了单一的静态掩码static mask
。为了避免对每个训练样本在不同的epoch
中使用相同的掩码,训练数据被重复了10
次,因此在40
个epoch
的训练中,每个样本以10
种不同的方式被掩码。因此,在训练期间,每个训练样本都被以相同的掩码而看过四次。我们将这一策略与动态掩码
dynamic masking
进行比较。在动态掩蔽中,我们每次向模型馈入序列时都会生成masking pattern
。在以更多的step
或更大的数据集进行预训练时,这一点变得至关重要。如果是静态掩码,那么需要数据集拷贝多份,假如大型数据集是
1TB
,拷贝100
份那么就是100TB
下表比较了
BERT
原始论文公布的BERT_BASE
结果和我们用静态掩码或动态掩码的重新实现。我们发现,我们对静态掩码的重新实现与原始BERT
模型的表现相似,而动态掩码与静态掩码相当或略好。模型输入格式和
NSP
:在最初的BERT
预训练程序中,除了MLM
目标之外模型还有一个Next Sentence Prediction: NSP
目标。NSP
目标被认为是训练原始BERT
模型的一个重要因素。BERT
原始论文观察到:移除NSP
目标会损害性能,在QNLI
、MNLI
和SQuAD 1.1
上的性能明显下降。然而,最近的一些工作质疑了NSP
目标的必要性。为了更好地理解这种不一致,我们比较了几种替代的训练格式:
SEGMENT-PAIR+NSP
:这遵循了BERT
中使用的原始输入格式,以及NSP
损失。每个输入有一对segment
,每个segment
可以包含多个自然句子,但总的拼接长度必须小于512
个token
。SENTENCE-PAIR+NSP
:每个输入包含一对自然句子,可以从一个文档的连续部分采样,也可以从不同的文档分别采样。由于这些输入长度明显小于512
个token
,我们增加了batch size
,使token
的总数保持与SEGMENT-PAIR+NSP
相似。我们保留了NSP
损失。区别在于
segment pair
还是sentence pair
。FULL-SENTENCES
:每个输入都是由从一个或多个文档中连续采样的完整句子打包而成,其中总长度最多为512
个token
。输入可能会跨文档的边界。当我们到达一个文档的末尾时,我们开始从下一个文档中采样句子,并在文档之间增加一个额外的分隔符。我们移除了NSP
损失。DOC-SENTENCES
:输入的构造与FULL-SENTENCES
类似,只是它们不能跨越文档的边界。在文档结尾处采样的输入可能短于512
个token
,所以我们在这些情况下动态地增加batch size
,以达到与FULL-SENTENCES
相似的总token
数量。我们移除了NSP
损失。
下表展示了四个不同
setting
的结果。- 我们首先比较了
BERT
的原始SEGMENT-PAIR
输入格式和SENTENCE-PAIR
格式。这两种格式都保留了NSP
损失,但后者使用了单个句子。我们发现:使用单个句子(而不是segment
)会损害下游任务的性能,我们假设这是因为模型无法学习长距离的依赖关系。 - 我们接下来比较了单个文档的文本块(
DOC-SENTENCES
)且没有NSP
损失的训练。我们发现,这种setting
优于最初公布的BERT_BASE
结果(下表的倒数第三行),并且相比于该结果,这里移除NSP
损失后下游任务性能相匹配或略有改善。有可能最初的BERT
实现中针对移除NSP
进行评估时,可能只是移除了损失项,而仍然保留了SEGMENT-PAIR
的输入格式。 - 最后我们发现,限制序列来自单个文件(
DOC-SENTENCES
)的表现要比打包来自多个文件(FULL-SENTENCES
)的序列略好。然而,由于DOC-SENTENCES
格式导致batch size
大小不一,我们在剩下的实验中使用FULL-SENTENCES
以便于与相关工作进行比较。
更大的
batch size
来训练:过去在神经机器翻译方面的工作表明,在适当提高学习率的情况下,用非常大的mini-batch
训练既可以提高训练速度、也可以提高end-task
性能(《Scaling neural machine translation》
)。最近的工作表明,BERT
也适用于大batch
的训练《Reducing bert pre-training time from 3 days to 76 minutes》
。BERT
原始论文最初对BERT_BASE
进行了一百万步的训练,batch size = 256
。通过梯度积累gradient accumulation
,这在计算成本上相当于以batch size = 2K
训练125K
步,或以batch size = 8K
训练31K
步。在下表中,我们比较了当增加
batch size
时(控制了每个训练样本被访问的次数,即相应地减少迭代步数),BERT_BASE
的困惑性perplexity
和下游任务性能。我们观察到:用大batch size
的训练改善了MLM
目标的困惑度、以及下游任务的准确率。大batch size
的训练也更容易通过分布式数据并行训练来实现(因为DDP
数据并行等价于扩大batch size
),在后面的实验中,我们用batch size = 8K
来训练。注意,在增加
batch size
的时候也需要相应地增加学习率。值得注意的是,
《Reducing bert pre-training time from 3 days to 76 minutes》
用更大的batch size
来训练BERT
,最高可达batch size = 32K
。我们把对大batch
训练的极限的进一步探索留给未来的工作。文本编码:
Byte-Pair Encoding: BPE
(《Neural machine translation of rare words with subword units》
)是character-level representation
和word-level representation
的混合体,可以处理自然语言语料库中常见的large vocabulary
。BPE
依赖于子词单元subwords unit
,而不是全词full word
,子词单元是通过对训练语料库进行统计分析而抽取的。BPE vocabulary size
通常在10K-100K
个子词单元之间。然而,在对大型和多样化的语料库进行建模时(例如在本文所考虑的语料库),unicode character
可以占到这个vocabulary
的相当大的一部分。GPT-2
介绍了BPE
的一个巧妙实现,使用字节byte
而不是unicode character
作为基本的子词单元。使用字节使得学习一个规模不大的subword vocabulary
(50K
个单元)成为可能,该vocabulary
仍然可以对任何输入文本进行编码,而不会引入任何 "unknown
"的标记。unicode character
是2
个字节,编码空间大小是65536
。相比之下,byte
是1
个字节,编码空间大小是256
。原始的
BERT
实现使用大小为30K
的character-level BPE vocabulary
,这是在用启发式tokenization
规则对输入进行预处理后学习的。按照GPT-2
的做法,我们转而考虑用一个更大的byte-level BPE vocabulary
来训练BERT
,其中包含50K
个子词单元,不需要对输入进行任何额外的预处理或tokenization
。这为BERT_BASE
和BERT_LARGE
分别增加了约15M
和20M
的额外参数。早期的实验显示,这些编码之间只有轻微的差异,
GPT-2
的BPE
在一些任务上取得了略差的end-task
性能。尽管如此,我们认为通用编码方案的优势超过了性能的轻微下降,并在我们其余的实验中使用这种编码。对这些编码的更详细的比较将留给未来的工作。
10.2 RoBERTa
在前文中,我们提出了对
BERT
预训练程序的修改,以提高下游任务的性能。现在我们汇总这些改进并评估其综合影响。我们称这种配置为RoBERTa
,即Robustly optimized BERT approach
。具体而言,RoBERTa
采用动态掩码、无NSP
损失的FULL-SENTENCES
、大型的mini-batch
、较大的byte-level BPE
进行训练。此外,我们还调研了在以前的工作中没有得到重视的其他两个重要因素:用于预训练的数据、以及训练
epoch
数。例如,最近提出的XLNet
架构使用比原始BERT
多了近10
倍的数据进行预训练。此外,XLNet
也是以8
倍的batch size
、一半的训练step
来进行训练,因此XLNet
与BERT
相比在训练期间看到了4
倍的样本 。为了帮助将这些因素的重要性与其他建模选择(如,预训练目标)分开,我们首先按照
BERT_LARGE
架构( $ L=24,H=1024,A=16 $ ,一共 $ 355M $ 个参数)来训练RoBERTa
。我们在可比的BOOKCORPUS
加WIKIPEDIA
数据集上进行了100K
步的预训练,正如BERT
原始论文所使用的那样。我们使用1024
个V100 GPU
对我们的模型进行了大约一天的预训练。BERT
预训练进行了一百万步,而这里才预训练十万步?这是因为RoBERTa
使用了更大的batch size
(batch size = 8K
),而原始BERT
仅使用batch size = 256
。实验结果如下表所示。
当控制训练数据时(第一行结果),我们观察到
RoBERTa
比最初报告的BERT_LARGE
结果有了很大的改进,再次证实了我们在前文中探讨的设计选择的重要性。RoBERTa
训练期间处理的总数据量为8K * 100K
,要远大于BERT
(0.256K * 1000 K
),为后者的3.125
倍。所以效果好可能是因为训练的总数据量更大?接下来,我们将这些数据与前文描述的另外三个数据集(
CC-NEWS
、OPENWEBTEXT
、STORIES
)结合起来(数据规模扩大十倍,160GB vs 16GB
)。我们在合并的数据集上训练RoBERTa
,训练的步数与之前相同(100K
)。总体而言,我们对160GB
的文本进行了预训练。我们观察到所有下游任务的性能都有进一步的改善,验证了预训练中数据大小和多样性的重要性。最后,我们对
RoBERTa
的预训练时间明显延长,将预训练的步数从100K
增加到300K
甚至500K
。我们再次观察到下游任务性能的显著提高,300K
和500K
训练步数的模型在大多数任务中的表现都超过了XLNet_LARGE
。我们注意到,即使是我们训练时间最长的模型,似乎也没有过拟合我们的预训练数据,很可能会从additional training
中受益。这里面引出一个话题:要想评估两个模型架构的相对好坏,需要在相同的数据集上训练相同的
epoch
。
接下来我们在三个不同的
benchmark
(即,GLUE
、SQuaD
、RACE
)上评估我们最好的RoBERTa
模型。具体而言,我们考虑在所有五个数据集(即BOOKCORPUS
、English WIKIPEDIA
、CC-NEWS
、OPENWEBTEXT
、STORIES
)上训练500K
步的RoBERTa
。
10.2.1 GLUE 结果
对于
GLUE
,我们考虑两种微调setting
:在第一种
setting
中(single-task
,dev
),我们为每个GLUE
任务单独微调RoBERTa
,只使用相应任务的训练数据。我们考虑对每个任务进行有限的超参数调优,其中 $ \text{batch size}\in \{16,32\} $ , $ \text{learning rate}\in \left\{10^{-5},2\times10^{-5},3\times 10^{-5} \right\} $ ,学习率在前6%
的step
中进行线性预热然后线性衰减到0
。我们微调10
个epoch
,并根据每个任务的评价指标对验证集进行早停early stopping
。其余的超参数与预训练时保持一致。在这种
setting
下,我们报告了每个任务在五个随机初始化中的验证集指标,没有model ensembling
。在第二种
setting
中(ensembles
,test
),我们通过GLUE
排行榜将RoBERTa
与其它方法比较测试集上的评估结果。虽然许多提交给GLUE
排行榜的方法都依赖于多任务微调multi-task finetuning
,但我们的方法只依赖于单任务微调single-task finetuning
。对于RTE
、STS
和MRPC
,我们发现从MNLI
单任务模型开始微调是有帮助的,而不是从baseline
预训练的RoBERTa
开始。我们探索了一个更大的超参数空间(如下表所述),每个任务采用5 ~ 7
个模型的集成ensemble
(不同的checkpoint
)。
task-specific
修改:GLUE
的两项任务需要task-specific
的微调方法,以获得有竞争力的排行榜结果:QNLI
: 最近在GLUE
排行榜上提交的结果对QNLI
任务采用了pairwise ranking
,即从训练集中挖掘出候选答案并相互比较,然后将其中一个(question, candidate)
判定为正类positive
。这种形式大大简化了任务,但与BERT
没有直接可比性。遵从最近的工作,我们在test submission
中采用了ranking
方法,但为了与BERT
直接比较,我们报告了基于pure classification
方法的验证集结果。WNLI
:我们发现提供的NLI
格式的数据具有挑战性。相反,我们使用了来自SuperGLUE
的重新格式化的WNLI
数据,该数据指示了query
代词和参考词referent
的跨度span
。我们使用《A surprisingly robust trick for winograd schema challenge》
的margin ranking loss
来微调RoBERTa
。对于一个给定的输入句子,我们使用spaCy
从句子中提取额外的候选名词短语(作为负样本),并对我们的模型进行微调,使其对positive referent phrase
的评分高于任何生成的negative candidate phrase
的评分。这种形式的一个不幸的后果是,我们只能利用positive
的训练样本,这就排除了一半以上的训练样本。
实验结果如下表所示。
- 在第一个
setting
(single-task
,dev
)中,RoBERTa
在所有9
个GLUE
任务的验证集上都取得了SOTA
的结果。最重要的是,RoBERTa
使用了与BERT_LARGE
相同的MLM
预训练目标和架构,但却一致性地优于BERT_LARGE
和XLNet_LARGE
。这就提出了模型架构和预训练目标的相对重要性的问题,相比于我们在这项工作中探讨的数据集大小和训练时间等更普通的细节。 - 在第二个
setting
(ensembles
,test
)中,我们将RoBERTa
提交到GLUE
排行榜,并在9
个任务中的4
个任务中取得了SOTA
的结果,并且是迄今为止最高的平均得分。这特别令人振奋,因为RoBERTa
不依赖于多任务微调,与其他大多数top submission
不同。我们希望未来的工作可以通过纳入更复杂的多任务微调程序来进一步改善这些结果。
- 在第一个
10.2.2 SQuAD 结果
与过去的工作相比,我们对
SQuAD
采取了更简单的方法。具体而言,虽然BERT
和XLNet
都用额外的QA
数据集来增强他们的训练数据,但我们只用所提供的SQuAD
训练数据来微调RoBERTa
。XLNet
原始论文还采用了一个自定义的layer-wise
学习率调度来微调XLNet
,而我们对所有层使用相同的学习率。- 对于
SQuAD v1.1
,我们遵循与BERT
相同的微调程序。 - 对于
SQuAD v2.0
,我们还对一个给定的问题是否可以回答进行了分类。我们通过对分类损失和span loss
进行求和,将这个分类器与span predictor
联合训练。
- 对于
结果如下表所示。
在
SQuAD v1.1
验证集上,RoBERTa
与XLNet
相匹配。在SQuAD v2.0
验证集上,RoBERTa
创造了新的SOTA
,比XLNet
提高了0.4
个点(EM
)和0.6
个点(F1
)。我们还将
RoBERTa
提交到公共的SQuAD 2.0
排行榜,并评估其相对于其他系统的性能。大多数top
系统都建立在BERT
或XLNet
的基础上,这两个系统都依赖于额外的外部训练数据。相比之下,我们的submission
没有使用任何额外的数据。我们的单个
RoBERTa
模型优于所有单一模型的submission
,并且是那些不依赖数据增强的系统中得分最高的。
10.2.3 RACE 结果
在
RACE
中,系统被提供了一段文字、一个相关的问题和四个候选答案。系统需要回答这四个候选答案中哪一个是正确的。我们为这项任务修改了
RoBERTa
:- 首先,将每个候选答案与相应的问题和段落拼接起来,形成单个序列。(因为有四个候选答案,因此得到四个序列)。
- 然后,我们对这四个序列中的每一个进行编码,并将得到的
[CLS] representation
通过一个全连接层,用来预测正确的答案。
我们截断超过
128
个token
的question-answer
,如果需要的话也截断段落,使序列的总长度最多为512
个token
。下表列出了
RACE
测试集的结果。RoBERTa
在初中setting
和高中setting
上都取得了SOTA
的结果。
10.2.4 结论
在对
BERT
模型进行预训练时,我们仔细评估了一些设计决策。我们发现以下决策可以大大改善BERT
在下游任务上的性能:- 对模型进行更长时间的训练(即更多的
epoch
)。 - 在更多的数据上进行更大
batch
的训练(需要增大学习率)。 - 取消
next sentence prediction: NSP
的目标。 - 在更长的序列上进行训练(即更长的上下文)。
- 动态改变应用于训练数据的
masking pattern
(即dynamic masking
)。
我们改进后的预训练程序被称作
RoBERTa
。- 对模型进行更长时间的训练(即更多的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论