03 构建 AI 驱动的应用程序


构建基于人工智能的应用程序不仅仅是选择合适的技术栈那么简单。人工智能驱动的应用程序与传统应用程序之间存在许多关键差异,例如提示工程,更不用说在传统应用程序中通常不存在的人工智能应用程序技术栈的独特部分,如向量数据库。

构建基于人工智能的应用程序更类似于传统编程,而不是我们在 MLOps 世界中看到的纯数据科学。虽然 MLOps 软件是为数据科学家和数据工程师开发和训练模型而构建的,但人工智能驱动的应用程序层是一个更高层次的抽象,其中提示工程、传统编码和系统部署,以及监测和管理都扮演着重要的角色。

在这个技术栈的这一层面上,最大的区别也许在于大多数团队不会从头开始训练一个模型。相反,他们会采用现有的模型,尝试直接使用它们,或者试图对其进行指导或微调以满足自己的需求。 只有在没有完全符合他们要求的模型,或者他们拥有高度独特的数据集时,团队才会训练自己的模型。 这些新模型往往与现有的基础模型或底座模型结合使用,以增强其功能。 例如,像 Contenda 这样的公司,它可以从教育视频中生成精美的博客文章,并带有完美格式的代码,它同时使用了 GPT 模型和自己的专有模型来完成这项任务。

为了按照机器学习先驱 Andrew Ng 在他的博客上所述的复杂性和成本顺序来构建以人工智能为驱动的应用程序,我们可以参考 Batch 上的方法。

提示词

给予预训练的大型语言模型指令可以在几分钟或几小时内建立一个原型,而无需训练集。今年早些时候,我看到很多人开始尝试提示,这种势头依然不减。 我们的几个短期课程教授了最佳实践方法。一次性或少量提示。除了提示,给予大型语言模型一些关于如何执行任务的示例(输入和期望输出),有时会产生更好的结果。

微调

一个在大量文本上进行过预训练的大型语言模型可以通过在自己的小型数据集上进一步训练来适应您的任务。微调工具正在不断成熟,使更多开发者可以使用。

预训练

从零开始预训练您自己的大型语言模型需要大量资源,因此只有很少的团队会这样做。除了在各种主题上进行了预训练的通用模型之外,这种方法还导致了专门的模型,例如了解金融的 BloombergGPT 和专注于医学的 Med-PaLM2。

大多数团队通常只是尝试通过提示现有模型来获取他们想要的结果。这是最快的方法来启动一个应用。提示的质量、对你想要的内容的理解以及正确地提问,都是提示的艺术和科学的组成部分。 许多人错误地认为提示很容易,任何人都可以做到。有时,从这些模型中获取你想要的东西是一个挑战。你只需要看看 Midjourney 和 Stable Diffusion 等扩散模型的广泛输出范围,就会发现有些人比其他人在提示方面更有优势。

提示的一个关键方面是知道你想要什么以及如何提问。一个很好的例子来自 AIIA 自身,当我们正在构建一个写作新闻简报的应用时。 最初,提示是由我们的首席编码员编写的,但结果产生的文章生硬、呆板,像散文一样。问题在于领域知识。我们的编码员并不是一个能够像编码一样轻松地操纵文字的专业作家。

我们在一位作家的帮助下重新编写了提示,他因为自己对写作领域的知识而知道该如何提问。他包括了一些诸如使用口语化的写作和使用缩略词,以及变化段落的长度,使其不像大块文本的大学论文,这样会让眼睛疲劳,让读者走神。

这些提示提供了更好的写作,更容易转化为可行的新闻简报,而原始的提示则需要进行大量重写才能达到基准水平。

基本提示有两种变种:

  • zero-shot 零样本提示(也称为基本提示)
  • few-shot 少样本提示

大规模语言模型,例如 GPT-4,具备 zero-shot 学习的能力。这听起来比实际情况要高级一些,但基本上意味着模型足够智能,能够理解超出其原始训练范围的示例或任务,因此您无需特殊处理就能使其理解您想要的或需要的内容。 实质上,该模型可以理解其训练数据之外的示例。

