ChatGPT 的工作原理:机器人背后的模型
来源:知乎
简单介绍一下为 ChatGPT 提供动力的机器学习模型,首先从大语言模型(LLM)开始,然后我们研究了支持 GPT-3 训练的革命性自我监控机制,然后我们研究了 RLHF(人类反馈强化学习)——这项使 ChatGPT 独一无二的创新技术。
大规模语言模型
ChatGPT 是一类被称为大规模语言模型(LLM)的机器学习自然语言处理模型的外推。LLM消化了大量的文本资料并推断出文本中单词之间的关系。随着计算能力取得明显进步,这些模型在过去几年中不断发展。LLM的性能随着输入数据集和参数空间的大小而增加。
语言模型最基本的训练涉及预测单词序列中的单词。最常见的方法是下一个标记预测和掩码语言建模(MLM)。 1。图:作者的下一个标记预测和掩码语言建模 (MLM) 的示例
序列建模通常使用长短期记忆 (LSTM) 模型来完成,该模型使用基于给定上下文的统计显着性。用最可能的词填空。该系列模型有两个主要局限性:
1。该模型无法给予某些单词更多的权重。在上面的例子中,虽然“阅读”通常与“仇恨”相关联,但在数据库中“Jacob”可能是一个狂热的读者,因此模型应该给予“Jacob”更多的“阅读”,并且会给予它更大的权重。选择“喜欢”而不是“讨厌”。
2。输入数据是逐步连续处理的,而不是作为一个整体进行分析。这意味着在训练 LSTM 模型时,上下文窗口是固定的,并且仅覆盖它逐步处理的单个输入。这限制了单词之间关系的复杂性以及可以从中衍生出的内涵。
针对这个问题,Google Brain 团队在 2017 年提出了 Transformer 模型。与 LSTM 不同,它同时处理所有输入数据。它使用自注意力机制,可以为句子中任何位置的不同输入数据分配不同的注意力分数。这一特性赋予了LLM灵魂,使其能够捕捉更丰富的内涵并处理更大的数据集。
GPT 和自我监控机制
生成式预训练 Transformer (GPT) 模型由 OpenAI 于 2018 年首次推出,名称为 GPT-1。该模型于 2019 年迭代演变为 GPT-2,于 2020 年迭代演变为 GPT-3,最近于 2022 年演变为 InstructGPT 和 ChatGPT。在将人类反馈融入系统的阶段之前,GPT模型开发的最大进展是由所取得的结果决定的。在计算效率方面。计算效率的提高使得 GPT-3 能够接受比 GPT-2 更多的数据训练,从而允许更多样化的知识库和更广泛的任务。 2。图:作者 与 GPT-2(左)和 GPT-3(右)的比较
所有 GPT 模型都使用 Transformer 架构,这意味着它们有一个编码器来处理输入序列,还有一个解码处理器。生成输出序列。编码器和解码器都具有多头自我监控机制,允许模型对序列的不同部分进行不同的加权,以进行含义和上下文推断。此外,编码器使用掩码语言模型 (MLM) 来理解单词之间的关系并生成更易于理解的响应。
驱动 GPT 的自我监控机制的工作原理是将标记(可以是单词、句子或其他文本片段的文本组)转换为指示输入序列中标记重要性的向量。该模型分四个步骤执行此操作:
1。为输入序列中的每个标记创建三个向量:“query”、“key”和“value”。
2。通过取两个向量的点积,计算步骤 1 中的“查询”向量与每个成员的“关键”向量之间的相似度。
3。通过将步骤 2 的输出传递给 softmax 函数来生成归一化权重。
4。将步骤 3 中生成的权重乘以每个标签的“值”向量会产生代表标签在序列中的重要性的最终向量。
GPT 使用的“多头”注意力机制是自注意力机制的改进版本。而不是 1-4。一次执行步骤,模型会多次重复此机制:每次为“查询”、“键”和“值”创建新的向量投影。通过以这种方式扩展自我意识,该模型能够捕获输入单词数据含义背后更复杂的关系。 3。图:来自 ChatGPT 的作者截图。
虽然GPT-3在自然语言处理方面取得了重大进展,但其匹配用户意图的能力有限。例如,GPT-3 可能会生成具有以下属性的输出:
- 无帮助,这意味着不遵循用户的明确指令。
- 反映不存在或不正确事实的虚构事实。
- 缺乏解释使得很难理解模型如何得出特定决策或预测。
- 包含有毒/偏见、有害或冒犯性内容,传播虚假信息。
ChatGPT引入了新的训练方法,解决了LLM标准版的一些固有问题。
ChatGPT
ChatGPT 是 InstructGPT 的衍生产品,它引入了一种将人类反馈纳入训练过程的新方法,以更好地使模型输出与用户意图保持一致。 OpenAI 2022 年的论文《训练语言模型以遵循人类反馈的指令》(通过人类反馈训练语言模型以遵循指令)详细描述了通过人类反馈进行强化学习(RLHF),下面简单介绍一下。
第一步:有监督微调(SFT)模型进行学习。输入或提示是从实际用户输入到开放 API 中收集的。然后,注释器根据提示编写适当的响应,并为每个输入生成已知的输出。然后使用这个新的监督数据集对 GPT-3 模型进行微调,以创建 GPT-3.5,也称为 SFT 模型。
为了最大限度地提高提示数据集的多样性,对于给定的用户 ID 只能选择 200 个提示,并且前缀较长的提示也会被删除。最后,所有包含个人身份信息 (PII) 的提示都被删除。
从 OpenAI API 聚合提示信息后,注释者必须手动为多个提示创建示例提示,而实际样本数据很少,从而使提示数据集更加丰富。包含:
- 简单提示:任何随机问题。
- 小示例提示:包含多个查询/响应对的指令。 (注:这相当于为某种题型编写多个示例题。)
- 基于用户的提示:是指用户给AI给出示例或指令,以生成特定的输出。
在生成响应时,注释者被要求尝试推断用户的指令。本文介绍了三种主要的信息请求方式:
1。直接:“告诉我......”
2。小样本:讲两个关于一个主题的故事,然后写一个关于同一主题的故事。
3。延续:输入故事的开头,然后结束。
来自 OpenAI API 的编译提示和来自注释者的手写提示,总共产生了 13,000 个输入/输出样本来训练监督模型。4。图:图片(左)取自 OpenAI 发表的 2022 年论文《Training Language Models to Follow instructions with Human Feedback》。作者用红色字母添加的额外内容(右)。
第二步:奖励模型
第一步训练完SFT模型后,模型将更加响应用户指令。改进的下一步是训练一个奖励模型,其输入是一系列提示和响应,其输出是一个称为“奖励”的标量。训练奖励模型利用强化学习,以便模型学习如何生成输出以最大化奖励价值(参见步骤 3)。
为了训练奖励模型,注释者会看到单个输入提示的 4-9 个 SFT 模型输出。他们被要求将这些输出从最好到最差进行排名,并创建输出排名组合,如下所示。 5。图:作者的答案排名组合示例。
将各个组合作为独立数据点包含在模型中会导致过度拟合(无法推广到未见过的数据)。为了解决这个问题,模型将每个排名视为一批数据点。 6。图:图片(左)来自 2022 年发表的 OpenAI 研究《训练语言模型以遵循人类反馈的指令》。作者用红色字母添加的额外内容(右)。
3。步骤:强化学习模型
最后阶段,模型收到随机提示并返回答案。该响应是使用模型在第二步中学习的“策略”生成的。这一政策代表了机器学习的目标,即最大化其回报。基于第二步开发的奖励模型计算信号和响应对的奖励值。奖励被反馈到模型中以更新策略。
2017 年,Schulman 等人。引入了近端策略优化(PPO),它用于在每次响应生成时更新模型的策略。 PPO 包括针对 SFT 模型中每个标记的 Kullback-Leibler (KL) 罚分。 KL 散度衡量两个分布函数的相似性并惩罚极端距离。在这种情况下,使用KL惩罚来限制第二步奖励模型引起的响应与第一步训练的SFT模型的输出之间的距离,避免奖励模型的过度优化和与奖励模型的过度偏差。人类意图数据集。7。图:图片(左)取自 OpenAI 发表的 2022 年论文《Training Language Models to Follow instructions with Human Feedback》。作者用红色字母添加的额外内容(右)。
该过程的第二步和第三步可以重复多次,但这在实践中并未广泛使用。 8。图:来自 ChatGPT 的作者截图。
模型评估
使用模型在训练期间从未见过的测试数据集来评估模型。使用该测试集进行了一系列评估,以确定该模型是否比其前身 GPT-3 更能产生正确的响应。
协助:模型可以推理并遵循用户指令。 85±3% 的时间注释者更喜欢 InstructGPT 的输出而不是 GPT-3。
真实性: 控制模型显示虚幻内容的倾向。当使用 TruthfulQA 数据集进行评估时,PPO 模型生成的输出显示公平性和信息性略有增加。
纯真:模特避免不当、贬损和诽谤性内容的能力。使用 RealToxicityPrompts 数据集测试无害性。测试在三种条件下进行:
1。该模型被指示做出友好和尊重的反应,这显着减少了毒性反应。
2。指示模型做出没有任何偏差的反应:不良反应没有显着变化。
3。该模型被指示产生毒性反应:这些反应实际上比 GPT-3 模型更具毒性。
有关用于创建 ChatGPT 和 InstructGPT 的方法的更多信息,请阅读 OpenAI 于 2022 年发表的原始论文 Human-Informed Language Models for Instruction:https://arxiv.org/pdf/2203.02155.pdf。 9。图:来自 ChatGPT 的作者截图。
作者:Molly Ruby
翻译:张瑞仪
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。