首页最近被chatGPT刷屏,但翔二博主左看右看发现很多想法似乎都是一脉相通的,于是连夜从存档中找了一些文章尝试理一理它的理论路线。
同时想到今年在智源人工智能前沿报告(2021-2022年度)中其实就有说道:
“未来三年,基于虚拟世界、实时时空环境训练的具身模型会取得较大的发展,如自动驾驶、机器人、游戏中数字人等······未来五到十年,超大规模预训练模型(信息模型)和具身模型将会结合,成为‘数字超人’,在知识能力以及跟环境的互动程度上,将比以往的人类都要强······具身模型和机器人也将结合,在物理世界出现能力比人类还要强的无人系统,即‘具身超人’。乐观估计,在未来三十年,数字超人和具身超人可能会结合,最终诞生超级人工智能。”
测了测chatGPT的性能后,好像这一切来的稍快了一点?
博主个人理解,它以更为embodied AI形式的指令作为输入,以训练/微调大规模的信息模型,并基于强化学习与真实世界做持续交互,已经很接近此处所提到的“数字超人”了。
关于chatGPT的基础介绍和使用本文不做过多介绍,可以参考各种报道文和知乎等等,此处推荐几份解读。
本篇博文先简要整理一下跟chatGPT相关Instruction Tuning的几篇论文。
Finetuned Language Models Are Zero-Shot Learners
首先是ICLR22的FLAN模型,这篇文章明确提出 Instruction Tuning(指令微调)的技术,它的本质目的是想将 NLP 任务转换为自然语言指令,再将其投入模型进行训练,通过给模型提供指令和选项的方式,使其能够提升Zero-Shot任务的性能表现。
Motivation在于大规模的语言模型如GPT-3可以非常好地学习few-shot,但它在zero-shot上却不那么成功。例如, GPT-3在阅读理解、问题回答和自然语言推理等任务上的表现很一般,作者认为一个潜在的原因是,如果没有少量示例的zero-shot条件下,模型很难在与训练前数据格式(主要是prompts)维持一致。
既然如此,那么为什么不直接用自然语言指令做输入呢?如下图所示,不管是commonsense reasoning任务还是machine translation任务,都可以变为instruct的形式,然后利用大模型进行学习。在这种方式下,而当一个unseen task进入时,通过理解其自然语言语义可以轻松实现zero-shot的扩展,如natural language inference任务。
Instruction-tuning、Fine-tuning、Prompt-Tuning的区别在哪?
具体来说,作者提出的Finetuned LAnguage Net(FLAN)模型将62个NLP task分为12 cluster,同一个cluster内是相同的任务类型,如下图所示。
对于每个task,将为其手动构建10个独特template,作为以自然语言描述该任务的instructions。为了增加多样性,对于每个数据集,还包括最多三个“turned the task around”的模板(例如,对于情感分类,要求其生成电影评论的模板)。所有数据集的混合将用于后续预训练语言模型做instruction tuning,其中每个数据集的template都是随机选取的。如下图所示,Premise、Hypothesis、Options会被填充到不同的template中作为训练数据。
然后基于LaMDA-PT模型进行微调。LaMDA-PT是一个包含137B参数的自回归语言模型,这个模型在web文档(包括代码)、对话数据和维基百科上进行了预训练,同时有大约10%的数据是非英语数据。然后FLAN混合了所有构造的数据集在128核的TPUv3上微调60个小时。
在介绍instructGPT和chatGPT前,还有两份比较重要的前置工作,即Reinforcement Learning from Human Feedback (RLHF),如何从用户的明确需要中学习。
Fine-Tuning Language Models from Human Preferences
这份工作是将大模型往人类偏好进行结合的一次尝试,其使用强化学习PPO而不是监督学习来微调语言模型GPT-2。
为了弄清人类偏好,首先需要从预训练好的GPT-2 开始,并通过询问人工标注者四个生成样本中哪个样本最好来收集数据集。基于收集的数据集,尝试基于强化学习微调GPT,简要模型结构如下图,其需要训练两个模块一个是GPT模型(policy),一个是奖励模型(reward model),其中奖励模型用于模拟人类对四个样本的打分以代表其选择偏好。
paper:https://arxiv.org/abs/1909.08593
code:https://github.com/openai/lm-human-preferences
这篇论文的主要启发在于,人类偏好的约束、使用PPO的训练方法可以使模型在online的过程中持续学习。
Learning to Summarize with Human Feedback
随后的这份工作会更为贴近instructGPT和chatGPT,其提出主要按照人类偏好的summarization场景中。其模型框架架构如下图所示,和instructGPT类似,主要分为三步:先收集人类在成对摘要上偏好的数据集,然后通过监督学习训练一个奖励模型(RM)来预测人类偏好的摘要。最后,利用奖励模型RM给出的分数去微调生成摘要的大模型,以上模型都基于GPT-3进行微调。
这份工作虽然局限于摘要,但在训练框架是为后续的instructGPT打下了基础,即人工标注+强化学习。
instructGPT
instructGPT从模型结构上与上一篇文章几乎一摸一样,但它通向了更为宽广的领域。通过收集带有更多人类instruct的自然语言文本句子,使其可以完成各种nlp任务,正式进化为一个全能模型。
更多细节可以见开头的讲解视频。
chatGPT
目前只知道chatGPT基于instructGPT进行训练,但具体细节没有更多的披露,但是从以上几份工作中,可以窥见一些技术路线。
如chatGPT可以轻轻松松根据人类的语言完成从对话、写诗、编故事、写代码等等等等等各种任务,大概率就是基于FLAN模型这种迁移任务的方式,从而能够满足各位用户老爷们的奇怪需要。而instructGPT则应该是chatGPT用于训练的主要架构,包括数据集构建、模型框架和训练目标等等。