前言

2023年5月24日,微软Build 2023开发者大会上,OpenAI的创始人Andrej Karpthy做了一场主题为State of GPT(GPT的现状)的演讲,内容非常干,有兴趣的可以去观看B站上其他UP主上传的视频(视频传送门),40分钟的演讲内容分两部分,第一部分讲了ChatGPT的训练原理和训练过程,这应该是官方第一次公开其模型的训练细节,其中就包括我最感兴趣的“语言模型如何变成对话模型”。第二部分介绍了如何使用ChatGPT帮助我们解决生活工作中的问题,提到ChatGPT的一些特性(模仿、记忆力、思考链),了解这些特性后能更好的使用ChatGPT在生活工作中解决问题和提高效率。
附上PPT下载

如何训练一个ChatGPT助手

2023-08-09T17:33:31.png
简单说,训练一个ChatGPT助手有四个主要步骤:预训练,监督微调,奖励模型,强化学习。每个训练步骤都有对应的数据集、训练目标及训练时长,接下来会逐一详细介绍。

预训练(Pretraining)

2023-08-09T17:55:01.png
这部分是最耗费时间和算力的部分,占用总训练时间的99%(1000块GPU训练超过1个月),其他步骤更多是微调。
2023-08-09T17:53:35.png
这个数据集占比表格摘自Meta发布的论文(其实大家更感兴趣OpenAI的数据从哪里来的),CommonCrawl和C4都是网络爬虫爬到的公开授权数据,这两个数据集已经超过80%的数据占比,其他还有来自GitHub、维基百科、书籍、ArXiv论文存档、StackExchange问答网站的高质量数据集。
2023-08-09T18:09:16.png
然后讲数据集的数据Token化,目前有很多算法支持把数据Token化。
2023-08-09T18:14:48.png
然后将将Token化后的数据放入数据批次中,并将它们打包成行,然后在其中插入特殊的文本标记符号,为了告诉Transformer新文档的开始位置。
2023-08-09T18:15:17.png
2023-08-09T18:17:08.png
然后就把数据输入到 Transformer 中,让 Transformer 进行一轮又一轮的尝试预测,从中抽样判断预测结果,然后不断将其反馈到过程中,持续降低损失函数,让预测更正确。于是我们就获得了一个可以部署的基础模型。

2023-08-09T18:18:31.png
但是,基础模型不是助手(assistant,即类似ChatGPT的问答助手),它们不想回答你的问题,它们只是想完成持续的句子。
2023-08-09T18:18:56.png
这时你可以欺骗基础模型成为助手,方法是创建一个特定的小提示,让它看起来像是人和助手之间正在交换信息,但模型把文件完成后,再去查询文件,基础模型将自我调整为有用的助手和某种答案(生成这种形式的文档)。

监督微调 (Supervised Finetuning)

2023-08-12T16:18:01.png
在监督微调阶段,我们使用外部承包商收集的少量但高质量的数据集去训练模型,最后得到一个SFT(Supervised Finetuning 监督微调)模型。

奖励模型(Reward Modeling)

接下来就是RLHF,即“从人类反馈中强化学习”,它包括奖励建模和强化学习。
2023-08-12T16:18:42.png
在奖励建模步骤中,我们做的是采用已经训练过的 SFT 模型,并创建多个自动补全,然后要求外包商对这些补全进行打分和排名,以选出最优答案。
2023-08-12T16:19:01.png
2023-08-12T16:19:19.png
2023-08-12T16:19:34.png
接着将提示按行排列,这里所有三行的提示都是相同的,但补全方式不同,黄色标记来自 SFT 模型,我们在最后附加另一个特殊的奖励读出标记,只用在这个单一的绿色标记上监督Transformer。Transformer会根据提示的完成程度预测一些奖励。
Transformer会对每个补全的质量进行了猜测,然后,我们就有了模型对它们排名,实际上可以强制其中一些数字比其他数字更高,然后用这个产生的损失函数去训练我们的模型,最终得到奖励模型。

强化学习(Reinforcement Learning)

我们有了奖励模型,但还不能部署它。因为它本身作为助手不是很有用,但是它对于接下来的训练强化学习阶段非常有用。
2023-08-12T16:19:52.png
2023-08-12T16:20:15.png
我们在强化学习期间所做工作基本上就是获得大量提示,然后针对奖励模型进行强化学习。
例如,在第一行中,奖励模型表示这是一个相当高的完成度,因此我们碰巧在第一行采样的所有标记都将得到强化,它们将获得更高的未来概率。相反,在第二行,奖励模型不喜欢这个完成,负 1.2,因此我们在第二行采样的每个标记在未来都会有更低的概率。
我们在很多提示、很多批次上一遍又一遍地这样做,这样就能得到一个在这里创建黄色标记的策略,让所有完成标记都会根据我们在前一阶段训练的奖励模型获得高分。
这就是我们训练的方式—— RLHF 流程。
为什么要做 RLHF呢?答案很简单,就是因为它的效果更好。
2023-08-12T16:20:43.png
以上这个图来自instructGPT论文。
这些 PPO 模型是 RLHF,实验结果显示,与 SFT 模型相比,人类更喜欢来自 RLHF 模型的标记(输出文字)。
为什么效果更好?还没有确认让人信服的答案,有可能与计算比较容易程度与生成容易程度之间的不对称有关。
打个比方,你让数据承包商写一首诗,他可能并不擅长,但是通过简单训练,给他几首诗,他是能判断出哪首更好的。
2023-08-12T16:42:28.png
伯克利有一个团队对助手模型进行排名,目前最好的模型毫无疑问是 GPT-4,其次是 Claude,GPT-3.5,这里排名前三的都是 RLHF 模型,然后表中其他模型都是 SFT 模型。

如何应用ChatGPT

以上是OpenAI训练这些模型的方式。
现在让我们看看如何最好地将 GPT 助手模型应用于您的问题。

对比人类和大语言模型输出同一段文本

假设你正在写一篇文章:您想比较加州和阿拉斯加这两个州的人口。

2023-08-12T16:46:23.png
这可能是你大脑中的样子:

  • 在我的文章中,让我比较这两个人群。
  • 首先,我显然需要得到这两个人群。
  • 我知道我可能根本不了解这些人群。
  • 我去了——我做了一些工具的使用,然后我去了维基百科,我查找了加利福尼亚的人口和阿拉斯加的人口。
  • 现在我知道我应该把两者分开。
  • 同样,我知道用 39.2 除以 0.74 不太可能成功。
  • 那不是我脑子里能做的事情。
  • 因此,我将依靠计算器。
  • 我打算用一个计算器,把它打进去,看看输出大约是 53。
  • 然后也许我会在我的大脑中做一些反思和理智检查。
  • 那么53有意义吗?
  • 好吧,这是相当大的一部分,但是加利福尼亚是人口最多的州,也许这看起来还可以。
  • 这样我就有了我可能需要的所有信息,现在我开始写作的创造性部分了。
  • 我可能会开始写类似,加利福尼亚有 53 倍之类的东西,然后我对自己说,这实际上是非常尴尬的措辞,让我删除它,然后再试一次。
  • 在我写作的时候,我有一个独立的过程,几乎是在检查我正在写的东西,并判断它是否好看。
  • 然后也许我删除了,也许我重新构造了它,然后也许我对结果感到满意。
    事实就是,当你创造这样的句子时,你的内心独白会发生很多事情。

2023-08-12T16:46:44.png
但是,当我们在其上训练 GPT 时,这只是一个标记序列。当 GPT 读取或生成这些标记时,它只会进行分块、分块、分块,每个块对每个标记的计算工作量大致相同。GPT 将查看每个标记并花费相同的算力去计算它们中的每一个,它不会对每个标记做太多的工作。在很大程度上,提示只是弥补了这两种架构之间的这种认知差异。就像我们人类大脑和 LLM 大脑(的比较),特别是如果您的任务需要推理,您不能指望Transformer对每个标记进行太多推理,因此您必须真正将推理分散到越来越多的标记上。

模型需要思考(let's think step by step)

它们有某种能力能够回顾、检查或尝试。。基本上围绕它进行抽样,这也是一种技术。

2023-08-12T16:46:58.png
2023-08-12T16:47:10.png
例如,您不能向Transformer提出一个非常复杂的问题并期望它在一个标记中得到答案。(用于计算的)时间不够。另外您可以用一个few-shot prompt提示,向Transformer显示它在回答问题时应该展示的结果,给出几个示例,Transformer将模仿该模板,然后它就会在结果方面做得更好。另外,也可以通过说“let's think step by step"从Transformer中引发这种行为。

模型知道自己搞错了

2023-08-12T16:47:25.png
它们有某种能力能够回顾、检查或尝试。原理就是围绕它进行抽样检查。事实证明,LLM知道什么时候搞砸了。例如,要求模型生成一首不押韵的诗,它可能会给你押韵的诗,问它,“你完成任务了吗?”
实际上,GPT-4 很清楚自己没有完成任务。它只是在采样方面有点不走运。它会告诉你,“不,我没有完成任务。让我再尝试一次。”
但是如果你不提示它,他就不会去检查自己的错误,所以必须提示中要求它去检查。如果你不要求它检查,它不会自己检查。

依赖工具和胶水代码

2023-08-12T16:47:58.png
很多人在做的一些prompt工程,实际上就是希望让LLM恢复一些我们大脑中具有的能力。
我想在这里指出的一件事是,这不仅仅是一个提示,人们开始真正探索更通用的技术,不仅仅是简单的问答提示,而是看起来更像是将许多提示串在一起的 Python 胶水代码。
另外,我觉得有点意思的是 ,LLM 有种不想成功的心理怪癖。
它们只是想模仿。如果你想成功,你应该要求它。在测试的时候,你必须要求一个好的表现。
上面论文中的这个例子,他们尝试了各种提示,“let's think step by step”非常强大,因为它把推理分散到许多标记上

微调(Finetuning)

2023-08-12T16:48:43.png
微调模型意味着你实际上要改变模型的权重。现在在实践中做到这一点变得越来越容易,这是因为最近开发了许多技术并拥有库调用。但是,微调设计到很多技术细节,它需要更多的技术能力才能做对。它需要数据集和/或可能非常复杂的合成数据流程的人工数据承包商。这肯定会大大减慢你的迭代周期。

诚恳的建议

2023-08-12T16:48:56.png

  • 目前最好的性能来自 GPT-4 模型。它是迄今为止功能最强大的模型。
  • 让提示里包含详细的任务内容、相关信息和说明。
  • 要记住任务承包商是人,他们有内心独白,他们非常聪明;而LLM不具备这些品质。因此,请务必仔细考虑LLM的心理,并迎合这一点。向这些提示添加相关的上下文和信息。
  • 参考其他示工程技术。我在上面的幻灯片中突出显示了其中一些,但这是一个非常大的空间,
  • 尝试使用少样本few-shots示例提示。这指的是你不只是想问,你还想尽可能地展示(你想要的),给它举例子,如果可以的话,帮助它真正理解你的意思。
  • 尝试使用工具和插件来分担 LLM 本身难以完成的任务。
  • 不仅要考虑单个提示和答案,还要考虑潜在的链条和反射,以及如何将它们粘合在一起,以及如何制作多个样本等。
  • 最后,如果你认为你已经最大化了提示工程的效果,我认为你应该再尝试挖掘一下,而不是马上去微调模型,因为去微调模型,会更慢并且还涉及其他技术问题。
  • 最后是 RLHF,如果你能让它工作的话。它目前确实比 SFT 好一点,但是,要把它调好非常复杂。
  • 为了优化您的成本,请尝试探索容量较低的模型或更短的提示等。

最后我想说,GPT-4 是一个了不起的AI创新,他一定能让这个世界变得更美好。

标签: none

添加新评论