Home / 大语言模型 / GPT:先学习文本生成,再用少量任务接口完成迁移

017|GPT:先学习文本生成,再用少量任务接口完成迁移

目录 · 上一篇 · 下一篇

论文:Alec Radford 等,Improving Language Understanding by Generative Pre-Training,2018。官方原文。以下讨论最初的生成式预训练与监督微调,不把后来的 GPT-3 上下文学习、聊天对齐或工具能力提前归给它。

先接住前作的问题

ELMo把语言模型内部特征接进已有任务结构,留下另一种迁移选择:能否直接用较统一的预训练骨干完成任务适配?本篇与它平行发展,组合Transformer的因果解码组件,通过任务标签更新主要骨干,不能因输入文本化就称为无需训练的提示学习。

五个前置概念

五个前置概念是因果语言模型、预训练初始化、任务读出、辅助目标和输入转换。它们分别解释数据怎样提供监督、知识怎样迁移、输出怎样定义以及为什么“同一个模型”仍有任务条件。

一、问题设定:有限任务标签怎样复用大量文本的预测经验

分类是一句话,蕴含是一对句子,选择题又有多个候选;若每项任务从头建立独立架构,有限标签难以支撑充分表示学习。本篇先利用大量无标签文本做下一token预测,再通过输入排列和最终读出的小幅适配,让主要Transformer骨干进入监督微调。

预训练使用因果掩码,当前位置只访问此前 token。句对任务通过分隔符和特殊标记连接输入,使末端表示可以汇总此前全部内容。它虽然没有双向地修改每个早期 token 的表示,但最后位置仍可看到完整拼接输入;因此不能简单说“单向模型完全不能理解句对”。

原文训练语料为 BooksCorpus,语料体裁和长连续文本影响学到的信息。预训练收益不是从架构名字自动产生的,还依赖文本、计算和优化。后续比较若使用更大语料,应明确额外资源。

二、从语言目标与任务目标推导共享骨干更新

预训练最大化:

LLM(θ)=∑tlog⁡Pθ(ut∣ut−k:t−1).L_{LM}(\theta)=\sum_t\log P_\theta(u_t\mid u_{t-k:t-1}).

utu_t 为文本 token,kk 为上下文范围。Transformer 通过位置、因果注意力和前馈层产生隐藏状态。监督微调把选定表示送入任务输出层,最大化标签概率;原文还研究加入辅助语言模型目标:

Lfine=Ltask+λLLM.L_{fine}=L_{task}+\lambda L_{LM}.

这两个式子写成最大化形式;若实现最小化损失,应取负号。辅助目标帮助保留语言建模信号,但其收益随任务数据规模变化,并非所有任务都应相同权重。

分类可以读取末端表示;蕴含把前提与假设按顺序拼接;相似度任务可考虑顺序处理;多项选择对各候选构造输入并比较分数。输入转换是方法的一部分,不能将其抹去后声称没有任何任务工程。

辅助语言模型损失怎样影响微调

用最小化记号写为 ℓ=ℓtask+λℓLM\ell=\ell_{task}+\lambda\ell_{LM},共享骨干更新为 −η(gtask+λgLM)-\eta(g_{task}+\lambda g_{LM}),其中 η\eta 是学习率,λ\lambda 是辅助目标权重,gtask,gLMg_{task},g_{LM} 是两项损失对共享参数的梯度;新分类头只从任务损失得到相应梯度。两项方向相近时可互相强化,方向相反时发生折中;所以保留语言建模不是绝对“防遗忘锁”,也不能把预训练目标与微调阶段完全切断。原文 §3.2 在有监督适配中保留辅助目标,新增任务头少不等于只训练任务头。

教学算例。 设某共享参数两项梯度为2与−1,λ=0.5\lambda=0.5,最终梯度1.5;若误把LM项当无梯度的日志,更新会变成2。另一个常见误判是输入串里出现问题和选项就称为ICL:原GPT的任务转换仍使用标签更新模型,文本化接口与无需更新的上下文学习是两个维度。

构造情感分类。预训练通过大量文本学会“虽然”“但是”等结构如何出现在句子中;微调再用正负标签,学习哪些组合支持哪一类。预训练不必显式见过情感标签,却可以提供更好的表示;微调仍需把表示与任务定义连接起来。

同一token何时属于输入,何时属于训练目标

把分类任务串成“文本+结束标记”,分类头读取末位置状态;辅助语言损失则对文本里的多个下一词位置求和。一个batch因此有两类误差入口,它们经共享Transformer相加。改变辅助损失权重不仅影响分类头,还会改变底层表示更新;应固定序列长度与归约方式再比较权重。