zero-shot 提示意味着您只需为模型提供一个描述性提示或上下文,以指导任务的执行。它实际上就是普通提示,没有什么特别之处。

为了更好地理解这个概念,让我们来解释一下这些术语:

  • zero-shot: 这个术语源自机器学习的分类领域。在 zero-shot 分类中,模型能够在没有明确训练的情况下正确分类新的、未见过的类别。 在生成式预训练转换器(GPT)等模型的背景下,「zero-shot」 意味着您正在尝试让模型执行一项没有直接微调的任务。
  • Prompting: 这指的是使用精心设计的输入或一系列输入来引导模型生成所需的输出。在 GPT 等语言模型的背景下,这通常意味着提供一个清晰、描述性的句子或段落,指导模型对其响应中的期望行为。

在涉及到大型语言模型(LLM)时,零样本提示可以使某人向模型提出任务或问题,而无需对特定任务进行任何先前的微调,仅依靠模型的预训练知识和提示的指导作用。

例如,如果您想使用 GPT-3 解决一个特定训练中未包含的数学问题,您可以使用明确的陈述来提示它,例如 「解下列代数方程...,并提供方程」。 尽管 GPT-3 没有针对这个数学问题进行特定的调优,但它广泛的训练数据和对语言和上下文的理解使其能够根据给定的提示尝试解决问题。

在实践中,实现期望的结果有时需要对提示进行迭代调优,以更好地引导模型的输出。 这导致了关于有效提示和少样本学习的研究和技术,其中提供了一些示例来帮助引导模型的行为。

现在假设您希望模型进行情感分析,即将文本标记为积极、消极或中性。 在传统的机器学习中,您可能会使用递归神经网络(RNN)并训练它接受输入段落并分类其输出。然而,如果您将一个新类别添加到分类中,例如要求模型不仅对输出进行分类,还要对其进行总结,您需要重新训练模型或使用一个新模型。 相比之下,LLM 不需要重新训练就能执行新类别的任务。

您可以要求模型对段落的情感进行分类并进行总结。您可以询问它段落的情感是积极的还是消极的,因为 LLM 已经学会了这些词的含义。

以GPT-4为例,以下是一个示例:

gpt4-example2

我们准确地指示了 GPT-4,利用其对负面和正面等词语的深入理解,并获得了很好的结果。 我们甚至给它一个具有挑战性的例子,许多传统模型难以理解: "The layer is on fire" 这个例子很难理解,因为如果模型把它理解为球员实际上在燃烧,那肯定是负面的。 相反,模型识别出这个常见的体育习语 "The layer is on fire",意思是球员状态火热🔥,表现极好,是正面的。

然而,零样本提示可能会因为应用设计者碰到模型预训练能力的限制而失败。例如,一个模型可能能够始终进行一些基本的推理,但在更复杂和长程推理方面表现糟糕。

为了获得更好的结果,人们可以采用少样本提示的方法,向模型提供一些关键的示例。它仍依赖于模型的预训练知识,但指导模型更好地理解您对其的需求。

少样本提示为模型提供了几个任务示例(或 「样本」),以指导其对该任务的新实例的响应。 其想法是,通过看到少量示例,模型可以更好地理解和推广手头的任务。

例如,考虑将一个句子从现在时转换为过去时的任务。以下是使用 GPT 进行少样本提示的示例:

将下列句子从现在时转换为过去时:

  • 「I play basketball.」 -> 「I played basketball.」
  • 「She watches a movie.」 -> 「She watched a movie.」
  • 「They swim quickly.」 -> 「They swam quickly.」

Convert: "He plays video games."

He played video games.

通过观察这些例子,我们期望模型能够推断出正确的模式,并正确地将新的句子从现在时转换为过去时。

在以下情况下,少样本提示可能会有用:

  • 在模型的原始训练中,某个特定任务或领域可能没有得到很大的关注,因此少量示例可以帮助模型朝着正确的方向前进。
  • 对于在零样本模式下获得最佳结果的提示措辞不确定时,提供示例可以使任务对模型变得更清晰。

