随着论文《Attention is All You Need》的发表,常用的RNN结构逐渐被抛弃。出现了基于attention的Transformer模型架构。
在seq2seq模型架构中,存在一个encoder与一个decoder,这二者都是基于RNN结构。而当把原本的RNN结构换成多头attention(还包括位置向量、归一化和残差等模块)就形成了Transformer模型架构。
而GPT和BERT是Transformer模型架构中最流行的两种语言模型。
1 BERT模型结构:双向编码
1.1 核心架构
bert严格说来属于是Transformer的编码器部分,虽然在预训练过程中需要使用解码器,但是训练完成之后这部分就被丢弃,只保留了编码器部分。所以,我们下载到的开源bert模型的输出为编码器生成的embedding向量。
模型结构方面比较简单,主要是使用了attention代替RNN,具体可以看之前写的关于attention的博客。
1.2 预训练
Bert模型的思路和ELMO一脉相承,ELMO采用了很典型的两阶段过程,第一阶段,对语言模型进行预训练;第二阶段,是进行下游任务时,将Embedding作为新特征补充到下游模型中。
Bert模型采用双向自注意力机制。其输入由三部分嵌入向量相加构成:
- Token Embeddings:对输入token进行向量化(含特殊符号[CLS]和[SEP])
- Segment Embeddings:区分句子对(如问答中的问题与答案)
- Position Embeddings:编码序列中每个token的位置信息
Bert模型在预训练阶段有2个任务:
- 掩码语言模型(MLM):随机遮蔽15%的输入词,模型需预测被遮蔽词(其中80%替换为[MASK],10%随机替换,10%保持不变)。MLM借鉴了CBOW的思路,类似于做完形填空。
- 下一句预测(NSP):判断两个句子是否为连续文本,增强篇章理解能力。这个任务作用不是很大。
1.3 BERT vs RoBERTa:优化方向的演进
RoBERTa(Robustly Optimized BERT)通过四项关键改进提升BERT性能:
- 动态掩码:训练时对同一数据多次随机遮蔽,替代静态掩码,增强模型鲁棒性。
- 移除NSP任务:实验证明NSP对下游任务无显著增益,改为连续文本输入。
- 更大批次与数据量:批次从256增至8,000,训练数据从16GB扩至160GB。
- 更长的训练周期:从BERT的1M步增至300K-500K步,充分挖掘模型潜力。
性能提升:RoBERTa在GLUE基准测试中平均提升2-3个百分点,尤其在长文本理解任务中表现突出。
1.4 BERT的评价
Bert的效果很强,一出现就霸榜,但是它的优越性不在于多么新奇的网络结构,或者是新的训练方式(MLM),而是它证明了Transformer的上限要远超RNN和LSTM。
另外,通过Bert与RoBERTa的对比,我们可以发现,Bert也还没有充分发掘出Transformer的能力上限,只要有更多更优质的数据,更深的模型层数,就可以得到更强大的模型。
2 GPT模型结构:自回归生成
2.1 核心架构
GPT系列(如GPT-3)基于Transformer的解码器堆叠,采用掩码自注意力机制(仅允许关注左侧上下文)。其训练特点包括:
自回归语言建模:逐词生成,通过上文预测下一个词(如“我爱__”预测“你”)。类似于写作文任务。
无监督预训练 + 零样本学习:无需微调即可完成对话、翻译等生成任务。
3 BERT vs GPT:架构与能力的本质差异
3.1 GPT和Bert强弱对比
GPT只采用Context-before,即这个单词的上文来进行预测,所以普遍认为其在上下文的理解上较弱于Bert。
个人认为根本上是二者在训练阶段的不同训练方式导致的。
Bert的编码器结构将token编码成embedding向量,然后由下游模型去微调完成下游任务,并且一般的下游任务为分类任务。由于额外的网络结构,加上特地为分类任务去微调,天然导致Bert模型在这方面更强。
而GPT训练过程更偏向于文本生成,因此在文本生成方面也要强于Bert模型。
3.2 GPT和Bert的缺陷和发展方向
Bert模型的一大特点就是两阶段训练,一阶段训练出encoder,二阶段结合下游模型微调(也可以freeze一阶段的encoder)。
这个特点带来了更强的适配性,另一方面也存在一些问题:
- 训练和推理存在gap,训练时token中存在了推理阶段没有的token:[MASK]。因此在训练阶段[MASK]比例不能太高,就像是完形填空不能一篇文章全是空,那就没法填了。
- 论文采用的遮蔽方式太不优雅,随机遮蔽15%的比例,也造成了训练效率低下,即每次只有15%的token被训练,而计算量是100%。
- 另外,为了实现自监督学习,Bert需要有解码器,并且解码器不能太简单。而在训练完成之后的大部分场景,解码器是无用的,也是白白浪费算力。
GPT模型的一大特点是自回归生成,训练与推理一致,完全属于是端到端的模型架构。那他的缺点就是不方便外接下游任务,不像Bert生成的向量可以给各种各样的下游模型使用。
不过理论上,生成的方式可以解决目前所有的NLP任务,而且GPT使用prompt来适配不同任务的方式更加自然,更加符合人类的使用习惯。现在的问题是生成式任务自由度太高了,GPT基础模型还不够强,实现不了仅通过prompt的方式适配所有任务。