07 GPT-1 论文精读:生成式预训练如何用于 NLP 任务? 在前面几章中我们已经介绍了 Transformer、Self-Attention、Decoder-only 架构和 Tokenizer。到这里我们终于可以正式进入 GPT 路线。今天我们要精读的是 GPT 系列的起点GPT-1。GPT-1 对应的论文是Improving Language Understanding by Generative Pre-Training这篇论文由 OpenAI 在 2018 年提出。现在回头看GPT-1 的规模并不算大也没有今天 ChatGPT、GPT-4、LLaMA、Qwen、DeepSeek 这些模型那么强大的对话和推理能力。但是它的意义非常重要。因为 GPT-1 提出了一个非常关键的路线先在大规模无标注文本上进行生成式预训练再在下游任务上进行有监督微调。这条路线后来逐渐发展成GPT-1 ↓ GPT-2 ↓ GPT-3 ↓ InstructGPT / ChatGPT ↓ 现代大语言模型所以GPT-1 不是今天大模型能力的终点而是 GPT 技术路线的起点。一、GPT-1 想解决什么问题在 GPT-1 之前NLP 中很多任务都依赖有监督数据。例如文本分类需要标注好的类别 自然语言推理需要标注好的句子关系 问答任务需要问题、文章和正确答案 语义相似度任务需要句子对和相似度标签这些任务各自需要专门的数据集和模型设计。但是有一个问题非常明显标注数据很贵而无标注文本很多。互联网上有大量书籍、网页、新闻、论坛、百科和代码这些文本不需要人工标注就天然存在。相比之下高质量人工标注数据往往规模有限并且构建成本很高。GPT-1 的核心想法就是能不能先用大量无标注文本训练一个通用语言模型让它学到语言结构、语义知识和世界知识然后再把这个模型迁移到各种下游任务这就是论文中的两阶段训练思想第一阶段无监督生成式预训练 第二阶段有监督下游任务微调这在今天看起来很自然但在当时是非常关键的一步。它把 NLP 模型从“每个任务单独训练”推进到了“先训练一个通用模型再迁移到不同任务”的范式。二、GPT-1 的整体框架预训练 微调GPT-1 的完整流程可以概括为大规模无标注文本 ↓ 训练 Transformer Decoder 语言模型 ↓ 得到预训练参数 ↓ 构造下游任务输入格式 ↓ 加入线性分类层 ↓ 在有标签任务上微调也就是说GPT-1 并不是只做文本生成。它的论文标题里虽然有 “Generative Pre-Training”但它关注的是如何通过生成式预训练提升language understanding tasks也就是语言理解任务。论文评估的任务包括自然语言推理 问答 语义相似度 文本分类这点很重要。现在很多人看到 GPT会自然想到“生成式对话模型”。但 GPT-1 当时的主要目标是证明一个通过生成式语言建模预训练出来的 Transformer也可以迁移到多种自然语言理解任务上。它的路线不是为每个任务重新设计复杂模型而是尽量保持模型主体不变只通过输入格式转换和一个简单线性层完成迁移。三、第一阶段无监督生成式预训练GPT-1 的第一阶段是在无标注文本上训练语言模型。假设无监督语料是一个 token 序列GPT-1 使用标准语言模型目标给定前面的 token预测当前 token。论文中的目标可以写成其中U是无标注文本语料是当前位置的 token是前面的上下文窗口k 是上下文窗口大小是模型参数目标是最大化真实 token 的条件概率。直观来说GPT-1 在预训练时不断做这样的事情输入我 今天 去 预测学校 输入人工 智能 正在 预测改变 输入Transformer 是 一种 预测神经网络这就是生成式预训练。注意这里的“生成式”不是说模型一定要生成长篇文章而是说它采用的是从左到右预测下一个 token的训练目标。这个目标和 GPT 后来的所有模型是一脉相承的。四、GPT-1 的模型结构Transformer DecoderGPT-1 使用的是多层 Transformer Decoder。它不是完整的 Encoder-Decoder Transformer也不是 BERT 那种 Encoder-only Transformer而是使用带有 masked self-attention 的 Decoder-only 结构。一个简化流程如下token ID ↓ Token Embedding ↓ Position Embedding ↓ Transformer Decoder Block × 12 ↓ 输出隐藏状态 ↓ Softmax 预测下一个 token论文中模型使用 12 层 Transformer Decoder每层包含 masked multi-head self-attention 和 position-wise feed-forward network。模型维度为 768注意力头数为 12。GPT-1 的输入表示可以写成其中U是输入 token 序列是 token embedding 矩阵是 position embedding 矩阵是进入 Transformer Block 前的初始表示。然后经过多层 Transformer Block其中表示第层。最后通过语言模型头输出词表概率这里有一个细节输出层使用了 embedding 矩阵的转置这种做法也叫权重共享。它可以减少参数量并让输入 token embedding 和输出 token 预测空间保持一致。GPT-1 的结构虽然比今天的大模型小很多但核心思想已经非常清晰用 Decoder-only Transformer 做自回归语言建模。这正是后来 GPT-2、GPT-3、LLaMA、Qwen、DeepSeek 等模型的基础路线。五、为什么 GPT-1 使用生成式预训练GPT-1 的预训练目标是生成式语言建模而不是像 BERT 那样做 Masked Language Modeling。原因很直接GPT-1 出现时BERT 还没有发表。GPT-1 走的是从左到右的自回归语言模型路线。这种方式有几个优点。第一训练数据容易构造。只要有连续文本就可以构造语言模型训练样本不需要人工标注。例如原始文本机器学习是人工智能的重要分支。可以自动形成很多训练目标机器 → 学习 机器 学习 → 是 机器 学习 是 → 人工智能 机器 学习 是 人工智能 → 的第二训练目标和文本生成天然一致。模型训练时学习“给定前文预测后文”推理时也可以“给定 prompt 继续生成”。第三生成式预训练可以学习比较丰富的语言结构。如果模型要预测下一个 token它必须理解词法、语法、语义和上下文关系。虽然它没有显式标签但语言建模本身会迫使模型学习许多语言规律。例如要预测下面句子中的最后一个词这本书虽然很厚但是内容非常有模型需要理解前面整体语义才能预测价值 意思 启发所以 GPT-1 的基本假设是一个在大规模文本上训练好的语言模型会学到可以迁移到下游任务的通用语言表示。六、第二阶段有监督微调预训练完成后GPT-1 会在具体下游任务上进行 supervised fine-tuning。假设下游任务有一个有标签数据集其中x是输入文本y是标签。GPT-1 会把输入文本送入预训练好的 Transformer得到最后一层隐藏状态然后接一个线性分类层预测标签。论文中的分类概率可以写成其中是输入 token 序列是最后一层 Transformer 在最后一个 token 位置的隐藏状态是新增的线性分类层参数是预测标签概率。微调目标是最大化正确标签的概率这就是普通有监督分类目标。但是 GPT-1 还有一个关键设计微调时不仅使用任务监督目标还保留了语言模型辅助目标。最终目标为其中是下游任务监督损失是语言模型损失是辅助语言模型目标的权重。为什么要在微调时保留语言模型目标论文认为这样可以提升监督模型的泛化能力 加速模型收敛 减少模型在小数据集上的过拟合也就是说微调时模型不仅要学会当前任务还要继续保持语言建模能力。七、下游任务如何变成 GPT-1 能处理的输入GPT-1 最巧妙的地方之一是它没有为不同任务设计完全不同的模型结构而是通过task-specific input transformations把不同任务统一成 token 序列。因为 GPT-1 在预训练时看到的是连续文本序列所以在下游任务中也要尽量把结构化输入转换成连续 token 序列。论文使用了一些特殊 token例如Start Delim Extract它们的作用是标记输入开始、不同片段的分隔以及需要抽取表示的位置。下面分别看不同任务如何转换。1. 文本分类文本分类任务最简单。例如情感分类输入这部电影非常精彩。 标签positiveGPT-1 可以把输入构造成Start 这部电影非常精彩。 Extract然后把整个序列送入 Transformer取Extract位置对应的隐藏状态接线性层预测类别。过程是文本序列 ↓ Transformer ↓ Extract 位置隐藏状态 ↓ Linear Softmax ↓ 类别概率这里Extract的作用类似于“请从这里取出整个句子的表示”。BERT 后来使用[CLS]token 做类似事情但 GPT-1 这里使用的是Extracttoken。2. 自然语言推理自然语言推理任务通常输入两个句子Premise一个人在弹吉他。 Hypothesis一个人在演奏乐器。模型需要判断二者关系entailment neutral contradictionGPT-1 会把两个句子拼成一个序列Start Premise Delim Hypothesis Extract例如Start 一个人在弹吉他。 Delim 一个人在演奏乐器。 Extract然后取Extract位置的隐藏状态进行分类。这样GPT-1 就不需要单独设计“句子对匹配网络”而是把句子对变成一个连续序列。3. 语义相似度任务语义相似度任务输入两个句子判断它们是否相似。例如句子1小明正在踢足球。 句子2一个男孩在踢球。这类任务有一个特殊问题两个句子之间没有天然顺序。如果只输入Text1 Delim Text2模型可能对顺序敏感。所以 GPT-1 会构造两个顺序Start Text1 Delim Text2 Extract Start Text2 Delim Text1 Extract两个序列分别输入 Transformer得到两个表示然后把它们相加再接线性层分类。这样可以缓解句子顺序带来的影响。4. 多项选择问答多项选择问答任务通常包含文章或上下文 Context 问题 Question 多个候选答案 Answer1, Answer2, ..., AnswerNGPT-1 的做法是对每个候选答案都构造一个序列。例如Start Context Question Delim Answer1 Extract Start Context Question Delim Answer2 Extract Start Context Question Delim Answer3 Extract Start Context Question Delim Answer4 Extract每个序列都单独输入 Transformer得到一个分数。最后对所有候选答案的分数做 softmax选择概率最高的答案。可以理解为每个候选答案都和问题、上下文拼接起来 模型分别判断每个答案是否合理 最后在候选答案之间做选择这种方式虽然计算量更大但好处是结构统一。所有任务都变成了构造一个或多个 token 序列 送入同一个 Transformer 取指定位置隐藏状态 接线性层预测结果这就是 GPT-1 的任务统一思想。八、GPT-1 的训练数据和实验设置GPT-1 的无监督预训练使用 BooksCorpus 数据集。这个数据集包含 7000 多本未出版书籍覆盖冒险、幻想、浪漫等多种类型。为什么选择 BooksCorpus因为它有大量连续长文本。相比一些句子级语料书籍中有更长的上下文、更完整的叙事结构和更丰富的语言现象。这有助于语言模型学习长距离依赖。GPT-1 的主要设置包括模型12 层 Transformer Decoder 隐藏维度768 注意力头数12 上下文长度512 tokens 词表BPE约 40,000 merges 优化器Adam 预训练数据BooksCorpus微调阶段GPT-1 在多个下游数据集上测试包括自然语言推理SNLI、MultiNLI、RTE、SciTail 问答RACE、Story Cloze 语义相似度MRPC、QQP、STS-B 文本分类SST-2、CoLA论文结果显示GPT-1 在 12 个任务中的 9 个任务上超过了当时的最佳结果。尤其是在 Commonsense Reasoning、RACE 问答和 MultiNLI 等任务上有明显提升。这里需要注意GPT-1 不是今天意义上的“聊天大模型”它还不能像 ChatGPT 那样自然对话。它的重点是证明生成式语言模型预训练可以显著提升多种 NLP 理解任务的效果。九、GPT-1 的关键贡献和局限GPT-1 的贡献可以总结为三点。第一它验证了“生成式预训练 有监督微调”这条路线。在无标注文本上训练语言模型再迁移到下游任务这为后来的 GPT 系列奠定了基础。第二它证明了 Decoder-only Transformer 可以学习通用语言表示。在 GPT-1 之前很多 NLP 模型仍然依赖任务特定结构。GPT-1 尝试用一个统一的 Transformer 主体处理多种任务。第三它提出了 task-aware input transformations。也就是通过输入格式转换把分类、推理、问答、相似度等任务都变成 GPT 可以处理的连续 token 序列。当然GPT-1 也有局限。第一模型规模还比较小。12 层、768 hidden size、12 个 attention heads在今天看起来只是一个很小的 Transformer。第二它仍然依赖有监督微调。GPT-1 并没有真正展示 GPT-3 那种强大的 zero-shot 或 few-shot 能力。它仍然需要在具体任务数据上微调。第三它的上下文长度有限。GPT-1 使用 512 token 的上下文窗口远小于今天很多大模型的 32K、128K 甚至更长上下文。第四它还不是对话模型。GPT-1 没有经过指令微调、RLHF 或 DPO 等对齐训练因此不会像 ChatGPT 那样自然遵循用户指令。所以GPT-1 更像是 GPT 路线的原型它证明了方向是可行的 但还没有发展出现代大语言模型的完整能力。十、GPT-1 在大语言模型发展中的位置GPT-1 的历史意义非常重要。如果把 GPT 系列发展路线串起来可以这样理解GPT-1证明生成式预训练可以迁移到 NLP 理解任务 GPT-2扩大模型和数据展示更强的 zero-shot 生成能力 GPT-3进一步扩大到 175B 参数展示 few-shot 和 in-context learning InstructGPT通过 SFT RLHF 让模型更符合用户意图 ChatGPT把对齐后的语言模型产品化为通用对话接口GPT-1 的核心不是“模型有多大”而是它确立了一个范式用自回归语言模型在大规模无标注文本上预训练再通过少量任务适配迁移到下游任务。这个思想后来不断演化。到了 GPT-2研究重点开始转向更大规模数据和 zero-shot 任务泛化。到了 GPT-3模型展示出 in-context learning也就是不通过参数更新而是通过 prompt 中的任务描述和少量示例完成任务。到了 InstructGPT 和 ChatGPT模型进一步通过指令微调和人类反馈对齐变得更像一个真正可交互的智能助手。所以 GPT-1 是 GPT 路线的第一块地基。