OpenAI 的聊天机器人ChatGPT最近可谓是火到出圈,这也让大家对ChatGPT背后的技术非常好奇。GPT-3是OpenAI 产品历程中的一个重要里程碑,也是其 Codex (或Github CoPilot) 和ChatGPT等应用的基石(ChatGPT 基于GPT-3的加强版GPT-3.5)。近期,机器学习平台Weights & Biases(W&B)发表了OpenAI的产品与合作伙伴关系副总裁Peter Welinder接受(W&B)员工Lukas和Boris的采访:“Fine-tuning OpenAI's GPT-3”。
Peter Welinder 现任 OpenAI 产品与合作伙伴副总裁,负责GPT-3的运行和其他业务,在此之前,他曾是OpenAI的研发主管。在采访中Peter Welinder比较全面地解密了OpenAI 背后的故事,并对GPT-3的研发和商用情况做了详细介绍,特别是OpenAI 怎样训练 GPT-3 使得它在文章摘要、翻译以及问题回答等任务中展现出色的能力;以及用户应该如何利用GPT-3进行微调来更好地将其应用于翻译、文案写作和其他商业任务中;最后Peter Welinder还介绍了 OpenAI 团队对于GPT-3 API 产品研发和工程实施的一些思路。
撰文 | Angelica Pan
来源 | MoPaaS
摘要 (由ChatGPT 产生):
GPT-3是一种大型语言模型,被训练用来在给定上下文中预测下一个单词,使用Transformer架构。它很灵活,可以用于翻译、摘要、分类和问答等任务。GPT-3的优势在于它的简单性和不需要专门训练数据集就能表现良好的能力。GPT-3可以用于翻译任务,方法是提供比如“德语:英语”对的翻译样例(如果是德英翻译),或者像问人一样要求模型翻译给定的句子。尽管GPT-3主要是在英语数据上训练的,但仍然能够在翻译任务中表现良好,因为它能够通过提供的样例中的模式,并利用自己的一般语言能力产生翻译。GPT-3也可以用于摘要和问答等任务。GPT-3在商业应用中也取得了成功,如文本生成和问答。它明显比早期版本的GPT [规模]更大、[功能]更强大,训练的数据也更多。它被用来生成创意写作任务的起点或变体,如产品描述,并已与OpenAI API集成,使开发人员更容易使用。API允许用户对GPT-3进行特定任务的微调,包括设置学习率和数据的过渡次数,以及选择模型大小。
01
使用GPT-3解决现实世界的问题
Lukas:Peter (Welinger),上次我们谈话时,我记得你在OpenAI做研究,但现在我们发现你是OpenAI的产品和合作伙伴关系副总裁,我很好奇这意味着什么?你每天都在做什么?
Peter:我今天所做的与我做研究时完全不同,对我来说,做研究一直都是为了解决最困难的问题,以便真正对世界产生某种影响。我个人更倾向于研究的最终目标,而不是研究本身,做研究真的很有趣,你知道,深入研究,探索事物,最后总是有一个目标。
GPT-3发生了一件令人兴奋的事情……当我开始在OpenAI工作时,我做的很多事情都是机器人方面的。对于机器人技术来说,你在实验室里能做的事情和你在现实世界里能做的事情之间还有一些差距。使用GPT-3,当我们在GPT-3中得到第一个结果时,很明显我们有一些东西可以开始应用于现实世界的问题,而不仅仅是做酷炫的演示。
当我从事机器人工作时,我们最后得到的是一个非常酷的机器人手解魔方的演示,但每个人的家里并不具备部署它的条件,即使它足够强大,我也不知道它对解决魔方有多大用处,这是一种非常昂贵的方法。但是有了GPT-3,我们有了一个语言模型,你现在可以应用它来解决各种不同的问题,从翻译到总结,再到分类和问答等应有尽有,这是一个非常灵活的模式。所以,我们要做的就是看看这个模型来解决现实世界的问题是否足够好,对我来说,这是一个非常有趣的领域。
当你拥有这项非常强大的新技术,有可能改变很多事物的工作方式时,这一切都是为了找到合适的方法来来解决问题,看看你如何利用你工具箱里的工具来解决这些问题。不同的是,作为一名研究人员,我所做的是提出正确的基础和正确的方法来衡量进展。当目标非常遥远时,你需要想出这些玩具的方法来评估进展。
现在,就像客户告诉我们“嘿,我正在尝试将GPT-3应用到这个用例中”,但它不起作用或太慢等诸如此类的事情,这些问题要具体得多。
我的日常,现在更多的是建立一个团队,用我们在OpenAI开发的技术来解决这些现实问题。
Lukas:当你将GPT-3与其他用于大型语言模型的方法进行比较时,这似乎是一种趋势。你是否注意到它在工作方式上有哪些关键差异,采取某种方式是否有所不同?
Peter:这是一个很好问题,我认为我真正喜欢GPT-3的地方,以及我认为它与众不同的主要方式是GPT-3所做的一切都非常简单……
GPT-3是一个大型语言模型,大型神经网络。它使用的是谷歌几年前推出的一种非常流行的Transformer架构,如今,它基本上为所有不同的语言模型提供了支持,而且它也开始进入其他领域,比如计算机视觉等。
GPT-3的设置非常简单,它可以有一些上下文,你可以看看文本的历史。比如,如果你正在读一本书,你可以看一页或一段文字,然后它试着预测下一个单词,这就是GPT-3的训练方式。它只是训练了来自不同来源的大量文本,大部分来自互联网。它只是一遍又一遍地训练,根据它看到的一些单词,预测下一个单词。
你可以从几个单词开始,但当我们今天训练这些模型时,我们训练它们的数量级是一千或几千个单词,你可以回顾这1000个单词,然后试着预测下一个单词。所以设置非常简单,你只需要在这些庞大的文本数据集上训练它,以便继续预测下一个单词,并在这方面做得非常好。
我认为GPT-3的令人惊讶之处在于,如果你这样做,然后你把模型变得非常大,这让它有巨大的学习能力,然后它就会非常擅长以前你需要专门模型的一系列任务。以前如果你想进行翻译,你就需要一种专门翻译的神经网络,或者如果你想做总结,同样,你会以特定的方式设置你的网络,然后只训练它完成总结任务。
我们在使用GPT-3中发现,你实际上在一些基准测试中获得了非常接近最先进的表现,这些基准测试包括总结、翻译、问题回答等等。该模型使用的是一个刚刚在互联网上训练过的模型,它不专门执行任何任务,而是能够以与阅读文本相似的方式再现文本。
02
将GPT-3应用于翻译任务
Lukas:实际上,如何将其应用到翻译任务中,你如何把“预测下一个单词”变成一个翻译?
Peter:在很多其他的大型语言模型中,都有一些特定的步骤,你可以对一段文本进行编码。所以你会在神经网络中创建一些表示,然后你会有一个解码器来接受它,然后用它来写一些句子。例如:如果你做翻译,你会把它编码成某种表示,然后你的神经网络会有一个单独的部分来接受这种表示,并尝试输出你想要的东西,输入可能是一个德语的句子,输出的可能是一个英语的句子,而且,你知道它是专门为此训练的。
那么对于你的问题,你如何处理GPT-3呢?最简单的方法是:你可以提供一些例子,说明翻译可能的样子,仅以纯文本形式,你会写“德语:”和一些德语句子,然后是“英语:”和一些英语句子。你可能只提供一个例子,那么这个称为一下 (one-shot),你可以提供一些例子,基本上都是“德语或者英语”的一些例子,然后你可以输入你想翻译的新句子,这就是所谓的多下 (Few-Shot) 训练。如果你有几个例子和模型,只要看看它现在在其上下文中看到的模式,它可以产生一个翻译。
这是一个非常简单的设置。基本上,我认为告诉GPT该做什么的方式有点像你告诉人类做同样的事情。比如,如果我给你写电子邮件,“嘿,Lukas,我想让你翻译一些句子”我会告诉你:“请翻译这些句子,我可能会提供一些例子来让你了解一下它的语气,比如:我想要更正式的翻译,还是更随意的翻译等等,你会发现其中的规律,给你一个德语句子(我不知道你懂不懂德语)你就能把它翻译成英语。
现在有了我们最新的模型,你甚至不需要提供这些例子,你可以像问人一样问模型,比如,“嘿,把这个句子翻译给我听”,或者“总结一下这篇文章”。
我们刚刚发现,这就是人们想要使用模型的方式。我们让他们做了更多这样的工作,但就是这么简单,你只要告诉它你想做什么,它就会尽最大努力去做。
Lukas:你是主要致力于训练模型使用多种语言,还是主要是英语?语料库从何而来?
Peter:实际上我们做的正好相反。最初,当我们训练GPT-3时,我们一致努力不用英语以外的其他语言来训练它。事实证明,即使这些模型是巨大的,在你的数据集组合中也需要权衡取舍。如果你先用英语训练它,然后再用其他语言训练它,它在英语任务中表现就不那么好了,最终当我们训练它的时候,我们想看看,它在更通用的能力上能有多好?
我们不太关心翻译,因此,每当我们输入额外的语言时,这只会以擅长用英语执行其他任务为代价,比如回答问题、总结等等。但结果是,即使明确地试图过滤掉大多数其他语言,也可能有一小部分数据是其他语言的。即便如此,该模型在翻译方面还是非常出色,在许多翻译任务中,它接近于最先进的技术。
我的母语是瑞典语,但我现在已经不会用瑞典语写作了,因为我从来没有这样做过。我现在做的是用英语写它,然后让GPT-3来翻译给我,这只是我的观点,它不会变得完美,我需要调试一些东西,但它出奇地好,而且模型中的瑞典训练数据量非常非常少。
我们一直在不断更新我们的模型,让它们变得越来越好,所以现在我们引入了越来越多的语言数据,因为我们已经找到了如何以更优化的方式进行这些权衡。但是,一开始我们想要的是相反的,我们只是想把英语学好。
Lukas:是预测单词还是一次预测一个字符?这是怎么回事?
Peter:都不是,它实际上是在预测一种叫做符号标记 (Token) 的东西,这就像“单词的一部分”也许可以这么想,最常见的英语单词,它们由单个符号标记。我们有大约50,000个这样的标记,我们将它们映射到字符序列上,结果就像“hi”或“the”这样的常见单词最终会成为一个标记。但如果你有一个更不常见的词,比如“百科全书”之类的,你可能会把它分解成两三个符号,这就像单词片段,只是让这些语言模型更容易、更有效地使用文本。原则上,你也可以在字符层面上这么做,但它会变得非常低效,你知道,这就是这个领域可能正在改变的地方,最终,它将不止在字符层面上做到这一点。
Lukas:但我认为这会让学习外语变得非常困难,比如,亚洲语言是不可能的吗?如果他们有更多的符号,或者我猜你可能会说,他们已经为你做了标记化,通过使用更多的字符来编码更大的含义。
Peter:是的,训练标记器 (Tokenizer) 的方式肯定会对不同语言的性能产生影响。通常这两件事分两个不同的步骤进行训练,你可以在某些数据语料库上训练你的标记器,然后在其他一些数据集上分别使用该标记器训练你的模型,为了让你的模型真正擅长不同的语言,你还需要在多种语言上训练该标记器。
肯定是使用其他语言的成本更高,一个德语单词最终会变成更多的符号,因为我们训练它的次数少得多。而英语非常高效,很多单词都是一个单一的符号,所以这使得它在其他语言上更糟糕,而且更昂贵。
Lukas:我能把一些东西翻译成日语吗?GPT-3也能做到吗?
Peter:是的,我记得我们的一个日本用户的评论,他们非常喜欢使用GPT-3在英语和日语之间翻译技术文档,因为他们发现GPT-3在技术文档翻译方面比谷歌翻译要好得多。这大概是一年前的事了,谷歌翻译现在可能更好,但根据我们拥有的数据集,这可能只是一个偶然的事情。
实际上,关于GPT-3的翻译功能,真正酷的事情是我们并没有在显式的输入和输出对上训练模型,翻译的文本片段,就像你通常所说的“对齐的文本片段”一样。
只是看到了很多日本人,它看过很多日本电影,也看过很多英语电影。不知怎么的,通过学习如何预测下一个单词,已经有足够多的小文本、博客文章或其他东西——作者在日语和英语之间切换。可能会对一些句子进行翻译,在那里它找到了映射,然后以某种方式有一个足够好的表示,然后推广到任意的翻译任务。对我来说,这太神奇了,它只是通过阅读大量的英语文本,大量的日语文本,然后可能就像在所有的数据中找到一些对齐的对,它就能够进行翻译,这对我来说太疯狂了。
03
文案及其他GPT-3商业应用
Lukas:真是太神奇了,这种性能与早期版本的GPT有明显的不同吗?比如在GPT-3中是否发生了什么,OpenAI认为“好吧,我们可以将其用于现实世界的商业应用”?这是它需要达到的性能水平吗?
Peter:是的,我认为GPT-2和GPT-3之间最大的区别是:它被训练在更多的数据上,它是一个更大的模型,大概差了两个数量级。最初的GPT-2大约有15亿个参数,而GPT-3最大的模型有1750亿个参数,它上升了两个数量级,而且由于它是一个更大的模型,它也需要更多的数据。
令人惊讶的是,这就是从感觉它相当愚笨到可以与之互动的原因,像 GPT-2 有点的酷炫,但大多数时候也感觉它非常愚蠢,我认为在GPT-3中,它有时会表现得出乎意料的好。不要误解我的意思,GPT-3仍然会犯很多愚蠢的错误,但在某些任务上,它可能有30-50%的时间是正确的,有时甚至更好。就好像突然之间在你需要抽样和尝试任务之前,也许每隔20次你就会看到一次,“哦,这个看起来不错”。有了GPT-3,它开始每三次发生一次,或每两次,或每五次发生一次,你会说,“哦,天哪,这实际上是……”
对于诸如总结文本之类的事情,我们有一个例子是用二年级学生的风格总结一段文字,令人难以置信的是,该模型能够简化单词,获得一段文本的要点等等,再说一次,它不是完美的,但它真的很好。
显然,我们有很多学术基准 (academic benchmarks),你可以运行这些模型,你可以看到它在学术基准上越来越好。但当你想要创建一些东西的原型时,这是一种完全不同的感觉,不同的是,现在很容易得到一些运行良好的东西。这就是为什么我们决定,“嘿,现在它看起来很有用”,GPT-2看起来没有那么有用,但是GPT-3,对于所有这些任务,我们觉得“好吧,它已经足够接近最先进的技术了”,如果你有一个专门的模型或其他什么,一个聪明的程序员应该能够将其应用到他们所拥有的任何任务中,这就是我们设置的API验证的内容。
Lukas:你真正引以为豪的用例,它到底在哪里起作用?你能不能给我们指出一些地方,让我们可以在商业环境中与之互动?
Peter:当然,我认为最让我们感到惊讶的是文案和问题回答,一般来说是创意写作。在文案方面,当时有很多公司开始在我们的平台上进行开发,有些公司像:Copysmith是第一批;CopyAI;还有Jarvis……还有很多这样的公司。他们的做法非常聪明,因为他们意识到,当你使用GPT-3来完成某些任务时,它并不完美。时不时的,你可能会得到一些没有意义的东西。
但如果你在做文案工作,比如你想根据产品的某些属性写一些吸引人的产品描述,比如鞋子,可能是鞋底的类型,颜色,鞋子的一些其他属性,你想写一些真正吸引人的东西,那么作为一个人,你面临的问题是你陷入了某种写作瓶颈,我该从哪里开始呢? 这些公司开始做的是他们采用GPT-3,他们用它来生成一些起点或者一些产品描述的变体。
你会发现,通常情况下,如果你生成五个这样的例子,其中一个看起来会很好,你可以把它作为你的起点,你可能只是接受它,或者做一些小的调整。这几乎是一种帮助人类创造力的方式,你知道吗,我觉得这太酷了。
作家们会告诉我们,“嘿,我已经试着写这本书半年了,我总是陷入写作瓶颈。然后我开始在使用GPT-3,现在我花了两周时间完成了整本书。”当你陷入困境时,它可以创造一个有趣的故事情节。作为一个有创意的作家,你开始探索,就像“好吧,我没有想过这个角色会往这个方向发展,但让我们来探索一下吧。”然后它就变成了一个更有趣、更吸引人的过程。
这几乎就像一个人,现在我们有一个头脑风暴的合作伙伴,你可以把它应用到所有这些不同的任务上。我觉得非常酷的是,我发现很多公司都在利用这一点,创造你以前做不到的新体验。我认为这是非常令人兴奋的。我觉得回答问题也非常酷,但是这个问题出乎我的意料。我认为我们不会预料到这是一个如此大的用例。
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:太棒了。好的,非常感谢,很高兴与你交谈,祝贺你做出了如此成功的产品。
本文转载自微信公众号“MoPaaS”。
特 别 提 示
1. 进入『返朴』微信公众号底部菜单“精品专栏“,可查阅不同主题系列科普文章。
2. 『返朴』提供按月检索文章功能。关注公众号,回复四位数组成的年份+月份,如“1903”,可获取2019年3月的文章索引,以此类推。