此外,还有许多更高级的提示示例,这些示例不断来自于尝试不同方法论并发布论文以将其教给其他人的研究人员。 OpenGenus 对其中一些概念有很好的解析,但随着越来越多的人们找到了让大型语言模型进行更好推理的方法,似乎每周都会有更多的示例出现。

我们不会在这里详细介绍它们,但让我们看几个例子,比如 「思维链」(CoT)提示。

CoT 提示 源自 Wei 等人(2022年)的论文,题为 《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》。 通过在中间步骤中提供提示,它提供了更复杂的推理能力。这为需要在给出答案之前进行推理的更困难的任务产生了更好的结果。

wei-et-al-2022

在 CoT 示例中,将到达答案的逻辑步骤解释给模型(在右侧的蓝色突出显示部分),使其能够遵循该逻辑,然后使用类似的逻辑更好地解决类似类型的问题。

Wang 等人(2022年)的一篇论文 提出的自一致性旨在改善 CoT 技术的推理能力。 该论文指出,「它取代了思维链提示中使用的贪婪解码策略」,这是一种复杂的说法,基本上它多次提示模型,然后选择出现最频繁的答案,从而平均掉错误答案。 这似乎对数学和常识推理更有效。

Learn Prompting 网站上有一个很好的例子。

wang-et-al-1
wang-et-al-2

通过对错误答案进行平均(不重要)可以产生更一致的结果。然而,这也会减慢响应时间,增加云端模型的往返时间和开发者的成本,因此我们希望在未来几年中更先进的模型不需要使用这样的技术。

一些更先进的模型在 AIIA 首席运营官 Mariya Davydova 的 Centaur Life 博客中有详细介绍。 我们在这里转载了她分析的部分内容,并获得了她的许可,但是我们鼓励您阅读整个博客以获取更详细的信息和更多的示例。让我们在这里更仔细地看一下。

一些团队已经用多个模型或大模型替代了单个大模型,以便它们可以一起推理或共享信息。 这些技术很有前景,但当然,它们增加了开发人员的成本和往返时间,因此需要一个强有力的理由来追求这些方法。

第一种方法是使用多个 Agent 一起解决复杂问题。一些论文详细介绍了这种方法:

基本思想是让多个大模型进行对话,以克服其中一个模型在推理或提供真实或基于事实的答案方面的缺点。

最直接的技术是来自 Liang et al.(2023)论文「multi-agent debate」(MAD 多 Agent 辩论)。其思想如下:

  • 让两个或更多个等效的 Agent 回答同一个问题,交换信息,并根据来自同行的见解改进他们的答案。
  • 每轮中,所有 Agent 的答案都在彼此之间共享,促使它们修改之前的回答,直到最终达成共识。

因此,在这里,每个 Agent 都付出了相同的努力。

liang-et-al

另一种方法采用了 Cochen et al. (2023) 论文 中的交叉审问技术,我们有两种类型的大型语言模型(LLMs):审问者和被审问者。被审问者提出一个问题,审问者随后提出附加问题,最终决定被审问者的回答是否正确。

cochen-et-al

接下来是 Nair et al. (2023) 的对话驱动解决 Agent (DERA)方法,我们在这种情况下分配了略有不同的角色。 在这个案例中,我们有一个决策者 LLM,其任务是完成任务(在这篇以医学为导向的论文中,任务是根据患者数据进行诊断),以及一个研究者 LLM,该模型与决策者 LLM 进行辩论以调整解决方案。 他们的对话更像是两位专业人士之间的深思熟虑的交流,而不是一场考试。

nair-et-al

多智能体方法的吸引之处在于它易于编程,并且可以高度适应特定领域的应用。 最后一篇论文将其应用于医疗建议,但我们很容易可以看到这些智能体在各种主题上进行激烈讨论,包括法律案例、历史背景、市场研究和系统架构。

在 AIIA,我们鼓励团队从简单开始,只有在应用需要时才转向更高级的技术。 团队还必须考虑往返时间和托管模型或基于令牌的定价的成本。采用多模型方法或对回应进行平均的方法可能会显著增加响应时间和基于令牌的成本。 如果您的团队托管的是您自己创建的模型或开源基础模型,那么您可能会有固定的成本,因此通过使用多模型或多提示方法来最大化这个固定成本可能是值得的。