教法联系:Lilian Weng的Prompt Engineering。算例为本文自构。

三、明确输入转换、损失符号与微调范围

阶段一:
    从无标签文本取连续 token 片段
    用因果 Transformer 预测每个下一 token
    更新骨干与语言输出参数
阶段二:
    将任务输入转换为带分隔符的序列
    读取约定位置的表示并计算任务标签概率
    联合任务损失与可选语言模型辅助损失
    微调预训练参数及新增任务输出层
测试:按相同输入转换与任务评价协议预测

训练目标没有直接最大化“通用理解”;它优化文本预测与具体标签。迁移指标提高说明这些目标学到的结构有用,但不能仅凭总分证明模型采用了人类式推理。

四、保留RTE失利,再读层迁移和辅助目标消融

若预训练真提供有用起点,应在消融中体现;主表里的弱项也必须保留。

项目 原文范围
预训练 BooksCorpus 上的因果语言建模
下游 自然语言推断、阅读选择、语义相似与分类等 12 个数据集
对照 既有任务系统,另做无预训练、LSTM 和辅助目标消融
指标 准确率、F1、相关系数等;GLUE 汇总需按原协议阅读
架构 原始 GPT 的 Transformer 配置,不等于后续模型规模
数据与调参 任务监督仍然使用;开发集决定相关设置
不确定性 未给出每项结果统一多种子区间,不将最佳结果视为稳定性保证

证据一,方法部分与输入转换图。说明预训练骨干怎样接入不同任务。统一的是主计算结构,不是所有任务都完全使用同一个输入和读出。

证据二,表2、表3、表4。NLI 中 RTE 得到 56.0%,低于所列多任务 BiLSTM 的 61.7%;同时其他任务取得更强结果。保留这项失败证据,有助于避免将“12 项中多数提升”改写成“全面胜出”。

证据三,第 5 节、图2 与表5。转移层数、辅助目标和架构消融检验预训练机制。辅助语言目标对不同任务作用不同,说明迁移并不是一个无需选择的固定配方。 左图改变迁移的预训练层数,右图改变语言模型预训练更新次数;右图任务分数经过随机猜测与单模型参考成绩归一化,不能当作原始准确率。

预训练层迁移数量和预训练更新次数对下游表现的影响
原实验图摘引:Alec Radford 等,2018,图2,PDF第7页;核对原文。原版权保留。

表4 的 GLUE 汇总为 72.8,而所列此前比较项为 68.9。这个值属于当时的任务集合和评分方式,不能直接与后来不同版本、不同污染控制的榜单数字拼接成时间曲线。

再考虑小数据 RTE。参数很多、标签很少时,微调不稳定或不适配可能抵消预训练优势。论文中的非最优结果不是对预训练路线的否定,而是提醒任务规模和训练条件决定其效果。

五、迁移初始化不等于免标签的上下文学习

如果标签规则与普通语言习惯相反,例如人为规定包含某个词就是负类,模型也可能在微调中学到该规则。由此可见,迁移效果不是自动“理解真实语义”,而是利用已有表征拟合给定监督。

限制包括单向 token 表示、任务标签需求、输入长度、领域偏差和微调稳定性。它没有对齐到人类对话偏好,也没有外部知识检索。

六、把本篇机制再推进一步

1. 辅助语言梯度与任务梯度方向相反时,为什么不能简单说它在保护已有知识?

参考答案:共享参数收到的是加权和,它可能减弱任务更新,也可能阻碍适配;是否有益取决于数据和目标关系。正文的标量算例只说明更新确实改变,不能证明泛化更好。应结合不同辅助权重与任务规模的验证结果判断,而不是把辅助项当作绝对防遗忘约束。

七、区分特征接口、监督微调与后来的上下文学习

从任务微调转向只给提示,读GPT-2与GPT-3检查权重固定后的条件变化。规模扩大可增强某些行为,但不能从本篇辅助语言目标直接推出零样本指令可靠性。

自测与参考答案

1. 原始 GPT 的迁移是否等于给几个提示例子就不训练?

不是。主要实验通过监督微调更新参数。上下文示例只在输入中改变条件而不更新权重,是后续需要另行讨论的机制。

2. 因果模型为什么还能做句对分类?

把两句话依次拼接后,末端表示可以看到全部此前输入,用于分类。早期 token 不能看到右侧,不意味着末端无法汇总句对;但与深层双向 token 表示仍有差异。

3. 辅助语言模型目标为何不一定帮助所有任务?

它提供正则与额外梯度,也可能与小任务监督或分布不匹配。效果取决于数据量和权重,应由消融判断,不能只因预训练有效就认定微调时越多语言目标越好。