跳轉至

ChatGPT 背后的技术路线问题

ChatGPT

OpenAI 一路从 GPT 到 GPT3 再到 ChatGPT,其不停摸索的技术路线,早已不是 大规模预训练语言模型 可以简单概括,而是通往 AGI 所需的 NLP 到底是什么样的。

由于 GPTx 的使用限制,制约了我们对其应有的关注。这对于仍停留在 BERT 时代的我们,是值得警醒的。

进化之路

ChatGPT

GPT-1

背景

  • pretrain+finetune 的风潮(基于 LSTM 结构的 ULMFiT【Universal Language Model Fine-tuning for Text Classification】)
  • Transformer 相对 LSTM/CNN 的优异表现

核心路线

pretrain + finetune

模型&数据&训练

  • 模型基于 transformer 结构,layer-12 head-12 hidden-768 embedding=4H
  • 数据使用 BooksCorpus,规模 5GB
  • pretrain
  • 自左向右的生成式语言模型
  • finetune
  • 区别于 BERT,GPT-1 在预训练时没有 CLS 和 SEP,只有单句;对于具体下游任务,需增加 START/DELIM 和 EXTRACT,其 token embedding 在 finetune 时随机初始化
  • 基于 EXTRACT embedding 经 MLP 进行下游任务的 loss 计算
  • finetune 的 loss 不仅包含下游任务的 loss,还包含输入文本的 LM loss

ChatGPT

GPT-2

背景

  • 越来越多工作聚焦在仅 pretrain 不 finetune,来减轻标注数据收集的压力,即 few-shot、zero-shot
  • multi-task learning 和 meta-task learning 算是较有希望的方向
  • multi-task learning 和 meta-task learning 往往圈定一个 task 集合,在 LM 类 PTM 方面,会将建模 p(out|in) 转化为建模 p(out|in,task),来显式/加速捕捉 task 信息,如 MQAN【The Natural Language Decathlon: Multitask Learning as Question Answering】使用 task-specific pattern 来拼接 in,task 进行训练和预测
  • GPT-2 认为“任何有监督任务都是语言模型的一个子集,当模型的容量非常大且数据量足够丰富时,仅仅靠训练语言模型的学习便可以完成其他有监督学习的任务”,故坚持在自然文本上直接建模 p(out|in) ,虽然学习慢很多,但形式更通用

核心路线

基于 GPT-1,扩大模型规模,提升模型容量,实现无监督的隐式的 multi-task learning 效果

模型&数据&训练

  • 模型结构继承 GPT-1,在 transformer 的结构上有微调,size 最大的:layer-48 head-12 hidden-1600 embedding=4H
  • vocab size 从 GPT-1 的 40000 扩大到 50257
  • 数据采用了网页内容 WebText,规模 40GB

评价&思考

  • 从效果来看,在文本摘要任务上媲美有监督模型,在法译英任务上超越所有无监督但比有监督差,初步显现了潜力,但大多任务上 zero-shot learning 效果仍大幅落后于有监督

GPT-3

背景

  • 越来越多工作【Pretrained Transformers Improve Out-of-Distribution Robustness】表明,在 pretrain+finetune 范式中,当 model 拟合在 downstream-task trainset 后,往往丧失了对 downstream-task OOD 的泛化能力
  • 由于 trainset 不可能收集整个真实分布,随着时间变化预测数据的分布也可能变化,因此 model 需要具备 OOD 的能力,属于已有类别的能归类,不属于的能拒判
  • 通过构造 OOD 测试集,对比 IID 上的表现,有一些实验结论
  • 传统 NN 衰减很大,甚至只有 30%,而 PTM 衰减很小
  • 更大 size 的 PTM,并不一定表现更好(CV 上是越大越好,NLP 上不是)
  • PTM 使用的训练数据的规模越大、多样性越强,表现越好
  • 蒸馏后衰减会很大
  • 20-21 年开始,meta-learning 领域中 in-context learning 逐渐兴起

in-context learning

  • in-context learning 的核心思想是,在 meta-learning 中引入 multi-task learning 的模式,从而让模型基于少量训练样本来提取任务的语义信息,并以此来预测最终输出
  • 以 MetaICL【MetaICL: Learning to Learn In Context】为例,

ChatGPT

  • meta-training task 包含 142 个各类 task
  • inference 中的 unseen target task 至少是个 few-shot learning 场景,有一些该 task 的 (x_i, y_i),目标中的 C 并非 meta-training 中的 C,是该 task 的类别/标签 集合
  • in-context learning 只是一种输入输出形式,并非真正进行参数更新的 learning,在 meta learning 中可以理解为 inner-loop

ChatGPT

  • 一些工作【Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?】对 in-context learning 的有效性进行了实验分析
  • 模型并没有学习输入和标签之间的对应关系:训练时随机变更 x_i 的 y_i,没影响
  • 模型学到了输入和标签的分布:对 x_i 或 y_i 部分token用随机token替换,均有负面影响
  • 但增加前缀输入(样例),来激活大模型语言表达建模能力,也算是一种 learning