如果模型无法提供您想要的结果,您可能需要采用更高级的技术,比如对模型进行微调。 基础模型可能具有广泛的能力范围,但通过在经过精心策划的数据集上对模型进行微调,提供丰富的新示例,可以显著改善模型在特定任务上的性能。

Civitai 是开源稳定扩散模型系列的微调模型存储库。 LegoAi 模型在 Lego 图像上进行了微调,在创建良好的 Lego 模型方面相比基准稳定扩散 1.5 模型表现出色。 它使人们能够输出复杂的 Lego 设计,而基础模型在处理这些设计时存在困难。

微调可以应用于任何类型的基础模型。对于语言模型,我们可能希望训练模型以特定的风格进行写作,因此我们创建或策划一个适合该风格的数据集,以便教导模型更好地模仿它。 我们可能希望在模型中构建更强大的医学或法律知识,因此我们将其训练在一个经过精心设计的特定示例数据集上,以在该领域获得更强大的结果。

有许多方法可以对模型进行微调,详细介绍在 Label Studio 的博客中。

Transfer Learning(迁移学习)

迁移学习是微调中广泛使用的方法,它利用从一个任务中获得的知识来解决不同但相关的任务。 这种方法减少了对大量数据和计算能力的需求,因为模型可以利用对语言和模式的预先理解。 当新任务与模型最初训练的任务有相似之处时,迁移学习特别有效,可以实现高效的适应和改进性能。

Sequential Fine-Tuning(顺序微调)

顺序微调是指连续训练模型在多个相关任务上。这种方法使模型能够理解不同任务之间微妙的语言模式,增强性能和适应性。 当模型需要学习多个相关任务时,顺序微调具有优势,因为它可以积累知识并针对语言理解的特定方面进行微调。

Task-Specific Fine-Tuning(特定任务微调)

特定任务微调旨在将预训练模型调整到在特定任务上表现出色。尽管这种方法需要更多的数据和时间,但可以在任务上获得高性能。 特定任务微调专注于优化模型的参数和架构,以有针对性地增强其能力。当特定任务的性能至关重要时,这种方法尤为有价值。

Multi-Task Learning(多任务学习)

多任务学习是指同时在多个任务上训练模型。这种方法通过利用不同任务之间的共享表示来提高泛化和性能。模型学习捕捉共同的特征和模式,从而实现更全面的语言理解。 当任务相关且共享知识增强模型的学习和适应能力时,多任务学习最为有效。

Adapter Training(适配器训练)

适配器训练是一种方法,可以在不影响原始模型在其他任务上的性能的情况下,对特定任务进行微调。这种方法涉及训练轻量级模块,可以集成到预训练模型中,从而实现有针对性的调整。 当需要保持预训练模型的原始性能,并提供灵活性和高效性以适应特定任务需求时,适配器训练是一个很好的选择。

然而,当涉及到基于人工智能的应用时,团队倾向于专注于针对语言模型特别设计的微调方法的较小子集。其中包括三个主要的微调分支:

  • Instruct Tuning(指导微调)
  • Alignment Tuning(对齐微调)
  • Adapter Training, aka Parameter Efficient Fine Tuning(适配器训练,又称参数高效微调)

让我们详细看一下每个分支。

这可能是微调基础语言模型最受欢迎的方法。它通常在一开始就被使用,以使模型以更接近人类的方式回答问题或更好地执行特定任务。 例如,Meta 发布了 Llama2 模型,既作为基础模型,也作为经过指导微调的 「chat」 版本,使其在进行对话、回答问题等方面表现更好。 这种方法已广泛应用于最先进的语言模型,如 InstructGPTGPT-4,并且在新的提供者中持续受到关注。

理论上这个概念很简单,但在实践中具有挑战性,因为它需要收集大量高质量的示例。模型微调团队创建或获取了一个大型的问题和回答示例数据集。

一个很好的例子是 Databrick 的 Dolly 15K 数据集,它是由超过 5000 名 Databrick 员工在2023年3月至4月之间创建的。它基于 OpenAI 的想法以及他们的论文,该论文概述了创建 InstructGPT 模型的方法,该模型在由 13000 个指令遵循行为示例组成的数据集上进行训练。

