BERT与GPT:语言模型的双子星

随着论文《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个任务:

  1. 掩码语言模型(MLM):随机遮蔽15%的输入词,模型需预测被遮蔽词(其中80%替换为[MASK],10%随机替换,10%保持不变)。MLM借鉴了CBOW的思路,类似于做完形填空。
  2. 下一句预测(NSP):判断两个句子是否为连续文本,增强篇章理解能力。这个任务作用不是很大。

1.3 BERT vs RoBERTa:优化方向的演进

RoBERTa(Robustly Optimized BERT)通过四项关键改进提升BERT性能:

  1. 动态掩码:训练时对同一数据多次随机遮蔽,替代静态掩码,增强模型鲁棒性。
  2. 移除NSP任务:实验证明NSP对下游任务无显著增益,改为连续文本输入。
  3. 更大批次与数据量:批次从256增至8,000,训练数据从16GB扩至160GB。
  4. 更长的训练周期:从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)。

这个特点带来了更强的适配性,另一方面也存在一些问题:

  1. 训练和推理存在gap,训练时token中存在了推理阶段没有的token:[MASK]。因此在训练阶段[MASK]比例不能太高,就像是完形填空不能一篇文章全是空,那就没法填了。
  2. 论文采用的遮蔽方式太不优雅,随机遮蔽15%的比例,也造成了训练效率低下,即每次只有15%的token被训练,而计算量是100%。
  3. 另外,为了实现自监督学习,Bert需要有解码器,并且解码器不能太简单。而在训练完成之后的大部分场景,解码器是无用的,也是白白浪费算力。

GPT模型的一大特点是自回归生成,训练与推理一致,完全属于是端到端的模型架构。那他的缺点就是不方便外接下游任务,不像Bert生成的向量可以给各种各样的下游模型使用。

不过理论上,生成的方式可以解决目前所有的NLP任务,而且GPT使用prompt来适配不同任务的方式更加自然,更加符合人类的使用习惯。现在的问题是生成式任务自由度太高了,GPT基础模型还不够强,实现不了仅通过prompt的方式适配所有任务。


  上一篇
Python包管理工具深度解析:venv、conda、poetry与uv Python包管理工具深度解析:venv、conda、poetry与uv
在Python开发中,包管理工具的选择直接影响项目的可维护性、依赖隔离和协作效率。本文将从核心功能、适用场景、操作实践等角度,全面解析四大主流工具:**venv**、**conda**、**poetry**和**uv**,并对比其优缺点,助你找到最适合项目的解决方案。
2024-04-19
下一篇 
python多进程中的坑 python多进程中的坑
线上环境docker容器中使用python多进程开发时遇到另一个小坑,做一下记录。问题表现为docker容器卡死,不执行程序并且也不再消费消息队列中的任务。
2022-02-15
   目录