前言
来源:微软开发者大会
演讲者:Andrej Karpathy,OpenAI 人工智能研究员兼 OpenAI 创始成员。
主题:了解 ChatGPT 等 GPT 助手的训练流程,包括标记化、预训练、监督微调和从人类的反馈中进行强化学习 (RLHF)。深入了解、使用这些模型的实用技术,包括Prompt 策略、微调、快速增长的工具生态系统及其未来扩展。
视频地址:https://build.microsoft.com/en-US/sessions/db3f4859-cd30-4445-a0cd-553c3304f8e2
翻译校对:Fur1na
如何训练 GPT
GPT 训练流程如图所示,简单来说分为四个部分,分别是:预训练、有监督学习、奖励建模、强化学习。每一个阶段都会使用不同的数据集进行针对性的训练,并且产生对应的模型。
预训练
这个阶段占整个 GPT 训练时间的99%,是所有工作的基础,我们使用超级计算机和数千个专业级 GPU 进行长达数月的训练,最终得到预训练的基础模型(Base model)。其他三个部分均是微调阶段,只使用少量的 GPU 和数小时或数天的训练。
数据收集
预训练的基础是大量的数据,这是一个混合数据的示例,该示例来自 Meta 发布的这篇论文,他们发布了这个 Llama 基础模型。
通过网络爬虫获取了大量的数据,除此之外还有一些高质量的数据集,例如,GitHub、维基百科、书籍、ArXiv 论文存档(论文预印本的网站,众多论文在审稿期间会将论文发布在 ArXiv 上)、StackExchange。之后根据比例采样,形成 GPT 的训练集。
数据预处理
在训练开始之前,需要对数据做一些处理,将人类的语言处理成机器易于理解的语言,这里使用 Tokenization 的方法将文本无损处理成标记编码,但并不只有这一种算法可以做到。
这里举了两个例子,来展示模型训练的超参数。包含了 Vocabulary size(词汇量)、Context length(上下文长度)、Parameters(参数)、Token数。
GPT-3 有1750亿参数,而 LLaMA 只有650亿参数,但 LLaMA 模型却更为强大!这是由于 LLaMA 有更多的 Token 数,和更合理的比例。
注:这里主要强调 Parameters 和 Token 的比例,GPT3 是2020年训练的,当时 OpenAI 的一篇论文认为,参数量和数据(Token)的最佳比例是1:1.7。2022年,另一篇论文指出最佳比例应该是1:20,也是现在主流认可的观点,LLaMA 是2023年训练出来的,是根据后面这个比例做的,所以虽然参数和训练集Token 更少,效果反而更好。
因此不能只通过参数量去判断模型的能力。
预训练过程
预训练过程中,B 代表 batch size,T 代表最大上下文长度。我们所做的就是获取文本,并用特殊的标记告诉 Transformer 新的文档从哪开始。
GPT 模型的全称为 Generative Pre-Trained Transformer。Transformer 是 GPT 使用的基础模型,是一种基于自注意力机制的深度学习模型,由 Google 在2017年的《Attention Is All You Need》中首次提出。
论文地址:https://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf
让我们只关注一个特定的单元格,但同样的事情会发生在每一个单元格上。
绿色单元格代表正在处理的文本,我们将整个上下文放入 Transformer 神经网络中,神经网络会通过上文的序列(黄色单元格),预测下文序列(红色单元格)。在这个例子中513
是下一个序列,因此我们可以将其用作监督源来更新 Transformer 的模型权重,这样就可以试图让 Transformer 对下文的序列做出正确的预测。
这是一个 Mini GPT 训练的过程,一开始由于模型权重是随机的,所以输出也是随机的。但随着训练时间的变长,你会从模型中获得更连贯的样本,最后就可以看见模型已经学会了单词、空格和标点符号的用法…
这是随着时间,损失函数(Loss)的变化,低的损失代表模型预测的结果就越准确。
这个基础模型将会学习到强大的通用表达方式,以至于在微调后可以适用于任何下游任务。
在通用型人工智能发展前,如果需要做一个情感分类任务,需要收集非常多的正面情感数据和负面情感数据,然后训练这个专有的 NLP 模型,这个模型也只能用于情感分类任务。
但现在通过大型的预训练任务,只需要简单的几个例子就可以微调,让模型去适用于情感分类任务。这是因为在预训练过程中,Transformer 在语言建模中同时处理了大量的语言任务,以至于它了解了文本的语言结构和其中不同的概念。
基础模型可以通过被提示,去完成一些任务,例如下面就展示了一个提示工程,模型按照提示回答一些问题。
这开启了一个新的时代,就是 Prompt > Finetuning。即使没有经过微调,模型也可以在提示词的引导下,有效的完成一些下游任务。
大语言模型进化树追溯了 LLM 的发展历程,重点统计了相对知名的模型,同一分支上的模型关系更近。不基于 Transformer 的模型用灰色表示,decoder-only 模型是蓝色分支,encoder-only 模型是粉色分支,encoder-decoder 模型是绿色分支。模型在时间轴的竖直位置表示其发布时间。实心方块表示开源模型,空心方块则是闭源模型。
右下角的堆积条形图是指各家公司和机构的模型数量,放大图如下。
但是需要澄清的是,基础模型并不是一个 AI 助手,它们实际上不想回答你的问题。
因此它们会用更多的问题来回答问题。不过,也可以通过提示词的方式,诱导模型回答。
也可以欺骗基础模型,通过提示词告诉它是一个助手,这仅仅是可以完成的,但并不可靠,效果也欠佳。
有监督学习
这一部分将收集少量但是高质量的数据集。算法并没有进行改变,只是更换了高质量的数据集。
通过语言建模,在这个过程结束后会得到一个 SFT model(生成模型 GPT 的有监督精调 Supervised Fine-tuning),已经是一个可以部署的模型。
Prompt:”你能否就经济学中 “垄断 “一词的相关性写一篇简短的介绍?请举例说明劳动力市场中的潜在垄断,并引用相关研究”。
模型在回答的时候会遵循大量的标签文档。
奖励建模
奖励建模过程中,我们会将数据集的收集
这是数据集样本,使用相同的 Prompt 要求编写一个程序检查一个字符串是否为一个回文。并根据这些回答人工进行排名,这个过程也会耗费大量的时间。
蓝色的是相同的 Prompt,但完成方式不同,黄色的标记来自于 SFT 模型。
我们需要做的就是在最后添加一个奖励标记,并在绿色的部分监督 Transformer,它会根据提示的完成程度预测一些奖励,因此它可以对模型完成的质量进行评估,并告诉我们排名。
但需要注意的是,通过奖励建模后我们就不能部署它了,因为这个过程并不适合让它成为一个 AI 助手,而是为了更好的进入下一个阶段。
强化学习
因为有了奖励建模,所以就可以对回答的质量进行评分,依据评分进行强化学习。
首先接收蓝色的 Prompt,将其排列成行,之后使用想要训练的模型并在 SFT 模型中初始化,构建黄色的补全,根据奖励建模我们就可以知道每一次回答的质量。
例如在第一行中,奖励模型认为这是一个非常不错的完成度,因此第一行的所有标记都将得到强化,未来会有更高的概率。
第二行的评分最低,因此未来得到这些标记的概率会降低。
最终将会得到一个可用的模型例如 ChatGPT,强化学习的过程其实就是潜在的利用人的判断力去创建一个适合人理解的答案。并且在众多大模型的评分排行中,前三名均是强化学习的产物。
GPT助手模型的应用
如果你想在文章的最后一句写一句话,”加州的人口是阿拉斯加的53倍”,以下展示了你可能的内心独白以及大脑中的计算。
因为并不了解这些人群,所以首先会去维基百科找了加州和阿拉斯加的人口数。
然后使用计算器,得出大概的差距是53倍。
在脑海中进行反思和检查。
写作创造性部分,会不断对自己的语言进行重构和检查并判断这个语句是否美观。
最终得到一个自己满意的语句。
在 GPT 眼中,句子无非是一些序列,GPT 拥有大量的知识涵盖各个领域。GPT 将查看每一个 Token 并花费同样的时间计算。模型会尽可能的去模仿 Token,并不会进行反复的纠错,它们拥有大而完美的工作记忆,这得益于 Transformer 的自注意力机制。
而 Prompt 只是弥补了人大脑和 GPT 思维之间的认知差异。
如果一个任务需要很多的推理,并不能指望 Transformer 对 Token 进行太多的推理,必须将推理分散到更多的 Token 中。例如,不要希望 Transformer 在一个 Token 中分析复杂的推理任务。
如果有一个 few-shot 的 Prompt,如果在提问时给出示例,Transformer 会回答的更好。
在写作的时候,如果没有成功,我们可以再试一次,尝试多次并选择一个最好的。因此在这个过程中,不仅会抽样一次,还会抽样多次然后进行表决。
在这个过程中,Transformer 也会在预测下一个 Token 的时候采样到一个不太好的结果,在推理方面就会和走进死胡同一样走下坡路。它们即使知道这个 Token 的预测结果不太好,也会继续预测下去。
GPT 模型是知道自己是否完成任务的。
例如你希望 GPT 生成一首不押韵的诗,它却生成了一首押韵的。事实证明,对于更大的模型例如 GPT-4,你可以问它,“你完成任务了吗?”实际上,GPT-4 是知道自己没有完成的,只是在采样方面不走运,它会告诉你,“没有完成任务,让我再尝试一次。”但如果你不问它,它也不会告诉你,这可以通过你的 Prompt 进行弥补。
你必须推动它去检查,因为它不会自己检查。它本质只是一个 Token 模拟器。
我们需要了解系统一和系统二、这只是一个比喻,系统一可以理解为一个流程化的模式,系统二则更倾向于精细化的思考。这是近期发表的论文,表示系统二这个领域正在被研究,称为“思想树”。
在 AlphaGO 中下围棋的决策也是模仿人的,但是它也会在策略中使用蒙特卡洛搜索,保留那些合理的决策。
就跟思想树一样,我认为人们开始真正探索通用技术,不仅仅是简单的问答和提示,而是将许多提示词串起来的胶水代码。(胶水代码是一个连接和整合各个部分以构建完整应用程序的重要组成部分。)
右边是一个论文的例子,叫做《ReAct》将提示的答案构造为一系列的思考、行动、观察、思考、行动、观察。
左边是 AutoGPT 它允许 LLM 保留任务列表并继续递归,但它的效果不是很好,但随着时间的推移,可能是个不错的灵感。
LLM 的心理怪癖是 LLM 不想成功,只想模仿。
当 Transformer 在训练的时候,训练集是有一个完整的性能质量范围,例如有一个物理问题,可能给出答案的有一个答案完全错误的学生,和一个非常正确的专家。Transformer 无法分辨出正确与否,但是它想模仿所有的可能,因为模型只是经过了语言建模的训练。
在下面的例子中,Prompt 里有一句 “let’s think step by step”。这句非常强大,可以将推理分散到很多 Token 中。但还有一句更好的提示“让我们一步一步解决这个问题,确定我们有正确的答案”。这可以让 Transformer 不必在低质量解决方案上对冲概率。
因此可以使用一些限定词,例如你是某方面专家等等。
在使用的时候也可以告诉模型,如果遇到计算的时候可以使用哪些工具。因为模型并不知道自己有什么,你必须告诉它。
在只有检索能力的搜索引擎和 GPT 记忆之间,就像钟摆的两端。
检索增强就例如 ChatGPT + 浏览器的方式会让模型工作的更好,因为所有的记忆都处于工作内存中,你可以随时调用。
限制 Prompt。让 LLM 的输出使用特定的模板,在这里强制 LLM 输出 JSON 的格式,这将保证输出的格式,因为它将扰乱模型中所有不同 Token 的概率。
微调模型意味着将改变模型的权重,实践中这非常容易,也可以降低训练成本。
一些默认建议
目前最好的性能来自于 GPT-4 模型,提示非常详细,有很多任务内容,相关信息和说明;尝试使用工具和插件分担 LLM 本身难以完成的任务;不仅仅给出提示和答案,还有考虑潜在的链和反应,以及如何将提示串起来等等;强化学习非常复杂,且很容易产生较大的变化,不建议初学者在这方面入手。
模型可能有偏见、可能有信息幻觉、有推理错误也有知识截止。并且有大量的人员尝试对 LLM 进行攻击,因此建议在低风险的程序中使用 LLM,并将它作为辅助而不是主力。
GPT-4 是一个非常伟大的模型,有大量的领域知识、可以写代码做数学题
并且我们将构建一个庞大的生态系统。
我向 GPT-4 询问,“你能说什么来激励2023微软开发者大会的观众“
它说”女士们,先生们,2023微软的创新者和开拓者,欢迎来到与众不同聪明才智的聚会,你们是未来的建筑师,是塑造人类蓬勃发展的数字领域的远见者。拥抱技术的无限可能性,让您的想法像想象一样飞翔,让我们为子孙后代创造一个联系更紧密、更卓越、更具包容性的世界。准备好释放您的创造力,探索未知,将梦想变为现实,你的旅途从今天将启航。“