他们希望训练模型在问答、从维基百科提取信息、头脑风暴、分类和创意写作等方面表现更好。在描述该项目的博客中,他们列出了员工需要遵循的以下指示:

instructions
指示
举例
Open Q&A 开放式问答 例如,「为什么人们喜欢喜剧电影?」 或者 「法国的首都是哪里?」在某些情况下,没有一个正确答案,而在其他情况下,需要利用广泛的世界知识。
Closed Q&A 封闭式问答 这些是只能使用参考文本中的信息来回答的问题。例如,给定来自维基百科关于原子的一个段落,可以问:「原子核中质子和中子的比例是多少?」
Extract 从维基百科中提取信息 在这个任务中,标注员会复制维基百科的一个段落,并从中提取实体或其他事实信息,如重量或尺寸。
Summarize 从维基百科中总结信息 对于这个任务,标注员提供了一段维基百科的文章,并被要求将其浓缩成一个简短的摘要。
Brainstorming 头脑风暴 这个任务要求进行开放式的创意构思,并列出可能的选项列表。例如,「这个周末我可以和朋友们做些有趣的活动有哪些?」
Classification 分类 对于这个任务,标注员被要求对类别成员资格进行判断(例如,一个列表中的项目是动物、矿物还是植物),或者对一段短文的特性进行判断,例如电影评论的情感。
Creative writing 创意写作 这个任务可能包括写一首诗或一封情书。

他们创建了一系列的例子,如下所示:

在 Databricks-dolly-15k 中的 Open QA 示例:

我该如何生篝火?

在点燃篝火时,安全永远是首要考虑。确保你随时可以得到水或其他灭火工具。使用篝火环或坑,或者在篝火位置周围清理一个大的区域。还要确保在你所在地区允许生火。

安全措施完成后,火只需要热量、燃料和氧气。任何可燃物都能点燃火,但好的篝火燃料来源包括火种、引火物和干燥的木柴。可以使用干燥的松针、干叶、草和木屑作为火种。 也可以使用报纸(或任何纸张)、烘干机滤网或纸板。对于引火物,使用较小的木材,如细树枝和不超过1英寸直径的木棍(大约和拇指一样粗)。

干燥或经过充分干燥的木柴能确保良好的燃烧。将木材堆叠在一起,以确保氧气能够轻易接触到火焰。许多人喜欢使用帐篷形状或木屋形状的堆叠设计。 现在,使用热源来创造火焰或火花,并将其应用于火种。一旦火种燃烧起来,它应该点燃引火物,引火物最终应该点燃木柴。如果一切顺利,你现在应该能够享受篝火了。

在 Databricks-dolly-15k 中进行头脑风暴的示例:

不要只是做花生酱和果酱三明治,还有什么其他食材可以与花生酱搭配在三明治中? 给出五个想法。

与花生酱搭配在三明治中,可以尝试以下一种替代果酱的食材:

  1. 蜂蜜
  2. 葡萄干
  3. 水果酱
  4. 香蕉
  5. 切片苹果

指令调优可以增强或释放 LLMs 在特定领域、特定任务中的潜在能力。 在基础模型训练后,这对 LLMs 来说是常见的做法,团队通常会发布一个经过指令调优的模型和一个基础模型,就像我们在 Meta 的 Llama2 中看到的那样。

对齐调优是一种强化学习,具体来说是通过人类反馈进行的强化学习(RLHF [1] )。

人工智能大模型在各种任务上展示出巨大的能力。但通常情况下,这些模型并不与其创建者的偏好相一致。由于其训练方式的原因,人工智能大模型通常不会与任何人类偏好相一致。

现今的人工智能大模型涉及预训练步骤,模型会被喂入大量文本语料,并教会进行词语预测,而不考虑人类的价值观或偏好。该模型可能会表现出不良行为,例如提供虚假信息、做出错误观察或给出危险的答案,比如详细说明如何制作炸弹或甲基苯丙胺。

对齐调优旨在通过微调模型,使其更具帮助性、诚实性和无害性,用 Anthropic 公司专注于对齐的话来说:

这种调优可能对于大型企业至关重要,因为它们可能面临诉讼、公众反弹以及当模型出现问题时可能导致的实际问题,比如经济损失。 如果你的人工智能大模型建议孩子自杀,那么你可能会面临重大的诉讼。这就是对齐调优的作用所在。

基本上,这归结为从模型获取输出,并让人类根据一组准则对其进行评级,然后使用奖励函数训练模型,使其答案更接近人类所期望的答案。 对齐调整尤其具有挑战性,通常超出了大多数没有经验丰富的强化学习和人类反馈(RLHF [1] )的团队的能力范围。 具体而言,对齐调整可能会削弱大模型的整体能力,这通常被称为「对齐成本」。这种情况下,模型可能会拒绝给出被视为负面的答案,而实际上这对当前任务至关重要。

reddit-llama2

在这个来自 Reddit 的例子中,Llama2 模型的聊天版本经过了指导和对齐调整,它拒绝回答如何终止 Linux 进程的问题,因为它不理解在命令行 Linux 中,kill 是正确的术语来停止一个出现故障的进程。相反,模型认为用户想要伤害某人或某物,并且拒绝回答。

RLHF 在正确实现上被公认为非常棘手。它将强化学习与人类反馈相结合 其目标是训练 Agent,不仅优化给定的奖励函数,还要表现出与人类价值观或意图相一致的行为。

传统的强化学习涉及一个与环境进行交互的 Agent,通过试错学习采取能够随时间累积奖励的行动。 Agent 开始对环境几乎一无所知,通过试错学习。环境根据 Agent 的行动给予奖励(或惩罚),Agent 利用这些反馈来调整自己的行为。

传统强化学习的问题在于指定奖励函数可能非常具有挑战性。小的疏忽可能导致意想不到的行为。 例如,如果一个机器人吸尘器只因吸尘而受到奖励,而不因撞倒物品而受到惩罚,它可能会过于激进地清洁并打破路径上的物品。

RLHF 试图通过融入人类偏好来解决这些限制。这可以通过多种方式实现,例如:

方式 举例
演示 人类展示正确的行为,Agent 通过观察这些演示来学习。
比较 给定两个或多个轨迹(行动序列),人类可以根据它们的可取性对它们进行排名或比较。
纠正性反馈 当 Agent 正在行动或行动结束后,人类可以通过告诉 Agent 它做对了还是做错了来提供反馈。

通常,人类反馈被用来创建奖励模型。然后,Agent 根据这个模型优化其行为。 这个过程可以进行多次迭代:Agent 根据当前的奖励模型行动,接收更多反馈,更新模型,如此往复。

数据集示例

具有人类反馈的 Atari 游戏:传统强化学习已经应用于 Atari 游戏。 研究人员可以通过让人类对不同的游戏轨迹进行排名或在游戏过程中提供纠正性反馈来利用人类反馈。

数据集
举例
熟练操纵数据集 涉及使用机器人手进行物体操作的任务被公认为非常困难。人类的演示或反馈可以帮助训练 Agent 以更加娴熟的方式执行这些任务。
自动驾驶数据集 尽管这些数据集中的许多都侧重于监督学习,但它们可以适应 RLHF。人类驾驶员可以提供正确驾驶的演示或对模拟驾驶轨迹提供反馈。

RLHF 基本上包括四个核心步骤:

  • 模型预训练
  • 收集数据并进行标记
  • 训练奖励模型
  • 对语言模型进行微调

正如在这里所提到的,大多数团队不会自己进行第一步。他们会采用现有的基础模型或底座模型,并根据自己的需求进行微调。 从人力、计算资源和时间的角度来看,从头开始训练高级语言模型是极具挑战性和昂贵的。因此,大多数团队会从第二步开始,收集数据,通常是从语言模型本身输出的数据。 或者,他们将从现有的 RLHF 数据集(例如 Anthropic’s RLHF 数据集)中提取数据,以构建有用且无害的模型,以供其 constitutional AI 方法使用。 然后,这些数据用于下一步,即训练奖励模型。

创建奖励模型的基本目标是训练一个模型,使其接收一系列文本,然后返回一个数值化代表人类偏好的标量奖励。 标量奖励的输出对于当前最先进的 RLHF 过程至关重要。奖励模型的风格各不相同。它可以是另一个微调的语言模型,也可以是从头训练的语言模型。

奖励模型的提示生成对训练数据集来自于从团队收集或下载的数据集中抽取一组提示。这些提示被提供给语言模型生成新的文本。然后,人类注释员对语言模型生成的文本输出进行排名。

也许你会认为可以让人类直接给每个文本分配一个标量奖励分数,但实际上并不行,因为每个人在任务中带入了不同的价值观和判断。 不同的人标注者的不同价值观最终导致分数乱七八糟且嘈杂。相反,排名被用来比较多个模型的输出,从而创建一个更加规范的数据集。

有许多方法可以对输出进行排名。一个在微调模型中表现良好的流行方法是比较同一提示上两个不同模型的输出。 通过将输出进行头对头的比较,对于人类评分者来说,它变成了一个更简单的二选一选择。 可以使用 Elo 系统来生成模型和输出之间的排名关系。

一般而言,训练奖励模型可能与从头开始训练语言模型一样具有挑战性和成本敏感性,因此,除非是一家有着对其业务和底线产生有害输出的重大惩罚,或对现实世界安全性有所要求的大型企业,否则大多数团队都不会这样做。 迄今为止,成功的奖励模型都非常庞大,Anthropic 使用的模型参数多达520亿,DeepMind 则使用70亿参数的 Chinchilla 模型的变种作为语言模型和奖励模型。 这些大型模型之所以存在的最可能原因是,奖励模型需要像语言模型本身一样对文本有很好的理解,以有效评估输出是否符合偏好。 很可能,许多大型专有语言模型基础模型提供商(如 OpenAI、Anthropic、Cohere 和 Inflection)的奖励模型都使用了其最先进的模型的某种变体来训练成奖励模型。

我们正在开始看到以对齐为重点的公司和平台的兴起。Kognic 最近开始进行快速模型对齐,我们预计会看到更多类似的情况。 我们需要在对齐调整方面有数量级的加速。例如,我们需要快速调整模型以消除不良行为,而且这个过程不能像现在一样持续数天、数周或数月。

在 AIIA 看来,未来几年将出现一个过程,其中对齐调整几乎完全自动化,然后完全自动化。 想象一下,一个模型建议一个年轻人自杀。这是我们希望从模型中调整出的有害行为。 一种方法是构建外部中间件安全措施,但更好的方法是使模型与我们的期望保持一致,这样我们就不需要预先考虑每个可能的具有挑战性的问题,而我们不希望模型回答这些问题。

一种快速微调器可以使错误修复团队向模型本身请求合成数据,或者使用像 YData 这样的专用平台生成合成数据。 例如,再次想象一下,模型告诉年轻人为什么自杀是一个好主意。在这种情况下,微调平台会向模型提出相反的问题:「为什么自杀永远不是一个好主意?」然后,他们会检查回答,并将其与原始问题配对,并迅速迭代问题和答案的变化,生成成千上万个更多的变体。 其中一小部分变体会被发送给人类测试员,以检查准确性、清晰度和正确性,然后微调器将在后台工作,生成一个新的模型或适配器(在下一节中详细介绍)。

虽然我们已经看过两种非常特定的微调方法,但让我们来看一个更广泛且更注重效率的微调方法,而不是特定类型的输出,就像对齐微调特定于与人类偏好对齐一样。

对于自然语言处理(NLP)任务,微调大型预训练模型是一种有效的迁移学习方法,但是当您开始添加新的下游任务时,您可能会破坏原始模型,因为您正在调整其权重。 这被称为灾难性遗忘。本质上,模型在学习新信息时忘记了它先前理解的内容,因为其神经网络从原始权重调整到新的配置。 少量微调对于原始模型只有适度的破坏性,但随着我们继续训练模型,它可能导致模型崩溃,并且其在微调过程之前擅长的任务的性能受到影响。

