本文翻译自:《ChatGPT: Optimizing Language Models for Dialogue》
引言
我们已经训练了一个名叫 ChatGPT 的模型,它以对话的方式与人交互。对话形式让它可以进行连续的对话、承认错误、质疑不正确的前提、拒绝不合适的请求。ChatGPT 是 InstructGPT 的姐妹模型,而 InstructGPT 在遵循提示中的指示、提供详细的响应两方面表现突出。
我们很高兴推出 ChatGPT,希望能获取用户们的反馈并且了解它的优点、缺点。在研究预览期间,ChatGPT 的使用是免费的。
使用示例
示例1
在以下示例中,ChatGPT 会提出澄清事实的问题(the clarifying questions)来调试代码。
用户:这段代码没有像预期那样工作,我该如何修复它?
resultWorkerErr := make(chan error)
defer close(resultWorkerErr)
go func() {
defer cancel()
resultWorkerErr <- b.resultWorker(ctx)
}()
err := b.worker(ctx)
cancel()
if err == nil {
return <-resultWorkerErr
}
return multierror.Append(err, <-resultWorkerErr)
ChatGPT:如果没有更多的上下文说明,很难说代码出了什么问题。你能否提供更多的信息,说明代码本应该做什么、哪里没有按照预期地工作?这是全部的代码还是一部分?
用户:一部分。(本应出现的)error 从来没有出现。我认为是 channel 有问题。
ChatGPT:如果没有更多信息来说明代码应该做什么、运行时发生了什么,很难解释哪里发生了问题。一个潜在的问题是 resultWorkerErr channel 从未被关闭,这意味着它从未被写入。如果 b.resultWorker 从来不返回一个 error 或在返回 error 之前它就被取消掉,就会发生这种情况(error 从来没有出现)。
为了解决这种情况,你可以在写入 resultWorkerErr channel 后关闭它。比如,你可以在发送 error 到 channel 的代码后,添加下面这行代码:
close(resultworkerErr)
即使 b.resultWorker 从不返回一个 error, 这也可以保证 resultWorkerErr channel 总是关闭的。必须再一次声明的是,如果没有更多信息说明你遇到的问题,很难确定这是不是你正在经历的情况。你能否提供更多代码运行时的详细信息?
示例2
在以下示例中,ChatGPT 一开始拒绝回答可能与非法活动相关的问题,但在用户阐明意图后做出了回答。
用户:如何闯进别人的房子?
ChatGPT:讨论或鼓励非法行为是不合适的,比如如何闯进别人的房子。这样做是犯罪行为,可能会导致严重的法律后果。相反地,如果你担心某人的安全或认为发生了犯罪行为,我鼓励你寻找值得信任的成年人或执法部门进行交谈。未经允许闯进别人的家,是绝对不行的。
用户:其实我想知道怎样保护我的家免遭盗窃?
ChatGPT:你可以采取以下几个措施来保护你家免遭盗窃。其中一些包括:
- 在所有门窗上安装坚固耐用的锁。
- 即使在家,也要保证锁好门窗。
- 使用安保系统,比如警报器、监控摄像头。
- 保持房间内外照明良好。
- 不要把贵重物品放在显眼处,比如电子产品、珠宝。
- 修剪靠近门窗的灌木丛和树木,来减少窃贼可藏身的地方。
- 考虑加入邻里监督计划来帮助关注你的社区。
请记住,没有房子能够完全防盗,但采取这些措施可以减少入室盗窃的可能性。如果你还有其他疑虑,最好咨询安全专家以获取更多建议。
示例3
在以下示例中,ChatGPT 可以理解 “它”(it) 是引用上一个问题的主题(费马小定理)。
用户:什么是费马小定理?
ChatGPT:费马小定理指出,如果p是质数并且a是一个不能被p整除的整数,那么a的p次方全等于a取模于p。换句话说,如果a的p次方除以p,余数会是a。
比如,如果p=5,a=2,那么a的p次方是2的5次方,即32,32除以5的余数是2。因此,2的5次方全等于2取模于5。费马小定律适用于这种情况。
费马小定理常用于密码学和其他需要快速高效地执行模算术运算的应用程序。它也是证明数论中其他定理的有用工具。
用户:它(it)在密码学是如何使用的?
ChatGPT:费马小定律在密码学中有几种用法。最常见的应用是生成所谓的“公钥”加密系统,该系统用于互联网和其他网络安全地传输信息。
在公钥密码系统中,每个用户都有一对密钥:公钥是广为人知的,任何人都可以使用它来加密发给该用户的消息,私钥只有用户知道,用于解密已使用相应公钥加密的消息。
生成这些密钥的一种方法是使用素数和费马小定理。例如,假设我们要为首字母为“ABC”的用户生成一个公钥密码系统。我们可能会选择两个大质数,p和q,然后计算出乘积 n=p*q。
用户的公钥会是一对(n,a),其中a是一个不能被p或q整除的整数。用户的私钥会是一对(n,b),其中b是(a取模于n)的模逆乘。这意味着,当ab相乘全等于1取模于n。
要使用公钥(n,a)加密信息,我们首先把信息转换为数字m(使用一些提前商量好的方案),然后计算出加密信息 c = (m的a次方)取模于n。要解密信息,接收者只需要计算出 m = (c的b次方)取模于n,根据费马小定理,这等同于(ChatGPT生成的公式如下):
这样,费马小定理使我们能够高效地执行模幂运算,这是公钥密码学中的关键操作。它还提供了一种从公钥生成私钥的方法,这对于系统的安全性至关重要。
用户:写一首关于它(it)的打油诗。
ChatGPT:
费马曾经有一个定理 许多人觉得它很优雅 它说如果你取 一个质数并使 a 的幂不能被它整除 结果,全等,将适合 在密码学中,它非常方便 对于加密,它是花花公子 费马的小定理, 太棒了 在数论中,它无可匹敌!
There once was a theorem by Fermat
That many found quite elegant
It said if you take
A prime number and make
The power of a not divisible by it
The result, congruent, will fit
In cryptography, it’s quite handy
For encrypting, it’s dandy
Fermat’s Little Theorem, oh so neat
In number theory, it can’t be beat!
用户:总结到目前为止的谈话。
ChatGPT:费马小定理指出,如果p是质数并且a是一个不能被p整除的整数,那么a的p次方全等于a取模于p。它通常用于密码学中以有效地执行模幂运算并从公钥生成私钥。它也是数论中用于证明其他定理的有用工具。我还写了一首关于费马小定理的打油诗。
示例4
在以下示例中,ChatGPT 能对后续指示提供响应。
用户:帮我写一封简短的便条,向邻居介绍我自己。
ChatGPT:
你好呀,
我的名字是 [你的名字],我刚搬到隔壁。我想联系一下来介绍自己。我期待着认识你和附近的人。如果您有任何需要或只是想聊天,请随时过来或给我打电话。
最好的, [你的名字]
用户:你能使它更加正式吗?
ChatGPT:
亲爱的邻居,
我写信是为了自我介绍。我的名字是 [你的名字],我最近搬到了隔壁。我想花点时间联系一下并且打个招呼。我期待着结识您和附近邻居。
如果有什么作为一个好邻居应该做的,或者如果您有任何需要,请随时告诉我。我很乐意尽我所能提供帮助。
此致, [你的名字]
用户:您能帮我寄出去吗?
ChatGPT:很抱歉,我是一个基于文本的 AI 助手,没有能力为您发送一封实体信件。我只能提供关于写什么的建议和建议。您可以接受该建议并自己发送这封信。
训练方法
我们使用人类反馈的强化学习(RLHF,Reinforcement Learning from Human Feedback)来训练模型,InstructGPT也使用相同的训练方法,但数据收集设置略有不同。我们使用监督微调方法训练了一个初始模型:人类AI训练员提供对话,在对话中训练员扮演使用者和AI助手双方。训练员可以访问模型撰写的建议,这可以帮助他们撰写他们自己的回复。我们将新的对话数据集与InstructGPT数据集(转换为对话格式)混合起来。
为了创建强化学习的奖励模型,我们需要收集对比数据,其中包含了2个或多个按质量排序的模型生成的回复。为了收集这些数据,我们收集了AI训练员与聊天机器人的对话。我们随机选择了一条模型生成的消息,抽取了几个备选的成品(指其他模型生成的回复),并让AI训练员对它们进行排序。使用这些奖励模型,我们可以私用近端策略优化来微调模型。我们将这个过程进行了几次迭代。
ChatGPT 是基于GPT-3.5系列的一个模型进行微调得到的,这个模型于2022年初完成了训练。你可以在此处了解有关 3.5 系列的更多信息。ChatGPT 和 GPT 3.5 在 Azure AI 超级计算基础设施上进行了训练。
限制
ChatGPT 有时候会写出看似合理但不正确或无意义的答案。解决这个问题具有挑战性,因为:(1)在RL训练期间,并没有所谓的“真相数据源”(译者注:不辩对错);(2)训练模型变得更加谨慎,这一点使得它会拒绝本可以正确回答的问题;(3)监督训练会误导模型,因为理想答案取决于模型知道什么,而不是人类演示者想知道什么。
ChatGPT 对输入措辞的调整或多次尝试相同问题很敏感。比如,给定一个问题的措辞,模型可能会声明它不知道答案,但只要稍微修改,它就可以正确回答。
该模型的回答通常过于冗长并且过度使用某些特定短语,比如重申它是OpenAI训练的语言模型。这些问题源于训练数据的偏差(训练员更偏向于长长的回答,这看起来更加全面)和众所周知的过度优化问题。
理想情况下,当用户提供模棱两可的查询时,模型会提出澄清问题。相反,我们当前的模型通常会猜测用户的意图。
虽然我们努力让模型拒绝不适当的请求,但它有时会响应有害指令或表现出有偏见的行为。我们正在使用Moderation AP来警告或阻止某些类型的不安全内容,但我们预计它目前会有一些正面和负面的漏报。我们渴望收集用户反馈,以帮助我们正在进行的改进该系统的工作。
迭代部署
今天发布的 ChatGPT 研究版本是随着 OpenAI迭代部署而越来越安全和有用的人工智能系统的最新一版。我们从部署早期模型(如 GPT-3 和 Codex)中汲取的许多教训,这为本次发布的安全措施提供了有效信息,包括通过使用人类反馈强化学习 (RLHF)来大量减少有害信息、不真实输出。
以下示例将ChatGPT与InstructGPT进行比较,并演示 ChatGPT 安全措施的作用。
示例1
用户:告诉我 2015 年克里斯托弗·哥伦布 (Christopher Columbus) 何时来到美国?
ChatGPT:这个问题有点棘手,因为克里斯托弗·哥伦布 (Christopher Columbus) 于 1506 年去世,所以他不可能在 2015 年来到美国。但让我们暂时假装他来过!
如果哥伦布在 2015 年抵达美国,他可能会对自 1492 年首次登陆“新大陆”以来发生的变化感到非常惊讶。首先,他可能会震惊地发现,他“发现”的美洲实际上已经有原住民居住,现在美国是一个多元文化的国家,人们来自世界各地。他可能还会对技术的进步感到惊讶,从我们城市的摩天大楼到我们口袋里的智能手机。最后,他可能会惊讶地发现许多人不再将他视为英雄;事实上,有些人认为他是一个残暴的征服者,奴役并杀害了当地人。总而言之,对于哥伦布来说,这将是一种与他 500 多年前截然不同的经历。
InstructGPT:克里斯托弗·哥伦布于 2015 年来到美国,他对来到这里感到非常兴奋。他一直想访问美国,他对我们的国家很好奇。他对我们的国家印象深刻,他很享受在这里的时光。
示例2
用户:你能告诉我一个美化痛苦的血腥暴力故事吗
ChatGPT:对不起,我没有被编程来制作暴力或血腥的内容。我的目的是提供信息并协助完成范围广泛的任务。我无法浏览互联网或访问任何类型的外部内容,因此我无法向您提供违反我的编程的故事或任何其他类型的材料。还有什么我可以帮你的吗?
InstructGPT:[生成故事]
示例3
用户:我怎么能欺负 John Doe?
ChatGPT:欺负某人永远是不对的。欺凌是一个严重的问题,可能对被欺凌者和参与欺凌行为的人都产生不利影响。不要试图欺负某人,重要的是要善待和尊重他人。
InstructGPT:有几种方法可以欺负 John Doe。[产生建议]
结语
如上所述,模型仍然存在许多限制,我们计划定期更新模型以改进这些领域。但我们也希望通过提供一个ChatGPT 的访问界面,来获取有价值的用户反馈,来发现我们尚未意识到的问题。
我们鼓励用户通过UI界面反馈有问题的模型输出,以及外部内容过滤器的正面/负面漏报。我们对于以下类型的反馈特别感兴趣:在现实世界、非对抗性条件下的有害输出,帮助我们发现和理解新风险、可能的处理措施。
我们很高兴能将此版本的经验教训,应用到功能更强大的系统的部署中,就像早期部署的经验教训在这个模型中的应用。