读书笔记及总结
(一)提出的背景
在CV领域,基于微调的技术已经成功得到了应用。(例如在ImageNet上预训练的模型在小图片数据集中只需要改变最后的输出层,然后基于微调的技术就能得到该数据集上的模型,这样做能够加速模型收敛,节省时间)。但是在NLP领域还没有出现比较好的模型用来做迁移学习,所以BERT就创建了NLP领域微调的先河。只需增加一个输出层,就可以对预先训练好的BERT模型进行微调,从而为广泛的任务(如问答和语言推理)创建最先进的模型,而无需对特定任务的体系结构进行大量修改。
(二)BERT模型的训练步骤
BERT模型有两个步骤:预训练和微调。预训练:模型在不同的预训练任务中基于未标记的数据进行训练。微调:使用预训练的参数初始化BERT模型,然后使用下游任务的标记数据对所有参数进行微调。BERT模型的一个显著特点是其跨不同任务的同一体系结构,预训练的体系结构和最终的下游任务的体系结构的差异最小。每个下游任务都有单独的微调模型,即使它们是用相同的预训练参数初始化的。
(三)BERT模型的架构
BERT使用的是多层双向的Transformer编码器结构,抛弃了传统的RNN和CNN架构,通过Attention机制将任意位置的两个单词的距离转换成,有效地解决了NLP中棘手的长期依赖问题。
论文中描述了两个尺寸的BERT。
BERT-BASE:L=12,H=768,A=12,总参数量110M
BAET-LARGE:L=24,H=1024,A=16,总参数量340M
(L:网络层数,即Transformer blocks的数量 A:自注意力头的数量
H:隐藏层的尺寸)
其中BERT-BASE和GPT的参数量相近,但BERT的性能要比GPT好。
(四)输入表示
BERT的输入的编码向量(长度为512)是三个嵌入特征的单位和,这三个词嵌入的特征是:
1.WordPiece嵌入:WordPiece是指将单词划分成一组有限的公共子词单元,能在单词的有效性和字符的灵活性之间取得一个平衡。
2.位置嵌入(Position Embedding):位置嵌入是将单词的位置信息编码成特征向量,位置嵌入是向模型中引入单词位置关系的至关重要的一环。
3.分割嵌入(Segment Embedding):通过学习得到区分两个句子的信息,例如B是否是A的下文。对于句子对,第一个句子的特征值是0,第二个句子的特征值是1.
其中[CLS]表示该特征用于分类,即在输入中,该位置的向量已经包含整个句子的信息,对该位置向量进行Softmax分类就能得到该句子的类别。
[SEP]表示分句符号,用于断开输入语料中的两个句子。
(五)预训练BERT
(1)训练数据
BERT使用BooksCorpus(800M单词)和English Wikipedia(2500M单词)语料库来训练模型。为了提取长序列的信息,使用文档级语料库而不是打乱的句子级语料库。
(2)训练任务
BERT在预训练过程中训练两个任务。
①带掩码的语言模型。BERT使用双向的编码器,所以每个位置能得到左右两边的信息。这种方法比ELMo的只是将left-to-right和right-to-left分别训练拼接起来要好。Masked Language Model(MLM)的核心思想来自Tayor在1953年发表的一篇论文。MLM在训练时随机从输入语料中mask掉一些单词,然后通过上下文进行预测该单词,这个任务很像英文完形填空。
在BERT的实验中,15%的WordPiece Token会被随机Mask掉。在训练模型时,一个句子会被多次喂到模型中用于参数学习,但是并不是在每次都mask掉这些单词,而是在确定要Mask掉的单词之后,80%的时候会直接替换为[MASK],10%替换为其他任意单词,10%的时候保留原始Token。
为什么这样做?
如果句子中的某个Token100%被mask掉,那么在fine-tuning的时候模型就会有一些没有见过的单词。加入随机Token的原因是因为Transformer要保持对每个输入token的分布式表征,否则模型就会记住这些[mask]是某个token。至于单词带来的负面影响,因为一个单词被随机替换掉的概率只有10% * 15% = 1.5%,负面影响较小。另外文章指出,每次只预测15%的单词,模型收敛会较慢
②下一个句子的预测。
很多下游的任务是基于理解两个句子之间的关系,而语言模型并不能直接捕获这些关系,所以BERT训练去理解句子级别的关系。训练数据中50%是两个相邻的句子(正例),50%是两个不相邻的数据(负例)。
(六)微调
在海量语料训练完BERT之后,便可以将其应用到NLP的各个任务中。对应于NSP任务来说,其条件概率表示为P = softmax(CW^T),其中C是BERT输出中的[CLS]符号,W是可学习的权值矩阵。
对于其他任务来说,我们也可以根据BERT的输出信息做出相应的预测。图5展示BERT在不同任务中的模型,它们只需要在BERT的基础上再添加一个输出层便可以完成对特定任务的微调。
(七)训练参数
batch size=32 epoch=3 lr=5e-5,4e-5,3e-5,2e-5
对于BERT-LARGE来说,微调在小数据集上是稳定的,可能需要多训练几个epoch。
(八)结果
在11个NLP任务上展示了微调结果。其中包括GLUE、SQuAD v1.1、SQuAD v2.0、SW AG等等。
在所有任务中,BERT的效果都是最好的。同时BERT-LARGE又比BERT-BASE的效果要好,尤其是那些训练数据很少的任务上,BERT-LARGE显著优于BERT-BASE。自此以后,各个大厂都致力于将模型做大,爆发了模型大战。
(九)总结
BERT的优缺点:
优点:
①在相同的模型参数的情况下,BERT的效果要优于ELMo和GPT
②使用Transformer的结构,相对于RNN更加高效,更难捕捉长距离的依赖。
③使用双向的Transformer编码器结构,更难提取到语义信息。
④开启了NLP领域的迁移学习的先河。
缺点:
①虽然BERT在NLP分类任务上效果显著,但是BERT无法用于NLP生成任务(例如机器翻译、文本摘要等等)
②模型太大,训练较慢。
③使用带掩码的语言模型,每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢。