本文为下篇,上期内容请点击这里

英文原文:https://www.wsj.com/articles/chatgpt-creator-openai-is-in-talks-for-tender-offer-that-would-value-it-at-29-billion-11672949279 

【上期内容回顾】

01、使用GPT-3解决现实世界的问题

02、GPT-3应用于翻译任务

03、文案及其他GPT-3商业应用

  START  

04
使用OpenAI API微调GPT-3

Lukas:GPT-3的优点之一似乎是它可以开箱即用。但我也可以想象,对于一些团队来说,如果出现问题,他们可能会担心该怎么办。我想我很好奇,你通常与公司内部的ML团队合作,还是更多的工程师认为这里的好处是,他们不必弄清楚机器学习是如何工作的,以获得自然语言处理的好处,或者你是否倾向于将其与ML团队集成到一种更大的ML工作流中?

Peter:我得说,这是一种混合,我们有多个机器学习团队。他们已经有了自己的模型,他们会在网上下载模型等等,他们会根据任务对模型进行调整,然后他们找到了我们的API并开始使用我们的API做同样的事情,结果证明你可以从我们的模型中获得更好的性能。就像我们所拥有的最大的模型或最好的模型都没有开源版本,对于很多任务来说,这是最有效的方法。

但我认为,我们的大多数客户可能更倾向于另一个阵营,即“真正聪明的开发者”。当我说“开发人员”时,这是一个相当广泛的群体,从程序员到工程师,从设计师到项目经理。许多人告诉我们OpenAI API是他们进入编程的原因,因为他们从我们的游乐场得到了非常好的结果,在那里你可以与我们的模型交互。他们有了想法,就开始学习如何编码,并接触到像Bubble IO之类的无代码工具。这真的降低了障碍,你不必成为一名机器学习专家,也能从这些模型中得到非常好的结果。你只需要善于迭代并弄清楚如何向模型编写指令。

这有点像每个人都能成为管理者,如果你想让你的员工按照你的想法去完成任务,你就必须给他们很好的指导,这和这些模型非常相似。比如,如果你不明确你的任务,你就会在输出中得到非常高的差异,但是,如果你真的很擅长具体说明,甚至提供几个例子,那么你就会得到非常好的结果。这不是一种机器学习技能,这几乎更像是一种任务规范,管理技能,我觉得很多人都能很快学会。

我真的很兴奋,看到这么多人都能接触到这些模型,以前好像只有机器学习博士学位才能使用。

Lukas:我觉得我听人说过一个叫做“提示工程师 (Prompt Engineer)”的新角色可能与此有关,清楚如何提示GPT-3让它做你想让它做的事情。

Peter:这个很有趣,因为早期,当我们有第一个版本的API时,我们有一个非常聪明的人,他是一位世界知名的作者,也是一个程序员:安德鲁·梅恩(Andrew Mayne)。他是该API的早期用户之一,他的内部名称是“提示耳语者 (Prompt Whisperer)”,或“GPT-3耳语者”,他真的知道如何精心设计提示以获得最好的结果。

因为它是在互联网上训练的,你需要把你的思想放在这样的想法中,“互联网上的文本是如何开始的”,如果你想要一个真正好的食谱,你必须开始用食谱书或美食博客之类的东西来写作,这并不是说你可以让模型做你想让它做的事。我认为,这其中有很大一部分开始是这样的。你真的必须善于理解GPT-3的复杂性,并设计出真正好的提示。

在我们推出后的一年半时间里,我们看到人们在这方面有很多困难,所以我们开发了一套新的模型,我们称它为InstructGPT。这实际上就像上周一样,它成为我们API中的默认值,我们称其为InstructGPT的原因,是因为它只提供说明。

所以我想说,提示设计现在已经不那么重要了。你可以告诉模型你想让它做什么,并提供一些例子,还有一点关于格式可能会影响你提供示例的方式等等。GPT-3在这方面非常强大,但有时它确实有点问题,一些调整很重要。但我想说的是,与一年前相比,现在已经不那么重要了,我的希望是,它变得越来越不重要,而是变得更有互动性。

Lukas:你对模型还启动了微调的功能,这个想法是什么,它在什么地方有用?

Peter:GPT-3令人惊讶的是通过零下 (zero-shot) 就得到了非常好的结果。你只需要提供一个例子,或没有例子,只是说,“嘿,把这个句子从德语翻译成英语”就可以了,或者你提供了几个 (few-shot) 示例,比如几对德语和英语实例。只需几个 (few-shot) 示例,你就可以得到令人惊讶的好结果。但这实际上意味着准确性是非常依赖于具体任务的,对于一些任务,也许30%的时间你得到的输出是可以接受的,而对于其他更简单的任务,你可能70%的时间都能做到。

当它不是每次都很好时,你必须非常聪明地在你的产品中暴露它。这就是为什么,比如它对很多文案公司都很有效,你可以只提供一些例子,你知道其中至少有一个是好的,这就是用户所需要的。但是通过微调,你能做的基本上你可以自定义你的模型,你可以为它提供更多你希望它执行的输入和输出示例。如果你想做翻译,或者如果你想总结文章,你可以提供几百篇已经做过人工编写总结的文章例子,你可以更新GPT-3来更好地完成这项任务。

你不能把所有这些例子都放在你的提示中,提示符的空间有限,但是通过微调,你把这些例子转化为神经网络的连接,转化为神经网络的权重。在某种程度上,你就像有了一个无限的提示,你可以提供尽可能多的例子。显然,示例越多,微调所需的时间就越长,成本也就越高。但微调基本上是一个概念,取一堆输入和输出的例子,把它们放入模型中,然后得到一个模型的新版本,该版本非常适合你提供例子的任务。事实证明,只需几百个例子,或者大约100个例子你就能显著提高准确性。

我们有很多客户使用过它,就像Keeper Tax一样,他们正在分析交易以找到这些税收注销之类的东西,他们所做的是提取相关的文本片段,进行分类等等。例如,他们对模型进行微调,并通过微调模型得到了更好的结果。我们在客户身上一再看到这种情况。他们可以得到非常好的结果,这些结果通常对于原型来说已经足够好了,但是为了让其达到足够高的精度以将其投入生产——通常超过90%或95%或99%,使用他们拥有的数据集对模型进行微调,这样一直进行下去。这可以让他们比以前启用更多的应用程序。我们只是让这种微调变得很简单。

Lukas:我想对你来说,你们可以调整的参数是什么,因为你描述的方式,听起来好像没有任何参数,参数在这里如何参与呢?

Peter:对于你关于参数的问题,我们试图在我们的API中使它变得非常简单。我们试着让默认值非常非常好。一般来说,你可以通过微调获得非常好的结果,而根本不需要过多地修改参数,但有些参数会有所不同。例如,你可以设置学习率,这是你在每个学习步骤中更新权重的程度。

你可以设置你想要通过多少次数据的内容,事实证明,如果你把数据调整太多次,你就会对数据集进行过度拟合。这些GPT-3模型非常大,通常只需要对数据进行2到5次迭代就能得到非常好的结果,如果你走得更远,你有时会过度拟合。还有更高级的参数,但我有点喜欢玩一点你想训练它的时代数量和他们的学习率,这让你达到了90%的目的,如果你开始摆弄其他参数,它不会给你更多。

Lukas:这是考虑将参数留给其他人的想法吗,你能从摆弄参数中得到乐趣吗?

Peter:说实话,如果这是完全自动的,我会很高兴,也就是说,我们确实有一些更注重研究的客户,他们真的喜欢摆弄,所以我认为我们很难删除它。但是,就像我说的,我们有两大阵营的用户:研究人员和开发者,开发者总是告诉我们:“嘿,我只想要一个按钮,我只想要最好的模型出来。”然后很多研究人员想要摆弄更多的参数,我想我们可以长期满足双方的需求。

Lukas:Boris (Boris 是一个 ML 技术人员),我不知道你把自己归哪一类了,你做了一些惊人的,漂亮的演示,你也喜欢调整参数,我很好奇你使用GPT-3模型的经验。

Boris:我当然喜欢有一个好的默认值,因为最初你真的不知道你应该在它上面改变什么,假设你选择了错误的参数,结果什么都没用。可不是什么愉快的经历。所以我喜欢如果你不选择任何东西,它就已经很好了。然后,我真的很喜欢调整参数,看看“好吧,会有什么效果”并试着用直觉来调。

除了Peter提到的参数之外,还有两个参数也让我很感兴趣,你可以决定微调哪个模型,有不同尺寸的模型。如果你使用一个更大的模型,也许你的API会慢一点,但是你的效果会更好。也许有时你不需要它,也许有时确实需要,所以我想看看我使用哪种模式的效果。

我还喜欢看到“我可以给出多少个训练样本”的效果,就像我只给出20个样本,而不是100或200个,因为这样你就能知道我的模型在我开发一个更大的数据集时会变得更好。我喜欢摆弄各种各样的参数,看看基于这些参数能做出什么样的预测。

Peter:对,最后一条,其实非常重要,我认为这是我们一遍又一遍地给人们的最常见的建议之一。

这就像从一小组例子开始,然后把它翻倍,看看你能得到多少改进。如果你将训练数据量翻倍,那么你,就会看到错误率的线性改善,如果你有10%的错误率,你把训练数据翻倍,你可能会得到8%的错误率。然后再翻倍,错误率降至6%等等。如果你能看到这种趋势,那么你就会突然有一种感觉,“就标记更多的数据等等而言,我需要花多少钱才能得到我想要的结果”等等。

这是一件非常强大的事情。

