GPT系列模型是完全基于Transformer构建的,与BERT致力于通过双向上下文来“理解”语言不通,GPT的中心在生成语言。它的设计初衷是为了根据给定的上文,以自回归的方式预测下一个最可能得词元,这种特性使其在文本生成、对话系统、内容续写等任务上展现出无与伦比的能力。
一、GPT的设计思想与技术发展
GPT早起也是遵循预训练+微调的思路,随着模型规模的指数级增长,提示(prompt)和上下文学习(ICL)开始成为主流,允许用户在不更新参数的情况下完成任务。
1.1 因果语言模型
GPT的成功依赖于预训练任务——因果语言模型,也就是预测下一个词。给定文本序列,模型目标是最大化榆次下一个词元的概率。单向的,只能看到在这之前的词。
1.2 从微调到提示
(1)GPT-1: 有监督的微调
GPT-1的思路是现在无标注的数据上进行无监督预训练,然后在特定任务的有标注数据上进行有监督微调。关键创新是提出了任务特定的输入变换,为了解决不同任务输入格式不一致的问题(如问答需要输入文章、问题、答案),GPT-1不改变模型架构,通过在输入文本中加入特殊分隔符(如start,delimiter,extract)将结构化输入转换为有序的序列。例如,对于文本蕴含任务,将前提和假设用$符号拼接后输入模型。
(2)GPT-2: 零样本学习
认为语言模型即多任务学习。当模型规模扩大并使用高质量的数据集训练后,模型展现出无需微调的零样本能力。该模型在架构上进行了微调,将LayerNorm移动到了每个子层的输入端,并增加了上下文窗口大小。
(3)GPT-3: 上下文学习
定位是少样本学习者。参数量推向了惊人的1750亿。上下文学习是指模型在推理阶段不需要更新任何权重,仅凭输入提示中给出的少量示例,就能理解并完成新任务。
这标志着我们不再为每个任务训练一个专用模型,而是通过设计提示词来激发通用大模型的能力。
通过这种方式,几乎所有自然语言处理任务都可以被转换成一个通用idea问答或续写方式。以文本分类为例,旧方法(微调)是“输入句子->[CLS]向量-> 分类头-> 类别标签”,而新方法(提示)则是输入提示。
二、GPT架构解析
2.1 模型基本结构
GPT架构是Transformer的解码器模块堆叠而成。
传统transformer解码器架构
掩码多头自注意模块+交叉注意力模块+ADD&Norm+ 位置前馈网络
GPT系列: 由于没有编码器,所以没有交叉注意力模块

GPT-1的模型架构与微调策略。左侧是基于Transformer解码器的模型主题,微调阶段,模型除了输出任务分类结果,还可以保留语言模型预测(Text Prediction)作为辅助目标。计算特定任务损失的时候,会加上一个权重的语言模型损失,即L=Ltask+λLlm. 多任务学习策略不仅能帮助模型泛化,还能加速收敛。
右侧描述出不同任务类型,适配到预训练模型中。
分类任务: 文本前后添加Stast和Extract标记
蕴含任务:前提和假设用分隔符拼接
相似性任务: 用两个句子按不同顺序拼接分别输入模型,最后两者特征相加作为最终表示。(因为GPT模型是单向的)
多选题任务:将山修改文与每一个答案选项分别拼接,独立输入模型计算得分。
2.2 关键架构演进
(1)特殊Token: GPT系列模型通常使用<|endoftext|>作为主要特殊token。它既可以表示文本的结束,也可以在预训练是用作不同文档之间的分隔符。在微调或Few-shot学习时,它常被用来分割示例。
(2)归一化位置: GPT-1采用Post-Norm结构(与原始Tranformer和Bert一致)是LayerNorm(x+SubLayer(x))。到了GPT-2/3则专项Pre-Norm架构,即x+SubLayer(LayerNorm(x))。 这一改进缓解了深层网络梯度消失/爆炸的问题,让训练更深的模型成为可能。
(3)输入表示与最大长度: GPT系列模型的词元嵌入采用的是字节级BPT(Byte-level BPT), 位置嵌入采用的科学系的位置嵌入。上下文窗口从GPT-1的512,到GPT-2的1024,到了GPT-3的2048,不断增加。
(4)无片段嵌入: GPT输入总是一个连续的文本流,不区分句子片段,所以没有BERT那样的Segment Embeddings。

2.3 GPT与BERT的主要差异

上下文长度上限指的是什么?token限制
上下文窗口的容量由你输入的内容和模型生成的回复共同占用。
image.png
当文本过长时,注意力机制也会面临“注意力稀释”或“消失注意力”的问题。
处理长文档时:选择上下文窗口足够大的模型,避免信息被截断。
进行长对话时:意识到模型可能会“遗忘”最早的对话内容,必要时需要总结或开启新对话。
三、GPT代码实战
理解GPT模型自回归原理。
四、总结
GPT模型是decoder架构,丢弃了传统transformer的decoder架构中的交叉注意力模块。他依赖于因果语言模型,预测下一个词。
从GPT-1需要预训练加微调,到GPT-2支持few-shot, GPT-3可以few-shot。这依赖于“大规模预训练”与“上下文学习(In-Context Learning)”机制共同作用的结果。
