神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。
编者按:ChatGPT 的火爆是现象级的,打破了有史以来科技产品用户数突破一亿的最短时间记录。但它的能力究竟是如何形成的?它有什么特别之处?这篇对机器学习模型的简介将从大型语言模型的介绍开始,深入探讨令 GPT-3 能够接受训练的革命性的自我注意机制,然后深入研究基于人类反馈的强化学习,这正是 ChatGPT 的与众不同之处。文章来自编译以及 ChatGPT 的配合。
首先,我们让 ChatGPT 用尽量简单易懂的语言介绍它自身背后的原理:
我是由 OpenAI 开发的一种人工智能技术,称为‘大型语言模型’。在我的训练过程中,我接受了海量的文本数据,并学习了这些数据中的语言规则和模式。这些数据包括各种来源,例如维基百科、新闻文章、小说、网页等等。在学习过程中,我试图预测文本序列中的下一个单词或字符,以提高自己的准确性。
在完成训练后,我可以用于各种自然语言处理任务,例如回答问题、翻译文本、生成新的文本等等。当您与我交流时,您的输入将被转化为一个向量,然后我会基于我的训练数据和预测能力来生成相应的输出。如果需要,我还可以通过与其他AI技术的结合,例如图像识别和机器学习,来执行更复杂的任务。
虽然我可以理解和生成各种语言,但我并不像人类一样具有情感和意识。我的工作仅仅是基于规则和统计学习的模式匹配和生成,而不是具有真正的理解和思考能力。
这是 ChatGPT 向具备计算机背景的人给出的原理解释:
我是一个基于深度学习的大型语言模型,是一种人工神经网络的应用。我是由一个特殊的神经网络架构训练而成的,该架构被称为‘Transformer’ 。这个网络可以从输入的文本中学习语言的规律和模式,并用这些规律和模式来预测下一个单词或字符。在训练时,我接受了海量的文本数据,使用梯度下降等优化算法来调整网络参数,以提高预测的准确性。
当您与我交流时,您的输入会被转化为一个向量,然后输入到我的神经网络中。网络会对输入进行一系列的计算和转换,以生成对应的输出向量。最终,输出向量被翻译成文本,以回答您的问题或提供相关信息。
我的训练和推理过程需要大量的计算资源和数据存储,因此我通常在云端或大型服务器上运行。我被设计为可扩展和高效,可以处理海量的文本数据,并能够支持多语言和多种自然语言处理任务。
ChatGPT 是一类被叫做大型语言模型(LLM)的机器学习自然语言处理模型的外推。LLM 可以消化大量的文本数据,并推断文本的单词之间的关系。随着计算能力的进步,这些模型在过去几年获得了长足发展。随着输入数据集与参数空间的不断扩大,LLM 的能力也会相应提高。
对语言模型最基本的训练包括预测单词序列里面的一个单词。最常见的,通常是“下一个单词预测”(next-token-prediction,其目标是在给定一些文本的情况下,预测下一个可能出现的单词或标记。该任务是语言模型的基础,可以用于文本生成、自动翻译、语音识别等应用中)以及掩码语言建模(masked-language-modeling,主要思想是将输入文本中的一些标记或单词遮盖掉,然后让模型预测这些被遮盖的标记或单词)。
下一个单词预测以及掩码语言建模的示例。
上图是一个基本序列建模技术的示例,通常通过长短期记忆(LSTM,一种特殊的循环神经网络 RNN)模型来部署。在给定上下文的情况下,LSTM 模型会用统计概率最高的词来填充空白。这种序列建模结构有以下两个主要限制。
这种模型没法赋予某些上下文更高的权重。在上面的例子里,比如,上文提到“Jacob hates reading”,模型可能会默认将“reading”和“hates”联系在一起,但是在实际应用中,如果数据中有“Jacob”这个人物,并且在该数据中,“Jacob”非常喜欢阅读,那么在处理“Jacob hates reading”这个句子时,模型应该更加注重“Jacob”的信息,而不是简单地依据上下文中“reading”和“hates”之间的关系来得出结论。因此,如果模型仅仅依赖上下文中的单词,而无法充分考虑文本中实体之间的关系,那么在实际应用中,可能会得出错误的结论。
其次,LSTM 处理输入数据时是基于序列逐个输入并逐步处理的,而不是一次性将整个语料库一起处理。这意味着在训练 LSTM 时,上下文窗口大小是固定的,只能在序列的几个步骤之间扩展,而不能跨越整个序列。这种方式限制了 LSTM 模型去捕捉到词与词之间更复杂的关系,以及从中推导出更多的意义。
针对这个问题,2017 年 Google Brain 的一支团队引入了 transformers。与 LSTM 不同,transformers可以同时处理所有的输入数据。Transformers 基于自注意力(self-attention,对于每个单词,self-attention 可以通过计算该单词与其他单词之间的关系强度来加强或减弱该单词的表示,从而更好地捕捉语义信息)机制,该模型可以根据输入数据不同部分与语言序列任何位置的关系赋予其不同的权重。在给 LLM 注入意义方面,这一特性取得了巨大改进,并可支持处理更大的数据集。
2018 年,OpenAI 首次推出了 Generative Pre-training Transformer(模型),代号为 GPT-1。2019 年,该模型继续演进出 GPT-2,以及 2020 年的 GPT-3,乃至于最近 2022 年的 InstructGPT 以及 ChatGPT 。在将人类反馈集成到系统之前,GPT 模型演进的最大进步是由计算效率所取得的成就推动的,这让 GPT-3 比 GPT-2 多接收了很多数据用来训练,赋予它更多样化的知识库,以及执行更广泛任务的能力。
GPT-2(左)与 GPT-3(右)在参数量、训练集、是否需要调优以及开放程度上的对比。
所有的 GPT 模型都利用了 transformer 架构,这意味着它们都会有一个编码器来处理输入序列,有一个解码器来生成输出序列。编码器和解码器都有一个多头的自注意力机制,这种机制可以让模型对序列的不同位置进行加权处理,从而推断含义与上下文。此外,编码器利用掩码语言建模来理解单词之间的关系,并生成更易于理解的响应。
驱动 GPT 的自注意力机制会将标记(文本片段,可以是单词、句子或其他文本分组)转换为向量,用来表示标记在输入序列中的重要性。为此,该模型会:
对于输入序列中的每个标记(token),首先生成三个向量:查询向量(query vector)、键向量(key vector)和值向量(value vector)。这三个向量都是通过对原始输入序列中的标记向量进行线性变换得到的。
通过取两个向量的点积(dot product)来计算第一步中的查询向量与每个其他标记的键向量之间的相似度。
通过将步骤 2 计算得到的相似度输入到一个 softmax 函数中,得到一组归一化的权重。
通过将步骤 3 中生成的权重乘以每个标记的值向量,生成一个最终向量,用来表示标记在序列中的重要性。
GPT 采用的“多头”注意力机制是自注意力的一种演变。上述步骤 1 到 4 模型不是只执行一次,而是多次地迭代这一机制,每次都会生成查询向量、键向量以及值向量的新的线性投影。通过以这种方式扩展自注意力,这种模型就可以掌握输入数据的子含义(sub-meanings)以及更复杂的关系。
ChatGPT对自注意力的解释
尽管 GPT-3 在自然语言处理方面取得了显著进步,但在符合用户意图方面,它的能力有限。比方说,GPT-3 可能会产生这样的输出:
缺乏有用性,意味着并未遵循用户的明确指示。
包含有幻觉,生成的东西反映的是不存在或不正确事实。
缺乏可解释性,导致人类难以理解模型是如何得出特定的决策或预测的。
包括令人不快或存在偏见的内容,这些内容有害或令人反感,还传播错误信息。
为了解决标准 LLM 的一些固有问题,ChatGPT 引入了创新的训练方法。
ChatGPT 是 InstructGPT 的衍生,它的新颖之处在于将人类反馈纳入到训练过程之中,以便让模型输出更好地与用户的意图保持一致。2022 年,OpenAI 发表论文《Training language models to follow instructions with human feedback》(使用人类反馈指令流来训练语言模型),介绍了利用人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF),简要介绍如下。
模型开发的第一部需要雇用 40 名承包商来创建一个“有监督训练数据集”对 GPT-3 模型进行微调,里面的输入均有已知的输出,用来给模型学习。输入(提示)是由实际用户输入给 Open API 而收集的。然后,打标签者会对提示做出适当的回应,从而为每个输入创建一个已知的输出。然后再用这个新的监督数据集对 GPT-3 模型进行微调,从而建立起 GPT-3.5,又叫做为 SFT 模型。
为了保证提示数据集尽可能的多样化,任何给定的用户 ID 只能提供 200 个提示,而且大家都输入的提示前缀会被删除掉。最后,所有包含个人身份信息(PII)的提示也会被删掉。
在汇总了来自 OpenAI API 的提示后,他们会让打标签人员创建样本提示,去填充只有最少真实样本数据的类别。感兴趣的类别包括:
普通提示(Plain prompts):任意的询问。
少样本提示(Few-shot):包含多对查询/响应的指令。
用户提示(User-based prompts):相当于对 OpenAI API 提出的特定用例请求。
在生成响应时,打标签者要尽最大努力推断用户的指令是什么。论文介绍了提示请求信息的主要三种方式。
直接(Direct):“告诉我关于……的情况”
少样本(Few-shot):鉴于这两个故事的例子,写出同一主题的新故事。
延续(Continuation):给出一个故事的开头,由 AI 续写完成。
来自 OpenAI API 的提示以及标注人员手写的提示总共得出了 13000 个输入/输出样本,然后部署到该“有监督模型”上。
出自OpenAI等 2022年发表的论文《Training language models to follow instructions with human feedback》。1、通过OpenAPI收集提示数据集;2、雇40位合同工给出提示的回应;3、所得数据用来对GPT-3进行调优
在步骤 1 中训练 SFT 模型后,该模型会对用户提示生成出更一致的响应。下一个改进是训练奖励模型,其中模型输入是一系列提示和响应,输出是一个标量值,叫做奖励(reward)。需要奖励模型来利用强化学习(Reinforcement Learning)。在强化学习当中,模型会学习生成输出,让累积的奖励最大化其奖励(参见步骤 3)。
为了训练奖励模型,打标签者会收到 4 到 9 个 SFT 模型的输出。然后要求他们对这些输出进行效果好坏的排名,创建的输出排名组合如下。
回应排名组合示例,4个输出两两对比总共有6种组合。
把模型的每个组合作为单独的数据点纳入在内会导致过度拟合(即模型只能在已知的数据上得到良好的表现,而无法泛化到未见过的数据上)。为了解决这个问题,该模型是利用每组排名作为单个批次处理数据点而建立起来的(编者注:因为每个批次的数据点都包含多个排名组合,从而增加了模型学习的多样性和泛化能力)。
出自OpenAI等 2022年发表的论文《Training language models to follow instructions with human feedback》。SFT会生成多个回应,打标签者会对输出进行排名,然后所得数据会被用来训练奖励模型
在最后阶段,模型会收到随机提示并返回响应。响应是用模型在步骤 2 中学到的“策略”(policy,某个具体的行为选择函数)生成的。策略意思是机器已经学会用来实现其目标的做法;在这种情况下,也即是奖励的最大化。根据在步骤 2 中形成的奖励模型,确定给定提示和响应对的标量奖励值。然后再将奖励反馈给模型,从而改进策略。
2017 年,舒尔曼等人引入了近端策略优化 (Proximal Policy Optimization ,PPO),这种方法可以用来在模型生成响应时更新策略。PPO 方法结合了 SFT 模型中的基于令牌(per-token)的 Kullback-Leibler(KL)惩罚。KL 散度可以用来衡量两个概率分布之间的相似性,并对距离过大的分布施加惩罚。在这种情况下,使用 KL 惩罚可以限制响应与 SFT 模型在步骤 1 中训练的输出之间的距离,以避免过度优化奖励模型,并且导致响应过于偏离人类意图数据集。通过引入 KL 惩罚,可以在训练过程中平衡模型的准确性和泛化能力。
左图出自OpenAI等 2022年发表的论文《Training language models to follow instructions with human feedback》。策略会生成输出,奖励模型然后计算该输出获得的奖励,奖励反过来又被用PPO来更新策略。
这一过程的第 2 步和第 3 步可以重复进行,但在实践中并没有获得广泛采用。
在训练新模型时,会将一组独立的此前模型从未见过的数据集(叫做“测试集”)留出来。这是为了确保对模型的性能进行评估时使用的是模型之前未接触过的数据,从而提供更准确的泛化能力评估。
有用性:模型推断和遵循用户指令的能力。在 85 ± 3% 的时间里,打标签者更喜欢 InstructGPT 而非 GPT-3 的输出。
真实性:模型产生“幻觉”的倾向。用 TruthfulQA 数据集进行评估时,PPO 模型产生的输出显示真实性和信息性略有增加。
无害性:模型避免生成不当、贬损和诋毁内容的能力。研究人员利用 RealToxicityPrompts 数据集测试了无害性。测试在三种条件下进行。
指示提供有礼貌的回应:导致毒性反应显著减少。
指示提供回应,没有任何表示尊重的设定:毒性没有显著变化。
指示提供毒性/贬损性的回应:回应的毒性比 GPT-3 模型大得多。
关于 ChatGPT 和 InstructGPT 所用方法的更多信息,可参见 OpenAI 的原文《Training language models to follow instructions with human feedback》,2022 。https://arxiv.org/pdf/2203.02155.pdf。
祝学习愉快!
译者:boxi。