Lukas:训练这些模型的结果是否可重现?每次对它进行微调时,有多少可变性?如果你对相同的数据进行两次不同的微调,你会得到相同的模型吗?

Peter:原则上,你可以把它设置成非常可复制的。如果你在同一天训练,基本上你在训练时想要做的是,在每次训练迭代中,你有一批数据,比如一些例子,你实际上可以把API设置批量大小,每次更新需要多少个示例。我认为它默认是32或类似的东西,当你这样做时,你还希望对数据进行随机排序,你希望对训练数据进行随机抽样。

只要你在训练中保持这些随机化一致,你最终会得到相同的模型。这将是相当可复制的。唯一需要注意的是,在实践中,即使是推论,这也是正确的。我们有一个叫做温度 (Temperature) 的参数,你可以设置输出的可变性。温度越高,变异性就越大,即使你把值设为0也不能保证你会得到完全确定的输出。

在这些大型模型的GPU中,有足够多的噪音和一些奇怪的浮点运算等等,都很难保证完全确定性的决定。

很多人问我们这个问题,答案总是这样,“很不幸,我们不能提供这个,但你可以得到一些公平的东西。”但是你应该让你的实验足够强大,这样你就不用太在意决定论了。

05
OpenAI API背后的工程挑战

Lukas:我认为,从操作上讲,让每个人都有自己的微调模型比每个人都使用符合相同模型的API在基础设施方面面临的挑战要大得多。允许这种情况发生是一项艰巨的任务吗?比如,当人们开始使用不同的模型时,你需要换入和换出不同的模型吗?

Peter:刚开始的时候,我们做微调的方式基本上是在某种程度上。你几乎租了一组运行模型的GPU,在某种程度上,对于一些最早期的微调客户,我们基本上是按GPU小时收费的,比如每小时,他们使用模型的次数。甚至从一开始,我想在推出API后的六个月内,我们就有一些精选的客户,他们有微调过的模型和类似的东西,这就是它的工作方式。

问题是,如果你想尝试一些新的东西,GPU的时间是很昂贵的。你不会真的想要花钱去保留一个GPU,哪怕只有不到一个小时,这一切都累积得非常非常快。我们只是设定了一个目标说“好吧,一旦你微调了你的模型,你应该立即能够使用那个模型,你只需要为推理时进入它的token付钱”,就像无论你在提示符里输入什么。

要使这种体验真正出色,这无疑是一个巨大的工程挑战。你只需开始微调,当它完成时,得到一个微调的模型名称。现在你可以在API中使用那个模型来立即得到一个结果,而且你不会按小时或其他方式收费,你只会以相同的方式为API收费。这真的很棘手,我们在OpenAI有一个了不起的工程团队,他们真的想出了很多技巧来平衡这些模型的最终位置,并以正确的方式缓存它们等等,以创造一个很棒的体验。

Boris:我很好奇你是对整个模型进行微调,还是只对部分模型进行微调,让它更有效率。

Peter:我们用了很多技巧来实现这一点,我们一直在努力寻找新的方法。如果你想对整个750亿个参数模型进行微调,这是有挑战的。它可能会变得非常昂贵和困难等等,有一些技巧可以让它更快。

Lukas:你觉得你和所有使用GPT-3进行自然语言任务的每个人之间的区别是模型本身的质量和性能吗?还是其他原因?是关于集成,还是生产中的监控,或者类似的东西?

Peter:当然,我们在构建API时所关注的关键事情是最重要的是模型的能力。

其次,你需要有快速的推理能力。在我们创建API之前,对于语言模型,没有人关心推理。每个人都关心你能多快地训练他们,因为这才是最重要的。因此,你可以在一天结束时解决基准测试问题。我们做了大量的工程设计来让推理超级超级快。我还记得在最初的几个月里,我们将API的第一个原型交付客户开始使用,我们将推理速度提高了200倍之类的。我们做了很多努力来让它超快。

第三件事是围绕安全的事情。我们投资这些InstructGPT模型的原因之一是,我们看到有时你可以得到出乎意料的模型输出。例如,你可能写了一个非常无辜的句子,但由于某些原因,它可能会变得非常黑暗,或者你可能会以不同的方式得到一些有偏见的输出。使用我们的推荐指令的模型,默认情况下,它们的行为更符合预期,但你也可以以更好的方式指定行为。事实证明,当安全和能力齐头并进时,当你能更好地控制它时,它就会变成一个更好的产品。这些肯定是我们一直关注的事情,我认为我们在这方面做得比现有的其它替代方案要好得多。

最后,我们非常关注的事情是让它使用起来非常简单,事实上,你不需要加载模型,你只需要调用一个微调模型,只需要一行Python来调用API,这也是我们的核心,我们希望每个人都能轻松使用它。

Lukas:太棒了。好的,非常感谢,很高兴与你交谈,祝贺你做出了如此成功的产品。