核心路线

  • 在 GPT-2 基础上,大幅扩大模型规模,提升模型容量
  • 预测时引入 in-context learning 思路,处理 few-shot、one-shot 问题(训练时没有)

模型&数据&训练

  • 模型结构继承 GPT-2,size 最大的:layer-96 head-96 hidden-12288 embedding=4H
  • 数据在 WebText 基础上,加入了 Book、Wikipedia 等数据,根据质量赋权使用,共计 45TB
  • 训练依然是 bigger model -> larger batch-size -> smaller learning-rate
  • 在验证 few-shot one-shot 效果时,GPT-3 并没有真的使用这些数据进行 finetune,而是相当于 zero-shot 直接预测验证效果

评价&思考

  • GPT-3 在一些 task 上甚至超过了有监督 SOTA,从效果看,确实验证了“更大的模型的通用泛化效果”

ChatGPT

ChatGPT

  • 但在文本生成上仍会在长篇幅上出现重复、矛盾、突兀的问题,缺乏物理常识,由于单向 LM 建模的问题在需要反复阅读上下文的 MRC 任务上也会差一些
  • PAPER 中列举了一些更宏观的 limitation,也对应现在 PTM 方向的 limitation,很有意思,可延伸阅读

InstructGPT

背景

  • GPT-3 所生成内容的 untruthful、unhelpful、toxic 问题,受到社会和学术关注
  • 最初用在 Atari games 的 RLHF(reinforcement learning from human feed-back),自 19 年开始,逐步应用到 NLP 的各项 task 上

核心路线

ChatGPT

模型&数据&训练

  • Demonstration dataset -> SFT model
  • prompt 的概念区别于 prompt learning,这里表示我们和 ChatGPT 交互时的键入,有各种任务形式,包括 Generation、QA、Chat、MRC、Summarization、Classification 等
  • prompt 库由 user 键入和 labeler 撰写构建,会做一些采样处理,保证丰富度
  • 给定 prompt,labeler 撰写 response,形成 input-output 的生成式数据,约 1.2W 规模,用于 GPT-3 supervised finetune
  • Comparison dataset -> RM
  • 给定一个 prompt,由模型生成 K 个 response,标注人员标注分档,形成 C_K^2 个 comparison pair,约 3.3W * C_K^2 规模,用于 reward model 的学习
  • 一组 C_K^2 样本,shuffle 到 epoch 中,有泄露倾向,训练时很快就会过拟合,应在一个 batch 内使用
  • loss 就简单用了个 -log(delta(score1 - score2))
  • labeler 在标注 ranking list 前,会对每个 response 标注一些 meta label,即整体分数(1-7)、是否回应了 task、是否色情、是否暴力等等,但在训练中貌似没有体现应用?
  • PPO model
  • 3.1W 规模,具体见后面章节

评价&思考

从结论来看,对现有大规模 PTM 通过 SFT+PPO 进行 alignment 到 user intention 的思路,比继续提升模型规模要高效的多:SFT 和 PPO 的训练消耗是 GPT-3 pretrain 的千分之一,在百分之一规模的 GPT-3 上就能达到 GPT-3 的效果(1.3B V.S. 1175B)

ChatGPT

RLHF

RL 在 NLP 中应用越来越多,而且取得了不错的效果,这里单独拎出来讨论下 【Deep Reinforcement Learning from Human Preferences】

背景

  • RL 的应用往往需要一个具体定义的 reward function,但许多真实任务的目标较复杂,难以清晰定义,即无法将 user intent 和 RL system 进行 align
  • 对于 expert user,可以提供 demonstration,使用 inverse RL 抽取出 reward function,如 imitation learning 等方法
  • 对于 non-expert user,只能定性的对 system behavior 提供 feedback,来表明 intent,系统从中学习 reward function,这里关注该方式
  • 关于 user feedback,显然 comparison 是更容易操作的,实验也证明这对于学习 user intent 已足够

核心路线

ChatGPT

policy * 一旦有了 reward function,就是一个传统 RL 问题了,可以使用任意 RL 算法 * 考虑到这里的 reward function 可能是 non-stationary 的,使用 policy gradient 类方法更合适,本文处理 Atari games 使用的 A2C

reward function * 训练数据 1、human feedback 形成 comparison dataset (a1, a2, label),label ∈ {1, 2, equal}(实际上本文 label 是个 {1,2} 上的分布) 2、标注数据,需要 online 持续进行,会用上一轮的 reward function 预测,筛选差异较大的 hard pair * 目标函数

ChatGPT

背景

references(部分)

  1. Universal Language Model Fine-tuning for Text Classification:https://arxiv.org/abs/1801.06146
  2. Language Models are Unsupervised Multitask Learners:https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
  3. Language Models are Few-Shot Learners:https://arxiv.org/abs/2005.14165
  4. MetaICL: Learning to Learn In Contex:https://arxiv.org/abs/2110.15943
  5. Training language models to follow instructions with human feedback:https://arxiv.org/abs/2203.02155
  6. Deep Reinforcement Learning from Human Preferences:https://arxiv.org/abs/1706.03741

(来源:天池大数据科研平台,侵删)