微调也非常低效,因为它需要加载整个模型并对所有权重进行新训练的更改。 作为替代方案,研究人员开始开发更高效的微调方法,即冻结原始模型的大部分或全部权重,并附加一个适配器,其中包含一组额外的权重,用于修改原始模型的输出。 2019年的一篇名为 《NLP的参数高效迁移学习》 的论文概述了该方法。

自那时以来,我们已经有了许多新的参数高效适配器方法,例如大型语言模型的低秩适配(LoRA)和 QLoRA,这些方法已被开源和专有研究团队广泛应用。它们也已经被应用于不仅仅是 LLMs 的扩散模型,例如稳定扩散(Stable Diffusion)。

适配器模块紧凑且可扩展。它们每个任务只添加了一些可训练的参数,并且可以在不破坏早期任务的熟练度的情况下添加新任务。 由于原始神经网络的参数保持不变,适配器可以实现高度的参数共享。此外,适配器可以堆叠或互换,并且它们比加载整个模型的另一个副本更加内存高效,因为它们只包含一小部分参数。

完全微调非常昂贵,特别是如果您有很多不同的任务要求模型擅长完成。适配器微调模型与完全微调模型相比,除了原始模型的大小外,还要增加适配器的大小,后者可能比原始模型大得多。 参数高效微调(PEFT)这个术语由 Hugging Face 推广,并且作为指代基于适配器的微调方法的常见方法已经得到广泛应用。 PEFT,又称为基于适配器的方法,只训练少量额外的模型参数,同时冻结大部分或全部原始 LLM 参数。 这有效地解决了灾难性遗忘的问题,即在新任务上训练的模型开始忘记如何执行其原始任务。 例如,一个训练用于识别狗的模型在过度微调后可能开始错误地识别狗。

PEFT/适配器可以应用于各种模型,而不仅仅是 LLM,并且它们已经被社区程序员和研究人员广泛应用,特别是在稳定扩散社区中,用于扩散模型。 相比完全微调的 8GB 基础模型,拥有一个 200MB 的 LoRA 适配器要容易得多。

如果可以的话,大多数团队最好为现有模型训练一个适配器,而不是对整个模型进行微调。 不幸的是,这通常只适用于开源模型,因为团队需要访问模型权重以创建适配器。 如果您正在对 GPT-4 等商业模型进行微调,您只能使用 OpenAI 的平台对其模型进行微调,而他们的操作方式则是在幕后。 此外,与运行基础模型相比,他们还额外收费,根据本文撰写时的情况,每个标记高达3倍,尽管一些供应商允许以相同的标记价格运行经过微调的版本。

适配器可以应用于几乎任何用例,例如将医学或法律知识添加到现有的 LLM 中,使用类似稳定扩散的方法使其创建特定的艺术风格,或者教授它一个全新的任务,例如对你的企业论坛进行新形式仇恨言论的分类过滤。

正如我们之前提到的,有许多用于进行微调的平台。您可以使用传统的 MLOps 平台,这些平台可以轻松地用于训练您完全可以访问的基础模型,例如 Llama2。 这些平台包括 ClearMLHPE’s ExmeralMosaicML(被 Databricks 收购)、Pachyderm(被 HPE 收购)、AnyscaleWeights and Biases,以及像 Amazon 的 SageMaker 套件、Google 的 Vertex 和 Microsoft 的 Azure Machine Learning 这样的大型云 MLOps 技术栈,它们可以运行微调流水线,还有像 LaminiHumanloopEntry PointScale’s LLM fine tunerArgilla 这样的新公司,它们专注于 LLM 的微调。 我们预计越来越多的公司将提供可以轻松微调的基础模型,并且这个过程将变得更加自动化和迅速。

此外,您的团队可能需要使用像 V7ScaleLabel StudioSuperb AI(用于多模态图像数据)、Human Signal(使用Label Studio Enterprise)、TolokaEnlabelerSnorkel 以及专注于 RHLF 工作的公司(如 Surge AI)的标注平台的帮助。


脚注:

[1]  通过人类反馈进行的强化学习,Reinforcement Learning with Human Feedback ↩︎  ↩︎